svn commit: r311704 - projects/ipsec/sys/netipsec
Andrey V. Elsukov
ae at FreeBSD.org
Sun Jan 8 21:30:06 UTC 2017
Author: ae
Date: Sun Jan 8 21:30:04 2017
New Revision: 311704
URL: https://svnweb.freebsd.org/changeset/base/311704
Log:
Take INP_WLOCK() in ipsec_set_pcbpolicy() to modify 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:12:46 2017 (r311703)
+++ projects/ipsec/sys/netipsec/ipsec_pcb.c Sun Jan 8 21:30:04 2017 (r311704)
@@ -276,12 +276,7 @@ ipsec_set_pcbpolicy(struct inpcb *inp, s
/* Select direction. */
switch (xpl->sadb_x_policy_dir) {
case IPSEC_DIR_INBOUND:
- spp = &inp->inp_sp->sp_in;
- flags = INP_INBOUND_POLICY;
- break;
case IPSEC_DIR_OUTBOUND:
- spp = &inp->inp_sp->sp_out;
- flags = INP_OUTBOUND_POLICY;
break;
default:
ipseclog((LOG_ERR, "%s: invalid direction=%u\n", __func__,
@@ -333,6 +328,14 @@ ipsec_set_pcbpolicy(struct inpcb *inp, s
return (EINVAL);
}
+ INP_WLOCK(inp);
+ if (xpl->sadb_x_policy_dir == IPSEC_DIR_INBOUND) {
+ spp = &inp->inp_sp->sp_in;
+ flags = INP_INBOUND_POLICY;
+ } else {
+ spp = &inp->inp_sp->sp_out;
+ flags = INP_OUTBOUND_POLICY;
+ }
/* Clear old SP and set new SP. */
if (*spp != NULL)
key_freesp(spp);
@@ -345,6 +348,7 @@ ipsec_set_pcbpolicy(struct inpcb *inp, s
inp->inp_sp->flags |= flags;
KEYDBG(IPSEC_DUMP, kdebug_secpolicy(newsp));
}
+ INP_WUNLOCK(inp);
return (0);
}
More information about the svn-src-projects
mailing list