diff options
-rw-r--r-- | include/uapi/linux/snmp.h | 1 | ||||
-rw-r--r-- | net/xfrm/xfrm_input.c | 5 | ||||
-rw-r--r-- | net/xfrm/xfrm_proc.c | 1 |
3 files changed, 7 insertions, 0 deletions
diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index 26cbf76f8058..af0a674cc677 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h | |||
@@ -288,6 +288,7 @@ enum | |||
288 | LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */ | 288 | LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */ |
289 | LINUX_MIB_XFRMFWDHDRERROR, /* XfrmFwdHdrError*/ | 289 | LINUX_MIB_XFRMFWDHDRERROR, /* XfrmFwdHdrError*/ |
290 | LINUX_MIB_XFRMOUTSTATEINVALID, /* XfrmOutStateInvalid */ | 290 | LINUX_MIB_XFRMOUTSTATEINVALID, /* XfrmOutStateInvalid */ |
291 | LINUX_MIB_XFRMACQUIREERROR, /* XfrmAcquireError */ | ||
291 | __LINUX_MIB_XFRMMAX | 292 | __LINUX_MIB_XFRMMAX |
292 | }; | 293 | }; |
293 | 294 | ||
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c index ab2bb42fe094..88843996f935 100644 --- a/net/xfrm/xfrm_input.c +++ b/net/xfrm/xfrm_input.c | |||
@@ -163,6 +163,11 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) | |||
163 | skb->sp->xvec[skb->sp->len++] = x; | 163 | skb->sp->xvec[skb->sp->len++] = x; |
164 | 164 | ||
165 | spin_lock(&x->lock); | 165 | spin_lock(&x->lock); |
166 | if (unlikely(x->km.state == XFRM_STATE_ACQ)) { | ||
167 | XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR); | ||
168 | goto drop_unlock; | ||
169 | } | ||
170 | |||
166 | if (unlikely(x->km.state != XFRM_STATE_VALID)) { | 171 | if (unlikely(x->km.state != XFRM_STATE_VALID)) { |
167 | XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEINVALID); | 172 | XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEINVALID); |
168 | goto drop_unlock; | 173 | goto drop_unlock; |
diff --git a/net/xfrm/xfrm_proc.c b/net/xfrm/xfrm_proc.c index c721b0d9ab8b..80cd1e55b834 100644 --- a/net/xfrm/xfrm_proc.c +++ b/net/xfrm/xfrm_proc.c | |||
@@ -44,6 +44,7 @@ static const struct snmp_mib xfrm_mib_list[] = { | |||
44 | SNMP_MIB_ITEM("XfrmOutPolError", LINUX_MIB_XFRMOUTPOLERROR), | 44 | SNMP_MIB_ITEM("XfrmOutPolError", LINUX_MIB_XFRMOUTPOLERROR), |
45 | SNMP_MIB_ITEM("XfrmFwdHdrError", LINUX_MIB_XFRMFWDHDRERROR), | 45 | SNMP_MIB_ITEM("XfrmFwdHdrError", LINUX_MIB_XFRMFWDHDRERROR), |
46 | SNMP_MIB_ITEM("XfrmOutStateInvalid", LINUX_MIB_XFRMOUTSTATEINVALID), | 46 | SNMP_MIB_ITEM("XfrmOutStateInvalid", LINUX_MIB_XFRMOUTSTATEINVALID), |
47 | SNMP_MIB_ITEM("XfrmAcquireError", LINUX_MIB_XFRMACQUIREERROR), | ||
47 | SNMP_MIB_SENTINEL | 48 | SNMP_MIB_SENTINEL |
48 | }; | 49 | }; |
49 | 50 | ||