Thread (5 messages) flat view 5 messages, 4 authors, 2012-12-10

Re: [PATCH] ipv4: ip_check_defrag must not modify skb before unsharing

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2012-12-10 18:45:32
Also in: linux-wireless

Possibly related (same subject, not in this thread)

On Mon, 2012-12-10 at 13:41 -0500, David Miller wrote:
From: Johannes Berg <johannes@sipsolutions.net>
Date: Mon, 10 Dec 2012 10:41:06 +0100
quoted
From: Johannes Berg <redacted>

ip_check_defrag() might be called from af_packet within the
RX path where shared SKBs are used, so it must not modify
the input SKB before it has unshared it for defragmentation.
Use skb_copy_bits() to get the IP header and only pull in
everything later.

The same is true for the other caller in macvlan as it is
called from dev->rx_handler which can also get a shared SKB.

Reported-by: Eric Leblond <redacted>
Cc: stable@vger.kernel.org
Signed-off-by: Johannes Berg <redacted>
---
For some versions of the kernel, this code goes into af_packet.c
So the bug is that ip_check_defrag() has a precondition which is met
properly by all callers except AF_PACKET.

If this is the case, remind me why are we changing ip_check_defrag()
rather than the violator of the precondition?
I don't think this is the case.

If you're referring to my note about af_packet: the kernels where this
goes into af_packet.c are the kernels that don't even have
ip_check_defrag() because macvlan didn't exist/didn't have ip defrag
support and af_packet had this code there -- see commit bc416d9768a.

If you're not referring to my note about af_packet: both callers (there
are only two) of ip_check_defrag() have this bug as far as I can tell
because they're both in the part of the RX path where shared SKBs might
happen.

johannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help