Fix oops in vlan and bridging code
commit36e95db9b99b269b2939511a7f2afd68d771fd7a
authorEvgeniy Polyakov <johnpol@2ka.mipt.ru>
Thu, 20 Sep 2007 20:02:32 +0000 (20 13:02 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 26 Sep 2007 17:54:43 +0000 (26 10:54 -0700)
tree49296a868b90e6a641c5667bbd877b9d8550c251
parent29a2edbba56b39d5a3c268bae58c62234432846f
Fix oops in vlan and bridging code

commit 8c7b43a2e58baa24002fa2b266d9a5007bc52a40 in mainline

I tried to preserve bridging code as it was before, but logic is quite
strange - I think we should free skb on error, since it is already
unshared and thus will just leak.

Herbert Xu states:

> + if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
> + goto out;

If this happens it'll be a double-free on skb since we'll
return NF_DROP which makes the caller free it too.

We could return NF_STOLEN to prevent that but I'm not sure
whether that's correct netfilter semantics.  Patrick, could
you please make a call on this?

Patrick McHardy states:

NF_STOLEN should work fine here.

Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
net/8021q/vlan_dev.c
net/bridge/br_netfilter.c