Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 8 Jan 2017 21:42:19 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r311705 - projects/ipsec/sys/netipsec
Message-ID:  <201701082142.v08LgJXd097333@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Sun Jan  8 21:42:19 2017
New Revision: 311705
URL: https://svnweb.freebsd.org/changeset/base/311705

Log:
  Hold INP_RLOCK in ipsec_get_pcbpolicy() while retrieving INPCB policy.

Modified:
  projects/ipsec/sys/netipsec/ipsec_pcb.c

Modified: projects/ipsec/sys/netipsec/ipsec_pcb.c
==============================================================================
--- projects/ipsec/sys/netipsec/ipsec_pcb.c	Sun Jan  8 21:30:04 2017	(r311704)
+++ projects/ipsec/sys/netipsec/ipsec_pcb.c	Sun Jan  8 21:42:19 2017	(r311705)
@@ -360,6 +360,8 @@ ipsec_get_pcbpolicy(struct inpcb *inp, v
 	int error, flags;
 
 	xpl = (struct sadb_x_policy *)request;
+
+	INP_RLOCK(inp);
 	flags = inp->inp_sp->flags;
 	/* Select direction. */
 	switch (xpl->sadb_x_policy_dir) {
@@ -372,6 +374,7 @@ ipsec_get_pcbpolicy(struct inpcb *inp, v
 		flags &= INP_OUTBOUND_POLICY;
 		break;
 	default:
+		INP_RUNLOCK(inp);
 		ipseclog((LOG_ERR, "%s: invalid direction=%u\n", __func__,
 			xpl->sadb_x_policy_dir));
 		return (EINVAL);
@@ -379,6 +382,7 @@ ipsec_get_pcbpolicy(struct inpcb *inp, v
 
 	if (flags == 0) {
 		/* Return ENTRUST policy */
+		INP_RUNLOCK(inp);
 		xpl->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
 		xpl->sadb_x_policy_type = IPSEC_POLICY_ENTRUST;
 		xpl->sadb_x_policy_id = 0;
@@ -392,6 +396,7 @@ ipsec_get_pcbpolicy(struct inpcb *inp, v
 	    ("sp is NULL, but flags is 0x%04x", inp->inp_sp->flags));
 
 	key_addref(sp);
+	INP_RUNLOCK(inp);
 	error = key_sp2msg(sp, request, len);
 	key_freesp(&sp);
 	if (error == EINVAL)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701082142.v08LgJXd097333>