From 78cf4ba76d8bd5c7904e7faa6e13a5d307509343 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Mon, 8 Jun 2009 00:20:01 -0700 Subject: [PATCH] --- yaml --- r: 150735 b: refs/heads/master c: 4909122fb8350e70c347f1201256908a92058044 h: refs/heads/master i: 150733: 61512d4fa7d795cdb9cb557e151ab2f5e8e279a9 150731: d9c7c68dee02dd5b98a4364a11c596cf09c5071d 150727: c584d2287088122ddd5fecf914ddca69b1d0ee07 150719: f39150ce781a31170e38ffbcbf68c4d5acebee4b v: v3 --- [refs] | 2 +- trunk/drivers/net/tun.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 22d43b731728..3c2edef52512 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b82f08ea162edeee6c2c70c6c4321bea4763fa35 +refs/heads/master: 4909122fb8350e70c347f1201256908a92058044 diff --git a/trunk/drivers/net/tun.c b/trunk/drivers/net/tun.c index 3f0cdc14be82..8d82511aa1bc 100644 --- a/trunk/drivers/net/tun.c +++ b/trunk/drivers/net/tun.c @@ -565,6 +565,10 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, if (memcpy_fromiovecend((void *)&gso, iv, offset, sizeof(gso))) return -EFAULT; + if ((gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) && + gso.csum_start + gso.csum_offset + 2 > gso.hdr_len) + gso.hdr_len = gso.csum_start + gso.csum_offset + 2; + if (gso.hdr_len > len) return -EINVAL; offset += sizeof(pi);