Re: [PATCH net] mpls: reload header after pskb_may_pull()

Simon Horman <[email protected]>
Newsgroups gmane.linux.kernel.stable,gmane.linux.network,gmane.linux.kernel
Message-ID <[email protected]>
On Fri, Aug 14, 2026 at 05:54:04PM +0800, Qing Ming wrote:
> mpls_select_multipath() calls mpls_multipath_hash() to choose a nexthop
> when an MPLS route has multiple nexthops.  While walking the MPLS label
> stack, the hash routine caches hdr for the current label.  After finding
> the bottom-of-stack label, it calls pskb_may_pull() before reading the
> inner IP header.
> 
> If an skb is constructed with the inner IP header in nonlinear data and
> insufficient tailroom in the linear head, pskb_may_pull() calls
> pskb_expand_head() to replace the skb head and free the old one.  This
> leaves hdr pointing to freed memory.  The IPv6 path can invalidate hdr
> again when it performs a second pull for the larger header.
> 
> The issue was found through static analysis.  A reproducer sending a legal
> Geneve packet through a bareudp/MPLS multipath setup triggered the same
> KASAN report in 2 of 2 unpatched runs:
> 
>   BUG: KASAN: slab-use-after-free in mpls_select_multipath
>   Read of size 1 at addr ffff88800ecc6e20 by task ksoftirqd/1/23
> 
>   Call Trace:
>    mpls_select_multipath
>    mpls_forward
>    __netif_receive_skb_list_core
>    netif_receive_skb_list_internal
>    napi_complete_done
>    gro_cell_poll
>    __napi_poll
>    net_rx_action
> 
>   Freed by task 23:
>    kfree
>    pskb_expand_head
>    __pskb_pull_tail
>    mpls_select_multipath
> 
> Reload hdr from the current skb head after each successful pull before
> deriving the inner IPv4 or IPv6 header pointer.
> 
> Fixes: 9f427a0e474a ("net: mpls: Fix multipath selection for LSR use case")
> Cc: [email protected]
> Signed-off-by: Qing Ming <[email protected]>

Reviewed-by: Simon Horman <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.