Re: [net-next PATCH 1/3] Revert "icmp: avoid allocating large struct on stack"
From: Cong Wang <hidden>
Date: 2017-01-12 22:21:41
On Tue, Jan 10, 2017 at 1:48 PM, Eric Dumazet [off-list ref] wrote:
On Tue, 2017-01-10 at 21:08 +0100, Jesper Dangaard Brouer wrote:quoted
On Tue, 10 Jan 2017 10:44:59 -0800 Cong Wang [off-list ref] wrote:quoted
On Tue, Jan 10, 2017 at 10:12 AM, David Miller [off-list ref] wrote:[...]quoted
quoted
You can keep showing us how expertly you can deflect the real issue we are discussion here, but that won't improve the situation at all I am afraid.Of course, there are just too many people too lazy to do a google search: https://lists.debian.org/debian-kernel/2013/05/msg00500.htmlMy analysis of the problem shown in above link is not related to using all the stack space, but instead that skb->cb was not cleared. This can cause the ip_options_echo() call in icmp_send() to access garbage as this is: __ip_options_echo(dopt, skb, &IPCB(skb)->opt). Fixed by commit a622260254ee ("ip_tunnel: fix kernel panic with icmp_dest_unreach") https://git.kernel.org/torvalds/c/a622260254ee Thus, it is (likely) the __ip_options_echo() call that violates stack access, as it is passed in a pointer to the stack, and advance this based on garbage "optlen".I totally agree.
I can't agree, iptunnel or ipgre symbols are not in the above stack trace at all. Although I do agree that the above stack usage is not aggressive, especially when compared with the other I sent. My vague memory told me the original problem I fixed is related to vxlan but after trying to search all netdev archives in 2013 May/Jun, I still can't find it, perhaps it was reported to LKML or somewhere else rather than netdev. It was certainly a real problem. Even though the irq stack is 16K, but it is too easy to stack netdevices and stack qdisc's too, so for TX path I am not surprised at all if 16K could be exhausted eventually. Yeah, it is hard to blame one of them in the call chain, but 112 bytes _alone_ are aggressive for such a function deeply in the call stack. That's my whole point.