Make it possible to write to skb metadata area using the bpf_dynptr_write() BPF helper. This prepares ground for access to skb metadata from all BPF hooks which operate on __sk_buff context. Signed-off-by: Jakub Sitnicki --- net/core/filter.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index f71b4b6b09fb..ab6599f42bb7 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -12005,8 +12005,15 @@ int bpf_dynptr_skb_write(const struct bpf_dynptr_kern *dst, u32 offset, case SKB_DYNPTR_PAYLOAD: return ____bpf_skb_store_bytes(skb, offset, src, len, flags); - case SKB_DYNPTR_METADATA: - return -EOPNOTSUPP; /* not implemented */ + case SKB_DYNPTR_METADATA: { + u32 meta_len = skb_metadata_len(skb); + + if (len > meta_len || offset > meta_len - len) + return -E2BIG; /* out of bounds */ + + memmove(skb_metadata_end(skb) - meta_len + offset, src, len); + return 0; + } default: WARN_ONCE(true, "%s: unknown skb dynptr offset %d\n", __func__, dst->offset); -- 2.43.0