On Thu, Aug 13, 2015 at 05:54:07AM +0200, Linus Lüssing wrote: > The recent refactoring of the IGMP and MLD parsing code into > ipv6_mc_check_mld() / ip_mc_check_igmp() introduced a potential crash / > BUG() invocation for bridges: > > I wrongly assumed that skb_get() could be used as a simple reference > counter for an skb which is not the case. skb_get() bears additional > semantics, a user count. This leads to a BUG() invocation in > pskb_expand_head() / kernel panic if pskb_may_pull() is called on an skb > with a user count greater than one - unfortunately the refactoring did > just that. > > Fixing this by removing the skb_get() call and changing the API: The > caller of ipv6_mc_check_mld() / ip_mc_check_igmp() now needs to > additionally check whether the returned skb_trimmed is a clone. > > Fixes: 9afd85c9e455 ("net: Export IGMP/MLD message validation code") > Reported-by: Brenden Blanco <bblanco@xxxxxxxxxxxx> > Signed-off-by: Linus Lüssing <linus.luessing@xxxxxxxxx> I think the fix actually made the code easier to read. Thank you. Looks good to me. Acked-by: Alexei Starovoitov <ast@xxxxxxxxxxxx>