]> git.baikalelectronics.ru Git - kernel.git/commit
vlan: Fix vlan insertion for packets without ethernet header
authorToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Thu, 29 Mar 2018 10:05:30 +0000 (19:05 +0900)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Mar 2018 16:36:27 +0000 (12:36 -0400)
commit42f4222d8344e0e631c70c2b6a30e37c7977cacb
tree67df9144cea6262fc7660a1c8cc0556df7bf0a8b
parent7999f25f8912cd350f8b63ca0d14176f35eacfec
vlan: Fix vlan insertion for packets without ethernet header

In some situation vlan packets do not have ethernet headers. One example
is packets from tun devices. Users can specify vlan protocol in tun_pi
field instead of IP protocol. When we have a vlan device with reorder_hdr
disabled on top of the tun device, such packets from tun devices are
untagged in skb_vlan_untag() and vlan headers will be inserted back in
vlan_insert_inner_tag().

vlan_insert_inner_tag() however did not expect packets without ethernet
headers, so in such a case size argument for memmove() underflowed.

We don't need to copy headers for packets which do not have preceding
headers of vlan headers, so skip memmove() in that case.
Also don't write vlan protocol in skb->data when it does not have enough
room for it.

Fixes: f5d0ef0891b5 ("vlan: Fix out of order vlan headers with reorder header off")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/if_vlan.h