Message ID | 20190115225447.245788-2-sdf@google.com |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf,1/3] bpf: don't assume build-id length is always 20 bytes | expand |
> On Jan 15, 2019, at 2:54 PM, Stanislav Fomichev <sdf@google.com> wrote: > > When returning BPF_STACK_BUILD_ID_IP from stack_map_get_build_id_offset, > make sure that build_id field is empty. Since we are using percpu > free list, there is a possibility that we might reuse some previous > bpf_stack_build_id with non-zero build_id. > > Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address") > Signed-off-by: Stanislav Fomichev <sdf@google.com> Acked-by: Song Liu <songliubraving@fb.com> > --- > kernel/bpf/stackmap.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c > index 8975d1768dcb..f4b57c68c45f 100644 > --- a/kernel/bpf/stackmap.c > +++ b/kernel/bpf/stackmap.c > @@ -315,6 +315,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, > for (i = 0; i < trace_nr; i++) { > id_offs[i].status = BPF_STACK_BUILD_ID_IP; > id_offs[i].ip = ips[i]; > + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); > } > return; > } > @@ -325,6 +326,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, > /* per entry fall back to ips */ > id_offs[i].status = BPF_STACK_BUILD_ID_IP; > id_offs[i].ip = ips[i]; > + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); > continue; > } > id_offs[i].offset = (vma->vm_pgoff << PAGE_SHIFT) + ips[i] > -- > 2.20.1.97.g81188d93c3-goog >
diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index 8975d1768dcb..f4b57c68c45f 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -315,6 +315,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, for (i = 0; i < trace_nr; i++) { id_offs[i].status = BPF_STACK_BUILD_ID_IP; id_offs[i].ip = ips[i]; + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); } return; } @@ -325,6 +326,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, /* per entry fall back to ips */ id_offs[i].status = BPF_STACK_BUILD_ID_IP; id_offs[i].ip = ips[i]; + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); continue; } id_offs[i].offset = (vma->vm_pgoff << PAGE_SHIFT) + ips[i]
When returning BPF_STACK_BUILD_ID_IP from stack_map_get_build_id_offset, make sure that build_id field is empty. Since we are using percpu free list, there is a possibility that we might reuse some previous bpf_stack_build_id with non-zero build_id. Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address") Signed-off-by: Stanislav Fomichev <sdf@google.com> --- kernel/bpf/stackmap.c | 2 ++ 1 file changed, 2 insertions(+)