From f66e7acda44b259311ccd6f64b32b4a1a979a3de Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Tue, 14 Apr 2009 02:09:43 -0700 Subject: [PATCH] --- yaml --- r: 143451 b: refs/heads/master c: 0eca93bcf73e5939053a94f7c48f8d6fe6199e00 h: refs/heads/master i: 143449: 4526c1006260624decc3c81b9a6634d279d7d108 143447: 845b1868305b9280eb90ff8ebcf05271c3e08146 v: v3 --- [refs] | 2 +- trunk/drivers/net/tun.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 4854782b79fe..9e70481422df 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 86bcebafc5e7f5163ccf828792fe694b112ed6fa +refs/heads/master: 0eca93bcf73e5939053a94f7c48f8d6fe6199e00 diff --git a/trunk/drivers/net/tun.c b/trunk/drivers/net/tun.c index a1b0697340ba..16716aef184c 100644 --- a/trunk/drivers/net/tun.c +++ b/trunk/drivers/net/tun.c @@ -518,7 +518,7 @@ static inline struct sk_buff *tun_alloc_skb(struct tun_struct *tun, int err; /* Under a page? Don't bother with paged skb. */ - if (prepad + len < PAGE_SIZE) + if (prepad + len < PAGE_SIZE || !linear) linear = len; skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock, @@ -565,7 +565,8 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) { align = NET_IP_ALIGN; - if (unlikely(len < ETH_HLEN)) + if (unlikely(len < ETH_HLEN || + (gso.hdr_len && gso.hdr_len < ETH_HLEN))) return -EINVAL; }