Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3174fed9 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: skb_condense() can also deal with empty skbs



It seems attackers can also send UDP packets with no payload at all.

skb_condense() can still be a win in this case.

It will be possible to replace the custom code in tcp_add_backlog()
to get full benefit from skb_condense()

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5ac9efbe
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -4946,16 +4946,20 @@ EXPORT_SYMBOL(pskb_extract);
 */
void skb_condense(struct sk_buff *skb)
{
	if (!skb->data_len ||
	    skb->data_len > skb->end - skb->tail ||
	if (skb->data_len) {
		if (skb->data_len > skb->end - skb->tail ||
		    skb_cloned(skb))
			return;

		/* Nice, we can free page frag(s) right now */
		__pskb_pull_tail(skb, skb->data_len);

	/* Now adjust skb->truesize, since __pskb_pull_tail() does
	 * not do this.
	}
	/* At this point, skb->truesize might be over estimated,
	 * because skb had a fragment, and fragments do not tell
	 * their truesize.
	 * When we pulled its content into skb->head, fragment
	 * was freed, but __pskb_pull_tail() could not possibly
	 * adjust skb->truesize, not knowing the frag truesize.
	 */
	skb->truesize = SKB_TRUESIZE(skb_end_offset(skb));
}