mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 16:53:54 +08:00
xfrm: provide correct dst in xfrm_neigh_lookup
Fix xfrm_neigh_lookup to provide dst->path to the
neigh_lookup dst_ops method.
When skb is provided, the IP address in packet should already
match the dst->path address family. But for the non-skb case,
we should consider the last tunnel address as nexthop address.
Fixes: f894cbf847
("net: Add optional SKB arg to dst_ops->neigh_lookup().")
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c4d2603dac
commit
1ecc9ad02c
@ -2836,14 +2836,8 @@ static unsigned int xfrm_mtu(const struct dst_entry *dst)
|
||||
return mtu ? : dst_mtu(dst->path);
|
||||
}
|
||||
|
||||
static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst,
|
||||
struct sk_buff *skb,
|
||||
const void *daddr)
|
||||
{
|
||||
return dst->path->ops->neigh_lookup(dst, skb, daddr);
|
||||
}
|
||||
|
||||
static void xfrm_confirm_neigh(const struct dst_entry *dst, const void *daddr)
|
||||
static const void *xfrm_get_dst_nexthop(const struct dst_entry *dst,
|
||||
const void *daddr)
|
||||
{
|
||||
const struct dst_entry *path = dst->path;
|
||||
|
||||
@ -2857,6 +2851,25 @@ static void xfrm_confirm_neigh(const struct dst_entry *dst, const void *daddr)
|
||||
else if (!(xfrm->type->flags & XFRM_TYPE_LOCAL_COADDR))
|
||||
daddr = &xfrm->id.daddr;
|
||||
}
|
||||
return daddr;
|
||||
}
|
||||
|
||||
static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst,
|
||||
struct sk_buff *skb,
|
||||
const void *daddr)
|
||||
{
|
||||
const struct dst_entry *path = dst->path;
|
||||
|
||||
if (!skb)
|
||||
daddr = xfrm_get_dst_nexthop(dst, daddr);
|
||||
return path->ops->neigh_lookup(path, skb, daddr);
|
||||
}
|
||||
|
||||
static void xfrm_confirm_neigh(const struct dst_entry *dst, const void *daddr)
|
||||
{
|
||||
const struct dst_entry *path = dst->path;
|
||||
|
||||
daddr = xfrm_get_dst_nexthop(dst, daddr);
|
||||
path->ops->confirm_neigh(path, daddr);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user