diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-06-24 02:05:47 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-06-24 02:05:47 +0000 |
commit | 99412c4858081b56d674b646a379ba3c8cf625f5 (patch) | |
tree | 0e41e1c860c9a3345d6a8200983ce71898277070 /sys/netinet/ip_output.c | |
parent | 93baf0b01a4613cd177b1fd2c4b2c26f01456e94 (diff) | |
download | FreeBSD-src-99412c4858081b56d674b646a379ba3c8cf625f5.zip FreeBSD-src-99412c4858081b56d674b646a379ba3c8cf625f5.tar.gz |
In ip_ctloutput(), acquire the inpcb lock around some of the basic
inpcb flag and status updates.
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r-- | sys/netinet/ip_output.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 520de05..6ee1f68 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -1437,11 +1437,14 @@ ip_ctloutput(so, sopt) case IP_TTL: inp->inp_ip_ttl = optval; break; -#define OPTSET(bit) \ - if (optval) \ - inp->inp_flags |= bit; \ - else \ - inp->inp_flags &= ~bit; +#define OPTSET(bit) do { \ + INP_LOCK(inp); \ + if (optval) \ + inp->inp_flags |= bit; \ + else \ + inp->inp_flags &= ~bit; \ + INP_UNLOCK(inp); \ +} while (0) case IP_RECVOPTS: OPTSET(INP_RECVOPTS); @@ -1489,6 +1492,7 @@ ip_ctloutput(so, sopt) if (error) break; + INP_LOCK(inp); switch (optval) { case IP_PORTRANGE_DEFAULT: inp->inp_flags &= ~(INP_LOWPORT); @@ -1509,6 +1513,7 @@ ip_ctloutput(so, sopt) error = EINVAL; break; } + INP_UNLOCK(inp); break; #if defined(IPSEC) || defined(FAST_IPSEC) |