[PATCH RFC v2 30/33] xdp: clear grow memory in bpf_xdp_adjust_tail()

Jesper Dangaard Brouer
2020-04-08T11:53:21Z

Clearing memory of tail when grow happens, because it is too easy
to write a XDP_PASS program that extend the tail, which expose
this memory to users that can run tcpdump.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
net/core/filter.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/net/core/filter.c b/net/core/filter.c
index 4d58a147eed0..a8674f2a0e24 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3445,6 +3445,11 @@ BPF_CALL_2(bpf_xdp_adjust_tail, struct xdp_buff *, xdp, int, offset)
if (unlikely(data_end < xdp->data + ETH_HLEN))
return -EINVAL;

+ /* Clear memory area on grow, can contain uninit kernel memory */
+ if (offset > 0) {
+ memset(xdp->data_end, 0, offset);
+ }
+
xdp->data_end = data_end;

return 0;