diff options
author | Jochen Friedrich <jochen@scram.de> | 2005-09-22 04:48:46 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-09-22 04:48:46 -0300 |
commit | 096f0eb1dff326ddebfedeb128fb48d5b7ca75e1 (patch) | |
tree | 9beeb19dc06be5b21bcc982d74b17c890640c71a /net/llc | |
parent | 5564af21ae7900889c5151e5b16bd42cdda11a77 (diff) | |
download | op-kernel-dev-096f0eb1dff326ddebfedeb128fb48d5b7ca75e1.zip op-kernel-dev-096f0eb1dff326ddebfedeb128fb48d5b7ca75e1.tar.gz |
[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>
Diffstat (limited to 'net/llc')
-rw-r--r-- | net/llc/llc_input.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/llc/llc_input.c b/net/llc/llc_input.c index 789eec4..8f3addf0 100644 --- a/net/llc/llc_input.c +++ b/net/llc/llc_input.c @@ -99,15 +99,19 @@ out: static inline int llc_fixup_skb(struct sk_buff *skb) { u8 llc_len = 2; - struct llc_pdu_sn *pdu; + struct llc_pdu_un *pdu; if (unlikely(!pskb_may_pull(skb, sizeof(*pdu)))) return 0; - pdu = (struct llc_pdu_sn *)skb->data; + pdu = (struct llc_pdu_un *)skb->data; if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) == LLC_PDU_TYPE_U) llc_len = 1; llc_len += 2; + + if (unlikely(!pskb_may_pull(skb, llc_len))) + return 0; + skb->h.raw += llc_len; skb_pull(skb, llc_len); if (skb->protocol == htons(ETH_P_802_2)) { |