On Thu, Aug 31, 2023 at 10:17 AM Mohamed Khalfella <mkhalfella@xxxxxxxxxxxxxxx> wrote: > > Commit bf5c25d60861 ("skbuff: in skb_segment, call zerocopy functions > once per nskb") added the call to zero copy functions in skb_segment(). > The change introduced a bug in skb_segment() because skb_orphan_frags() > may possibly change the number of fragments or allocate new fragments > altogether leaving nrfrags and frag to point to the old values. This can > cause a panic with stacktrace like the one below. > > > In this case calling skb_orphan_frags() updated nr_frags leaving nrfrags > local variable in skb_segment() stale. This resulted in the code hitting > i >= nrfrags prematurely and trying to move to next frag_skb using > list_skb pointer, which was NULL, and caused kernel panic. Move the call > to zero copy functions before using frags and nr_frags. > > Fixes: bf5c25d60861 ("skbuff: in skb_segment, call zerocopy functions once per nskb") > Signed-off-by: Mohamed Khalfella <mkhalfella@xxxxxxxxxxxxxxx> > Reported-by: Amit Goyal <agoyal@xxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>