Commit aef8811abbc9249a2bd59bd2331bbe523df05d17

Authored by Bernhard Walle
Committed by David S. Miller
1 parent e4396b544f

[XFRM]: Fix oops in xfrm4_dst_destroy()

With 2.6.21-rc1, I get an oops when running 'ifdown eth0' and an IPsec
connection is active. If I shut down the connection before running 'ifdown
eth0', then there's no problem.  The critical operation of this script is to
kill dhcpd.

The problem is probably caused by commit with git identifier
4337226228e1cfc1d70ee975789c6bd070fb597c (Linus tree) "[IPSEC]: IPv4 over IPv6
IPsec tunnel".

This patch fixes that oops. I don't know the network code of the Linux
kernel in deep, so if that fix is wrong, please change it. But please
fix the oops. :)

Signed-off-by: Bernhard Walle <bwalle@suse.de>
Acked-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

net/ipv4/xfrm4_policy.c
... ... @@ -291,7 +291,7 @@
291 291  
292 292 if (likely(xdst->u.rt.idev))
293 293 in_dev_put(xdst->u.rt.idev);
294   - if (dst->xfrm->props.family == AF_INET && likely(xdst->u.rt.peer))
  294 + if (dst->xfrm && dst->xfrm->props.family == AF_INET && likely(xdst->u.rt.peer))
295 295 inet_putpeer(xdst->u.rt.peer);
296 296 xfrm_dst_destroy(xdst);
297 297 }