[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