]> git.baikalelectronics.ru Git - kernel.git/commit
tipc: conditionally expand buffer headroom over udp tunnel
authorJon Paul Maloy <jon.maloy@ericsson.com>
Mon, 19 Oct 2015 15:43:11 +0000 (11:43 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Oct 2015 02:13:48 +0000 (19:13 -0700)
commitc0e1135ef6f32cfece3453586a5c9de0b635f024
treef62e21cfcffe933cda12b78c694ccfc8e76a93b2
parent9f3d1ccf0f5948b7a2a246c8ff77bbefc549c02e
tipc: conditionally expand buffer headroom over udp tunnel

In commit 4431b17bb3927 ("tipc: reduce locking scope during packet reception")
we altered the packet retransmission function. Since then, when
restransmitting packets, we create a clone of the original buffer
using __pskb_copy(skb, MIN_H_SIZE), where MIN_H_SIZE is the size of
the area we want to have copied, but also the smallest possible TIPC
packet size. The value of MIN_H_SIZE is 24.

Unfortunately, __pskb_copy() also has the effect that the headroom
of the cloned buffer takes the size MIN_H_SIZE. This is too small
for carrying the packet over the UDP tunnel bearer, which requires
a minimum headroom of 28 bytes. A change to just use pskb_copy()
lets the clone inherit the original headroom of 80 bytes, but also
assumes that the copied data area is of at least that size, something
that is not always the case. So that is not a viable solution.

We now fix this by adding a check for sufficient headroom in the
transmit function of udp_media.c, and expanding it when necessary.

Fixes: commit 4431b17bb3927 ("tipc: reduce locking scope during packet reception")
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/udp_media.c