|
Message-ID: <20170427113016.GA12448@bistromath.localdomain> Date: Thu, 27 Apr 2017 13:30:16 +0200 From: Sabrina Dubroca <sd@...asysnail.net> To: "Jason A. Donenfeld" <Jason@...c4.com> Cc: Netdev <netdev@...r.kernel.org>, LKML <linux-kernel@...r.kernel.org>, David Laight <David.Laight@...lab.com>, kernel-hardening@...ts.openwall.com, David Miller <davem@...emloft.net> Subject: Re: [PATCH v6 1/5] skbuff: return -EMSGSIZE in skb_to_sgvec to prevent overflow 2017-04-27, 11:21:51 +0200, Jason A. Donenfeld wrote: > However, perhaps there's the chance that fraglist skbs having > separate fraglists are actually forbidden? Is this the case? Hmm, I think this can actually happen: /* net/ipv4/ip_fragment.c */ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev, struct net_device *dev) { ... /* If the first fragment is fragmented itself, we split * it to two chunks: the first with data and paged part * and the second, holding only fragments. */ if (skb_has_frag_list(head)) { struct sk_buff *clone; int i, plen = 0; clone = alloc_skb(0, GFP_ATOMIC); if (!clone) goto out_nomem; clone->next = head->next; head->next = clone; skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; skb_frag_list_init(head); for (i = 0; i < skb_shinfo(head)->nr_frags; i++) plen += skb_frag_size(&skb_shinfo(head)->frags[i]); clone->len = clone->data_len = head->data_len - plen; head->data_len -= clone->len; head->len -= clone->len; clone->csum = 0; clone->ip_summed = head->ip_summed; add_frag_mem_limit(qp->q.net, clone->truesize); } ... } You can test that with a vxlan tunnel on top of a vxlan tunnel ("real" MTU is 1500, first tunnel MTU set to 10000, second tunnel MTU set to 40000 -- or anything, as long as they both get fragmented). -- Sabrina
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.