[Midnightbsd-cvs] src: ip_output.c: add locks around so->so_pcb checks.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun May 18 13:46:08 EDT 2008
Log Message:
-----------
add locks around so->so_pcb checks.
Modified Files:
--------------
src/sys/netinet:
ip_output.c (r1.4 -> r1.5)
-------------- next part --------------
Index: ip_output.c
===================================================================
RCS file: /home/cvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -L sys/netinet/ip_output.c -L sys/netinet/ip_output.c -u -r1.4 -r1.5
--- sys/netinet/ip_output.c
+++ sys/netinet/ip_output.c
@@ -1204,11 +1204,14 @@
m_free(m);
break;
}
+ INP_INFO_WLOCK(pcbinfo);
if (so->so_pcb == NULL) {
+ INP_INFO_WUNLOCK(pcbinfo);
m_free(m);
error = EINVAL;
break;
}
+ INP_INFO_WUNLOCK(pcbinfo);
INP_LOCK(inp);
error = ip_pcbopts(inp, sopt->sopt_name, m);
INP_UNLOCK(inp);
@@ -1230,10 +1233,14 @@
sizeof optval);
if (error)
break;
+ INP_INFO_WLOCK(pcbinfo);
if (so->so_pcb == NULL) {
+ INP_INFO_WUNLOCK(pcbinfo);
error = EINVAL;
break;
}
+ INP_INFO_WUNLOCK(pcbinfo);
+ INP_LOCK(inp);
switch (sopt->sopt_name) {
case IP_TOS:
inp->inp_ip_tos = optval;
@@ -1308,10 +1315,13 @@
sizeof optval);
if (error)
break;
+ INP_INFO_WLOCK(pcbinfo);
if (so->so_pcb == NULL) {
+ INP_INFO_WUNLOCK(pcbinfo);
error = EINVAL;
break;
}
+ INP_INFO_WUNLOCK(pcbinfo);
INP_LOCK(inp);
switch (optval) {
case IP_PORTRANGE_DEFAULT:
@@ -1494,11 +1504,8 @@
}
int
-ip_ctloutput(so, sopt)
- struct socket *so;
- struct sockopt *sopt;
+ip_ctloutput(struct socket *so, struct sockopt *sopt)
{
-
return (ip_ctloutput_pcbinfo(so, sopt, NULL));
}
More information about the Midnightbsd-cvs
mailing list