In below snip of code in llc_fixup_skb we calculate pdulen from eth_hdr(skb)->h_proto which contains total length of packet include ETH_HLEN. <snip> 119 if (skb->protocol == htons(ETH_P_802_2)) { 120 __be16 pdulen = eth_hdr(skb)->h_proto; 121 s32 data_size = ntohs(pdulen) - llc_len; 122 123 if (data_size < 0 || 124 !pskb_may_pull(skb, data_size)) 125 return 0; </snip> Line 121 should be changed to 121 s32 data_size = ntohs(pdulen) - llc_len - ETH_HLEN; Log --- kernel: pdu len 18432(72), data_size 69 kernel: skb len 55, skb data_len 0
Please Junk/Invalid this Bug. My mistake to assume eth_hdr(skb)->h_proto has total L2 payload.