diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2018-05-25 17:33:20 -0400 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-05-28 11:40:59 -0400 |
| commit | dc3b8ae9d271897e09b27fa4e4e0000de98590d1 (patch) | |
| tree | d801db41bd5c8ced70e67a853d85e09022a75bb6 /kernel/bpf | |
| parent | 53c8036cb715f3577a7fe1db6e6ad06e8697b36f (diff) | |
bpf: avoid -Wmaybe-uninitialized warning
The stack_map_get_build_id_offset() function is too long for gcc to track
whether 'work' may or may not be initialized at the end of it, leading
to a false-positive warning:
kernel/bpf/stackmap.c: In function 'stack_map_get_build_id_offset':
kernel/bpf/stackmap.c:334:13: error: 'work' may be used uninitialized in this function [-Werror=maybe-uninitialized]
This removes the 'in_nmi_ctx' flag and uses the state of that variable
itself to see if it got initialized.
Fixes: bae77c5eb5b2 ("bpf: enable stackmap with build_id in nmi context")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'kernel/bpf')
| -rw-r--r-- | kernel/bpf/stackmap.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index b59ace0f0f09..b675a3f3d141 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c | |||
| @@ -285,11 +285,10 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, | |||
| 285 | { | 285 | { |
| 286 | int i; | 286 | int i; |
| 287 | struct vm_area_struct *vma; | 287 | struct vm_area_struct *vma; |
| 288 | bool in_nmi_ctx = in_nmi(); | ||
| 289 | bool irq_work_busy = false; | 288 | bool irq_work_busy = false; |
| 290 | struct stack_map_irq_work *work; | 289 | struct stack_map_irq_work *work = NULL; |
| 291 | 290 | ||
| 292 | if (in_nmi_ctx) { | 291 | if (in_nmi()) { |
| 293 | work = this_cpu_ptr(&up_read_work); | 292 | work = this_cpu_ptr(&up_read_work); |
| 294 | if (work->irq_work.flags & IRQ_WORK_BUSY) | 293 | if (work->irq_work.flags & IRQ_WORK_BUSY) |
| 295 | /* cannot queue more up_read, fallback */ | 294 | /* cannot queue more up_read, fallback */ |
| @@ -328,7 +327,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, | |||
| 328 | id_offs[i].status = BPF_STACK_BUILD_ID_VALID; | 327 | id_offs[i].status = BPF_STACK_BUILD_ID_VALID; |
| 329 | } | 328 | } |
| 330 | 329 | ||
| 331 | if (!in_nmi_ctx) { | 330 | if (!work) { |
| 332 | up_read(¤t->mm->mmap_sem); | 331 | up_read(¤t->mm->mmap_sem); |
| 333 | } else { | 332 | } else { |
| 334 | work->sem = ¤t->mm->mmap_sem; | 333 | work->sem = ¤t->mm->mmap_sem; |
