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

[LLC]: bogus llc packet length

discard llc packet which has bogus packet length.

Signed-off-by: Joonwoo Park <joonwpark81@gmail.com>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Joonwoo Park and committed by
David S. Miller
27785d83 2ba2506c

+5 -1
+5 -1
net/llc/llc_input.c
··· 117 117 skb_pull(skb, llc_len); 118 118 if (skb->protocol == htons(ETH_P_802_2)) { 119 119 __be16 pdulen = eth_hdr(skb)->h_proto; 120 - u16 data_size = ntohs(pdulen) - llc_len; 120 + s32 data_size = ntohs(pdulen) - llc_len; 121 121 122 + if (data_size < 0 || 123 + ((skb_tail_pointer(skb) - 124 + (u8 *)pdu) - llc_len) < data_size) 125 + return 0; 122 126 if (unlikely(pskb_trim_rcsum(skb, data_size))) 123 127 return 0; 124 128 }