On Friday, February 26, 2016 17:56:13 Sven Eckelmann wrote: > --- a/net/batman-adv/soft-interface.c > +++ b/net/batman-adv/soft-interface.c > @@ -408,11 +408,17 @@ void batadv_interface_rx(struct net_device > *soft_iface, */ > nf_reset(skb); > > + if (unlikely(!pskb_may_pull(skb, ETH_HLEN))) > + goto dropped; > + > vid = batadv_get_vid(skb, 0); batadv_get_vid() also calls pskb_may_pull() and checks for VLAN_ETH_HLEN length. Isn't that sufficient ? On a related note - a few lines before your check you'll find: /* check if enough space is available for pulling, and pull */ if (!pskb_may_pull(skb, hdr_size)) In its current form that check is useless because batadv_recv_unicast_packet() already calls batadv_check_unicast_packet() which does the same pskb_may_pull(skb, hdr_size). Am I overlooking something ? > switch (ntohs(ethhdr->h_proto)) { > case ETH_P_8021Q: > + if (!pskb_may_pull(skb, VLAN_ETH_HLEN)) > + goto dropped; Shouldn't this memory access be covered by the earlier check inside batadv_get_vid() ? > /* skb->dev & skb->pkt_type are set here */ > - if (unlikely(!pskb_may_pull(skb, ETH_HLEN))) > - goto dropped; Agreed that this seems unnecessary. Cheers, Marek