History

xfrm: removes a superfluous check and add a statistic

Remove the check if x->km.state equal to XFRM_STATE_VALID in xfrm_state_check_expire(), which will be done before call xfrm_state_check_expire(). add a LINUX_MIB_XFRMOUTSTATEINVALID statistic to record the outbound error due to invalid xfrm state.

Li RongQing committed 13 years ago

Commit bb65a9c1 parent 483f7774 files · +8 −3Browse files

Unified · Split

4 files
  1. include/uapi/linux/snmp.h +1 −0
  2. net/xfrm/xfrm_output.c +6 −0
  3. net/xfrm/xfrm_proc.c +1 −0
  4. net/xfrm/xfrm_state.c +0 −3
include/uapi/linux/snmp.h+1−0
@@ -278,6 +278,7 @@ enum · 277 unmodified lines
278278 LINUX_MIB_XFRMOUTPOLDEAD, /* XfrmOutPolDead */
279279 LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */
280280 LINUX_MIB_XFRMFWDHDRERROR, /* XfrmFwdHdrError*/
281+ LINUX_MIB_XFRMOUTSTATEINVALID, /* XfrmOutStateInvalid */
281282 __LINUX_MIB_XFRMMAX
282283 };
283284
net/xfrm/xfrm_output.c+6−0
@@ -61,6 +61,12 @@ static int xfrm_output_one(struct sk_buff *skb, int err) · 60 unmodified lines
6161 }
6262
6363 spin_lock_bh(&x->lock);
64+
65+ if (unlikely(x->km.state != XFRM_STATE_VALID)) {
66+ XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEINVALID);
67+ goto error_nolock;
68+ }
69+
6470 err = xfrm_state_check_expire(x);
6571 if (err) {
6672 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEEXPIRED);
net/xfrm/xfrm_proc.c+1−0
@@ -43,6 +43,7 @@ static const struct snmp_mib xfrm_mib_list[] = { · 42 unmodified lines
4343 SNMP_MIB_ITEM("XfrmOutPolDead", LINUX_MIB_XFRMOUTPOLDEAD),
4444 SNMP_MIB_ITEM("XfrmOutPolError", LINUX_MIB_XFRMOUTPOLERROR),
4545 SNMP_MIB_ITEM("XfrmFwdHdrError", LINUX_MIB_XFRMFWDHDRERROR),
46+ SNMP_MIB_ITEM("XfrmOutStateInvalid", LINUX_MIB_XFRMOUTSTATEINVALID),
4647 SNMP_MIB_SENTINEL
4748 };
4849
net/xfrm/xfrm_state.c+0−3
@@ -1370,9 +1370,6 @@ int xfrm_state_check_expire(struct xfrm_state *x) · 1369 unmodified lines
13701370 if (!x->curlft.use_time)
13711371 x->curlft.use_time = get_seconds();
13721372
1373− if (x->km.state != XFRM_STATE_VALID)
1374− return -EINVAL;
1375−
13761373 if (x->curlft.bytes >= x->lft.hard_byte_limit ||
13771374 x->curlft.packets >= x->lft.hard_packet_limit) {
13781375 x->km.state = XFRM_STATE_EXPIRED;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t