Module Name:    src
Committed By:   ozaki-r
Date:           Wed Feb 22 07:05:04 UTC 2017

Modified Files:
        src/sys/netinet: in_pcb.h ip_output.c
        src/sys/netinet6: in6_pcb.h ip6_output.c

Log Message:
Add assertions and comments for lock states of socket and pcb


To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/sys/netinet/in_pcb.h
cvs rdiff -u -r1.271 -r1.272 src/sys/netinet/ip_output.c
cvs rdiff -u -r1.47 -r1.48 src/sys/netinet6/in6_pcb.h
cvs rdiff -u -r1.184 -r1.185 src/sys/netinet6/ip6_output.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netinet/in_pcb.h
diff -u src/sys/netinet/in_pcb.h:1.61 src/sys/netinet/in_pcb.h:1.62
--- src/sys/netinet/in_pcb.h:1.61	Thu Dec  8 05:16:33 2016
+++ src/sys/netinet/in_pcb.h	Wed Feb 22 07:05:04 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_pcb.h,v 1.61 2016/12/08 05:16:33 ozaki-r Exp $	*/
+/*	$NetBSD: in_pcb.h,v 1.62 2017/02/22 07:05:04 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -128,6 +128,7 @@ struct inpcb {
 				INP_PKTINFO)
 
 #define	sotoinpcb(so)		((struct inpcb *)(so)->so_pcb)
+#define	inplocked(inp)		solocked((inp)->inp_socket)
 
 #ifdef _KERNEL
 void	in_losing(struct inpcb *);

Index: src/sys/netinet/ip_output.c
diff -u src/sys/netinet/ip_output.c:1.271 src/sys/netinet/ip_output.c:1.272
--- src/sys/netinet/ip_output.c:1.271	Fri Feb 17 04:31:34 2017
+++ src/sys/netinet/ip_output.c	Wed Feb 22 07:05:04 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_output.c,v 1.271 2017/02/17 04:31:34 ozaki-r Exp $	*/
+/*	$NetBSD: ip_output.c,v 1.272 2017/02/22 07:05:04 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.271 2017/02/17 04:31:34 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.272 2017/02/22 07:05:04 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1058,6 +1058,8 @@ ip_ctloutput(int op, struct socket *so, 
 	int inpflags = inp->inp_flags;
 	int optval = 0, error = 0;
 
+	KASSERT(solocked(so));
+
 	if (sopt->sopt_level != IPPROTO_IP) {
 		if (sopt->sopt_level == SOL_SOCKET && sopt->sopt_name == SO_NOHEADER)
 			return 0;
@@ -1335,6 +1337,8 @@ ip_pcbopts(struct inpcb *inp, const stru
 	u_char *dp;
 	int cnt;
 
+	KASSERT(inplocked(inp));
+
 	/* Turn off any old options. */
 	if (inp->inp_options) {
 		m_free(inp->inp_options);
@@ -1773,6 +1777,8 @@ ip_getmoptions(struct ip_moptions *imo, 
 	uint8_t optval;
 	int error = 0;
 
+	/* imo is protected by solock or refereced only by the caller */
+
 	switch (sopt->sopt_name) {
 	case IP_MULTICAST_IF:
 		if (imo == NULL || imo->imo_multicast_if_index == 0)

Index: src/sys/netinet6/in6_pcb.h
diff -u src/sys/netinet6/in6_pcb.h:1.47 src/sys/netinet6/in6_pcb.h:1.48
--- src/sys/netinet6/in6_pcb.h:1.47	Thu Dec  8 05:16:34 2016
+++ src/sys/netinet6/in6_pcb.h	Wed Feb 22 07:05:04 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6_pcb.h,v 1.47 2016/12/08 05:16:34 ozaki-r Exp $	*/
+/*	$NetBSD: in6_pcb.h,v 1.48 2017/02/22 07:05:04 ozaki-r Exp $	*/
 /*	$KAME: in6_pcb.h,v 1.45 2001/02/09 05:59:46 itojun Exp $	*/
 
 /*
@@ -107,6 +107,8 @@ struct	in6pcb {
 #define in6p_faddr	in6p_ip6.ip6_dst
 #define in6p_laddr	in6p_ip6.ip6_src
 
+#define	in6plocked(in6p)	solocked((in6p)->in6p_socket)
+
 /* states in inp_state: */
 #define	IN6P_ATTACHED		INP_ATTACHED
 #define	IN6P_BOUND		INP_BOUND

Index: src/sys/netinet6/ip6_output.c
diff -u src/sys/netinet6/ip6_output.c:1.184 src/sys/netinet6/ip6_output.c:1.185
--- src/sys/netinet6/ip6_output.c:1.184	Fri Feb 17 03:57:17 2017
+++ src/sys/netinet6/ip6_output.c	Wed Feb 22 07:05:04 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_output.c,v 1.184 2017/02/17 03:57:17 ozaki-r Exp $	*/
+/*	$NetBSD: ip6_output.c,v 1.185 2017/02/22 07:05:04 ozaki-r Exp $	*/
 /*	$KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.184 2017/02/17 03:57:17 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.185 2017/02/22 07:05:04 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1359,6 +1359,7 @@ ip6_ctloutput(int op, struct socket *so,
 	int error, optval;
 	int level, optname;
 
+	KASSERT(solocked(so));
 	KASSERT(sopt != NULL);
 
 	level = sopt->sopt_level;
@@ -2073,6 +2074,8 @@ ip6_pcbopts(struct ip6_pktopts **pktopt,
 	struct mbuf *m;
 	int error = 0;
 
+	KASSERT(solocked(so));
+
 	/* turn off any old options. */
 	if (opt) {
 #ifdef DIAGNOSTIC
@@ -2467,6 +2470,8 @@ ip6_setmoptions(const struct sockopt *so
 	struct ip6_moptions *im6o = in6p->in6p_moptions;
 	struct in6_multi_mship *imm;
 
+	KASSERT(in6plocked(in6p));
+
 	if (im6o == NULL) {
 		/*
 		 * No multicast option buffer attached to the pcb;

Reply via email to