net: check for underlength tap writes
If the user gives a packet under 14 bytes, we'll end up reading off the end of the skb (not oopsing, just reading off the end). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Max Krasnyanskiy <maxk@qualcomm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
14daa02139
commit
e01bf1c833
@ -286,8 +286,11 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, struct iovec *iv,
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
|
||||
if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {
|
||||
align = NET_IP_ALIGN;
|
||||
if (unlikely(len < ETH_HLEN))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
|
||||
tun->dev->stats.rx_dropped++;
|
||||
|
Loading…
Reference in New Issue
Block a user