]> git.baikalelectronics.ru Git - kernel.git/commit
udp: preserve skb->dst if required for IP options processing
authorPaolo Abeni <pabeni@redhat.com>
Tue, 18 Jul 2017 09:57:55 +0000 (11:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 Jul 2017 19:00:13 +0000 (12:00 -0700)
commit2863a9992659502c8cc39c8c772b41b178f134ba
tree01f0dfa07c2cbae42cd7338c298f5769f7bf0187
parent330e64b91cadbf035daa9a9d780209de09cd9a24
udp: preserve skb->dst if required for IP options processing

Eric noticed that in udp_recvmsg() we still need to access
skb->dst while processing the IP options.
Since commit 32d0c6b9f375 ("udp: avoid a cache miss on dequeue")
skb->dst is no more available at recvmsg() time and bad things
will happen if we enter the relevant code path.

This commit address the issue, avoid clearing skb->dst if
any IP options are present into the relevant skb.
Since the IP CB is contained in the first skb cacheline, we can
test it to decide to leverage the consume_stateless_skb()
optimization, without measurable additional cost in the faster
path.

v1 -> v2: updated commit message tags

Fixes: 32d0c6b9f375 ("udp: avoid a cache miss on dequeue")
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Reported-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/udp.c