Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[LLC]: Fix llc_fixup_skb() bug

llc_fixup_skb() had a bug dropping 3 bytes packets (like UA frames). Token ring
doesn't pad these frames.

Signed-off-by: Jochen Friedrich <jochen@scram.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>

authored by

Jochen Friedrich and committed by
Arnaldo Carvalho de Melo
096f0eb1 5564af21

+6 -2
+6 -2
net/llc/llc_input.c
··· 99 99 static inline int llc_fixup_skb(struct sk_buff *skb) 100 100 { 101 101 u8 llc_len = 2; 102 - struct llc_pdu_sn *pdu; 102 + struct llc_pdu_un *pdu; 103 103 104 104 if (unlikely(!pskb_may_pull(skb, sizeof(*pdu)))) 105 105 return 0; 106 106 107 - pdu = (struct llc_pdu_sn *)skb->data; 107 + pdu = (struct llc_pdu_un *)skb->data; 108 108 if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) == LLC_PDU_TYPE_U) 109 109 llc_len = 1; 110 110 llc_len += 2; 111 + 112 + if (unlikely(!pskb_may_pull(skb, llc_len))) 113 + return 0; 114 + 111 115 skb->h.raw += llc_len; 112 116 skb_pull(skb, llc_len); 113 117 if (skb->protocol == htons(ETH_P_802_2)) {