Description
In the Linux kernel, the following vulnerability has been resolved: vxlan: use pskb_network_may_pull() in route_shortcircuit() route_shortcircuit() currently calls pskb_may_pull(skb, sizeof(struct iphdr)) (or ipv6hdr), which checks if bytes are available starting from skb->data. However, in vxlan_xmit(), skb->data points to the MAC header, so skb_network_offset(skb) is ETH_HLEN (14 bytes). Using pskb_may_pull(skb, 20) only checks 20 bytes from skb->data (which is 14 bytes MAC header + 6 bytes of IP header), leaving the rest of the IP header potentially un-pulled in non-linear frags. Subsequent dereferences of ip_hdr(skb)->daddr can read beyond the pulled linear buffer length. Fix this by using pskb_network_may_pull(), which adds skb_network_offset(skb) to the length check to ensure the full network header is present in the linear buffer.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
e4f67addf158f98f8197e08974966b18480dc751 to < c419af4924c1593500a40519730ed98575d04a3eaffectede4f67addf158f98f8197e08974966b18480dc751 to < 6bd0a3a1b5744166946f0c551a6665c3b46b05e4affectede4f67addf158f98f8197e08974966b18480dc751 to < 214ba43faf106cb06cd3dd30999c5c809c868b53affectede4f67addf158f98f8197e08974966b18480dc751 to < 42887be7c4cf283cce02cd0fb6411221167c8b6caffectede4f67addf158f98f8197e08974966b18480dc751 to < aa0d31376d574ac858a40078431a77127bf04ee4affectede4f67addf158f98f8197e08974966b18480dc751 to < ee799977d7941dbfb11049e17edd9eaf4f8820f7affectede4f67addf158f98f8197e08974966b18480dc751 to < 4f3f96e771a20263635bb5e1307c112d613b4bbdaffectede4f67addf158f98f8197e08974966b18480dc751 to < 26bb2dd0a8839617e2c79ffbbe1923f8e4bab9fbaffected
Linux Linux
Default version status: affected
3.8affected0 to < 3.8unaffected5.10.265 to ≤ 5.10.*unaffected5.15.216 to ≤ 5.15.*unaffected6.1.183 to ≤ 6.1.*unaffected6.6.151 to ≤ 6.6.*unaffected6.12.103 to ≤ 6.12.*unaffected6.18.44 to ≤ 6.18.*unaffected7.1.8 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/c419af4924c1593500a40519730ed98575d04a3e ↗
- https://git.kernel.org/stable/c/6bd0a3a1b5744166946f0c551a6665c3b46b05e4 ↗
- https://git.kernel.org/stable/c/214ba43faf106cb06cd3dd30999c5c809c868b53 ↗
- https://git.kernel.org/stable/c/42887be7c4cf283cce02cd0fb6411221167c8b6c ↗
- https://git.kernel.org/stable/c/aa0d31376d574ac858a40078431a77127bf04ee4 ↗
- https://git.kernel.org/stable/c/ee799977d7941dbfb11049e17edd9eaf4f8820f7 ↗
- https://git.kernel.org/stable/c/4f3f96e771a20263635bb5e1307c112d613b4bbd ↗
- https://git.kernel.org/stable/c/26bb2dd0a8839617e2c79ffbbe1923f8e4bab9fb ↗