Page MenuHomeFreeBSD

D14621.id40074.diff
No OneTemporary

D14621.id40074.diff

Index: sys/netinet/ip_output.c
===================================================================
--- sys/netinet/ip_output.c
+++ sys/netinet/ip_output.c
@@ -956,6 +956,7 @@
ip_ctloutput(struct socket *so, struct sockopt *sopt)
{
struct inpcb *inp = sotoinpcb(so);
+ struct mbuf *options;
int error, optval;
#ifdef RSS
uint32_t rss_bucket;
@@ -1242,12 +1243,17 @@
switch (sopt->sopt_name) {
case IP_OPTIONS:
case IP_RETOPTS:
- if (inp->inp_options)
+ if (inp->inp_options) {
+ options = malloc(sopt->sopt_valsize, M_TEMP, M_WAITOK);
+ INP_RLOCK(inp);
+ bcopy(inp->inp_options, options, min(inp->inp_options->m_len, sopt->sopt_valsize));
+ INP_RUNLOCK(inp);
error = sooptcopyout(sopt,
- mtod(inp->inp_options,
+ mtod(options,
char *),
- inp->inp_options->m_len);
- else
+ options->m_len);
+ free(options, M_TEMP);
+ } else
sopt->sopt_valsize = 0;
break;

File Metadata

Mime Type
text/plain
Expires
Tue, Aug 18, 5:46 PM (32 m, 37 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36902298
Default Alt Text
D14621.id40074.diff (961 B)

Event Timeline