Commit 13e00fdc authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

net: add skb_header_pointer_careful() helper



This variant of skb_header_pointer() should be used in contexts
where @offset argument is user-controlled and could be negative.

Negative offsets are supported, as long as the zone starts
between skb->head and skb->data.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260128141539.3404400-2-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 37d312bf
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -4301,6 +4301,18 @@ skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer)
				    skb_headlen(skb), buffer);
}

/* Variant of skb_header_pointer() where @offset is user-controlled
 * and potentially negative.
 */
static inline void * __must_check
skb_header_pointer_careful(const struct sk_buff *skb, int offset,
			   int len, void *buffer)
{
	if (unlikely(offset < 0 && -offset > skb_headroom(skb)))
		return NULL;
	return skb_header_pointer(skb, offset, len, buffer);
}

static inline void * __must_check
skb_pointer_if_linear(const struct sk_buff *skb, int offset, int len)
{