xfrm: Move child route linkage into xfrm_dst.
authorDavid Miller <davem@davemloft.net>
Tue, 28 Nov 2017 20:45:44 +0000 (15:45 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Nov 2017 14:54:26 +0000 (09:54 -0500)
commitb6ca8bd5a9198c70c48297390723e4e56bd6e879
tree11d7a2c8f9dcdeb28582721da6fcb0705837db25
parent45b018beddb631fb9a0ecbc3ba103521b03c4c80
xfrm: Move child route linkage into xfrm_dst.

XFRM bundle child chains look like this:

xdst1 --> xdst2 --> xdst3 --> path_dst

All of xdstN are xfrm_dst objects and xdst->u.dst.xfrm is non-NULL.
The final child pointer in the chain, here called 'path_dst', is some
other kind of route such as an ipv4 or ipv6 one.

The xfrm output path pops routes, one at a time, via the child
pointer, until we hit one which has a dst->xfrm pointer which
is NULL.

We can easily preserve the above mechanisms with child sitting
only in the xfrm_dst structure.  All children in the chain
before we break out of the xfrm_output() loop have dst->xfrm
non-NULL and are therefore xfrm_dst objects.

Since we break out of the loop when we find dst->xfrm NULL, we
will not try to dereference 'dst' as if it were an xfrm_dst.

Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dst.h
include/net/xfrm.h
net/core/dst.c
net/core/pktgen.c
net/netfilter/xt_policy.c
net/xfrm/xfrm_device.c