xfrm: Fix kernel panic when flush and dump SPD entries

After flush the SPD entries, dump the SPD entries will cause kernel painc.

Used the following commands to reproduct:

- echo 'spdflush;' | setkey -c
- echo 'spdadd 3ffe:501:ffff:ff01::/64 3ffe:501:ffff:ff04::/64 any -P out ipsec \
ah/tunnel/3ffe:501:ffff:ff00:200:ff:fe00:b0b0-3ffe:501:ffff:ff02:200:ff:fe00:a1a1/require;\
spddump;' | setkey -c
- echo 'spdflush; spddump;' | setkey -c
- echo 'spdadd 3ffe:501:ffff:ff01::/64 3ffe:501:ffff:ff04::/64 any -P out ipsec \
ah/tunnel/3ffe:501:ffff:ff00:200:ff:fe00:b0b0-3ffe:501:ffff:ff02:200:ff:fe00:a1a1/require;\
spddump;' | setkey -c

This is because when flush the SPD entries, the SPD entry is not remove
from the list.

This patch fix the problem by remove the SPD entry from the list.

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Wei Yongjun and committed by
David S. Miller
d5654efd f6f7b52e

+1
+1
net/xfrm/xfrm_policy.c
··· 817 continue; 818 hlist_del(&pol->bydst); 819 hlist_del(&pol->byidx); 820 write_unlock_bh(&xfrm_policy_lock); 821 822 xfrm_audit_policy_delete(pol, 1, audit_info->loginuid,
··· 817 continue; 818 hlist_del(&pol->bydst); 819 hlist_del(&pol->byidx); 820 + list_del(&pol->walk.all); 821 write_unlock_bh(&xfrm_policy_lock); 822 823 xfrm_audit_policy_delete(pol, 1, audit_info->loginuid,