Page MenuHomeFreeBSD

D14621.id45285.diff
No OneTemporary

D14621.id45285.diff

Index: head/sys/netinet/ip_output.c
===================================================================
--- head/sys/netinet/ip_output.c
+++ head/sys/netinet/ip_output.c
@@ -1256,12 +1256,18 @@
switch (sopt->sopt_name) {
case IP_OPTIONS:
case IP_RETOPTS:
- if (inp->inp_options)
+ if (inp->inp_options) {
+ unsigned long len = ulmin(inp->inp_options->m_len, sopt->sopt_valsize);
+ struct mbuf *options = malloc(len, M_TEMP, M_WAITOK);
+ INP_RLOCK(inp);
+ bcopy(inp->inp_options, options, len);
+ INP_RUNLOCK(inp);
error = sooptcopyout(sopt,
- mtod(inp->inp_options,
+ mtod(options,
char *),
- inp->inp_options->m_len);
- else
+ len);
+ free(options, M_TEMP);
+ } else
sopt->sopt_valsize = 0;
break;

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 20, 4:27 PM (7 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28901445
Default Alt Text
D14621.id45285.diff (800 B)

Event Timeline