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;