summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2004-06-24 02:05:47 +0000
committerrwatson <rwatson@FreeBSD.org>2004-06-24 02:05:47 +0000
commit99412c4858081b56d674b646a379ba3c8cf625f5 (patch)
tree0e41e1c860c9a3345d6a8200983ce71898277070 /sys/netinet/ip_output.c
parent93baf0b01a4613cd177b1fd2c4b2c26f01456e94 (diff)
downloadFreeBSD-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.c15
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)
OpenPOWER on IntegriCloud