mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
vxlan: re-fetch eth header after route_shortcircuit()
Before route_shortcircuit(), the eth header pointer is cached from eth_hdr(skb).
Inside route_shortcircuit(), pskb_may_pull() can be called, which may
reallocate skb->head.
In this case, returning to vxlan_xmit() leaves the cached eth pointer pointing to
freed memory, leading to a use-after-free when dereferencing eth->h_dest.
Fix this by updating eth = eth_hdr(skb) after calling route_shortcircuit().
Fixes: ae88408256 ("VXLAN: Allow L2 redirection with L3 switching")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20260723144249.759100-2-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
dbc3791e3b
commit
1395a676ec
|
|
@ -2796,6 +2796,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
(ntohs(eth->h_proto) == ETH_P_IP ||
|
||||
ntohs(eth->h_proto) == ETH_P_IPV6)) {
|
||||
did_rsc = route_shortcircuit(dev, skb);
|
||||
eth = eth_hdr(skb);
|
||||
if (did_rsc)
|
||||
f = vxlan_find_mac_tx(vxlan, eth->h_dest, vni);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user