diff options
author | Song Liu <songliubraving@fb.com> | 2019-01-08 14:20:44 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-02-27 10:08:54 +0100 |
commit | 2f3480e3407909ee09a45a79bd9bf8ce8f5a2046 (patch) | |
tree | 4aa8536e703b5728e8defd3811cefc6b21b8670f /kernel/bpf/stackmap.c | |
parent | 06b919a5177220d7bbaa061fa0f89f1fe73b997a (diff) | |
download | linux-stable-2f3480e3407909ee09a45a79bd9bf8ce8f5a2046.tar.gz linux-stable-2f3480e3407909ee09a45a79bd9bf8ce8f5a2046.tar.bz2 linux-stable-2f3480e3407909ee09a45a79bd9bf8ce8f5a2046.zip |
bpf: fix panic in stack_map_get_build_id() on i386 and arm32
[ Upstream commit beaf3d1901f4ea46fbd5c9d857227d99751de469 ]
As Naresh reported, test_stacktrace_build_id() causes panic on i386 and
arm32 systems. This is caused by page_address() returns NULL in certain
cases.
This patch fixes this error by using kmap_atomic/kunmap_atomic instead
of page_address.
Fixes: 615755a77b24 (" bpf: extend stackmap to save binary_build_id+offset instead of address")
Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'kernel/bpf/stackmap.c')
-rw-r--r-- | kernel/bpf/stackmap.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index 8061a439ef18..e50ef5bca421 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -260,7 +260,7 @@ static int stack_map_get_build_id(struct vm_area_struct *vma, return -EFAULT; /* page not mapped */ ret = -EINVAL; - page_addr = page_address(page); + page_addr = kmap_atomic(page); ehdr = (Elf32_Ehdr *)page_addr; /* compare magic x7f "ELF" */ @@ -276,6 +276,7 @@ static int stack_map_get_build_id(struct vm_area_struct *vma, else if (ehdr->e_ident[EI_CLASS] == ELFCLASS64) ret = stack_map_get_build_id_64(page_addr, build_id); out: + kunmap_atomic(page_addr); put_page(page); return ret; } |