Luis Chamberlain
f3a6bc0d47
coredump: fix crash when umh is disabled
commit 3740d93e37902b31159a82da2d5c8812ed825404 upstream.
Commit 64e90a8acb ("Introduce STATIC_USERMODEHELPER to mediate
call_usermodehelper()") added the optiont to disable all
call_usermodehelper() calls by setting STATIC_USERMODEHELPER_PATH to
an empty string. When this is done, and crashdump is triggered, it
will crash on null pointer dereference, since we make assumptions
over what call_usermodehelper_exec() did.
This has been reported by Sergey when one triggers a a coredump
with the following configuration:
```
CONFIG_STATIC_USERMODEHELPER=y
CONFIG_STATIC_USERMODEHELPER_PATH=""
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e
```
The way disabling the umh was designed was that call_usermodehelper_exec()
would just return early, without an error. But coredump assumes
certain variables are set up for us when this happens, and calls
ile_start_write(cprm.file) with a NULL file.
[ 2.819676] BUG: kernel NULL pointer dereference, address: 0000000000000020
[ 2.819859] #PF: supervisor read access in kernel mode
[ 2.820035] #PF: error_code(0x0000) - not-present page
[ 2.820188] PGD 0 P4D 0
[ 2.820305] Oops: 0000 [#1] SMP PTI
[ 2.820436] CPU: 2 PID: 89 Comm: a Not tainted 5.7.0-rc1+ #7
[ 2.820680] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190711_202441-buildvm-armv7-10.arm.fedoraproject.org-2.fc31 04/01/2014
[ 2.821150] RIP: 0010:do_coredump+0xd80/0x1060
[ 2.821385] Code: e8 95 11 ed ff 48 c7 c6 cc a7 b4 81 48 8d bd 28 ff
ff ff 89 c2 e8 70 f1 ff ff 41 89 c2 85 c0 0f 84 72 f7 ff ff e9 b4 fe ff
ff <48> 8b 57 20 0f b7 02 66 25 00 f0 66 3d 00 8
0 0f 84 9c 01 00 00 44
[ 2.822014] RSP: 0000:ffffc9000029bcb8 EFLAGS: 00010246
[ 2.822339] RAX: 0000000000000000 RBX: ffff88803f860000 RCX: 000000000000000a
[ 2.822746] RDX: 0000000000000009 RSI: 0000000000000282 RDI: 0000000000000000
[ 2.823141] RBP: ffffc9000029bde8 R08: 0000000000000000 R09: ffffc9000029bc00
[ 2.823508] R10: 0000000000000001 R11: ffff88803dec90be R12: ffffffff81c39da0
[ 2.823902] R13: ffff88803de84400 R14: 0000000000000000 R15: 0000000000000000
[ 2.824285] FS: 00007fee08183540(0000) GS:ffff88803e480000(0000) knlGS:0000000000000000
[ 2.824767] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 2.825111] CR2: 0000000000000020 CR3: 000000003f856005 CR4: 0000000000060ea0
[ 2.825479] Call Trace:
[ 2.825790] get_signal+0x11e/0x720
[ 2.826087] do_signal+0x1d/0x670
[ 2.826361] ? force_sig_info_to_task+0xc1/0xf0
[ 2.826691] ? force_sig_fault+0x3c/0x40
[ 2.826996] ? do_trap+0xc9/0x100
[ 2.827179] exit_to_usermode_loop+0x49/0x90
[ 2.827359] prepare_exit_to_usermode+0x77/0xb0
[ 2.827559] ? invalid_op+0xa/0x30
[ 2.827747] ret_from_intr+0x20/0x20
[ 2.827921] RIP: 0033:0x55e2c76d2129
[ 2.828107] Code: 2d ff ff ff e8 68 ff ff ff 5d c6 05 18 2f 00 00 01
c3 0f 1f 80 00 00 00 00 c3 0f 1f 80 00 00 00 00 e9 7b ff ff ff 55 48 89
e5 <0f> 0b b8 00 00 00 00 5d c3 66 2e 0f 1f 84 0
0 00 00 00 00 0f 1f 40
[ 2.828603] RSP: 002b:00007fffeba5e080 EFLAGS: 00010246
[ 2.828801] RAX: 000055e2c76d2125 RBX: 0000000000000000 RCX: 00007fee0817c718
[ 2.829034] RDX: 00007fffeba5e188 RSI: 00007fffeba5e178 RDI: 0000000000000001
[ 2.829257] RBP: 00007fffeba5e080 R08: 0000000000000000 R09: 00007fee08193c00
[ 2.829482] R10: 0000000000000009 R11: 0000000000000000 R12: 000055e2c76d2040
[ 2.829727] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 2.829964] CR2: 0000000000000020
[ 2.830149] ---[ end trace ceed83d8c68a1bf1 ]---
```
Cc: <stable@vger.kernel.org> # v4.11+
Fixes: 64e90a8acb ("Introduce STATIC_USERMODEHELPER to mediate call_usermodehelper()")
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199795
Reported-by: Tony Vroon <chainsaw@gentoo.org>
Reported-by: Sergey Kvachonok <ravenexp@gmail.com>
Tested-by: Sergei Trofimovich <slyfox@gentoo.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Link: https://lore.kernel.org/r/20200416162859.26518-1-mcgrof@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
2020-05-14 07:57:21 +02:00 |
| .. |
|
bpf
|
cpumap: Avoid warning when CONFIG_DEBUG_PER_CPU_MAPS is enabled
|
2020-05-02 17:25:53 +02:00 |
|
cgroup
|
cgroup1: don't call release_agent when it is ""
|
2020-04-02 15:28:14 +02:00 |
|
configs
|
kconfig: tinyconfig: remove stale stack protector fixups
|
2018-06-15 07:15:28 +09:00 |
|
debug
|
kdb: do a sanity check on the cpu in kdb_per_cpu()
|
2020-01-27 14:50:48 +01:00 |
|
dma
|
dma-debug: add a schedule point in debug_dma_dump_mappings()
|
2020-01-04 19:12:43 +01:00 |
|
events
|
perf/core: fix parent pid/tid in task exit events
|
2020-05-02 17:25:53 +02:00 |
|
gcov
|
kernel/gcov/fs.c: gcov_seq_next() should increase position index
|
2020-04-29 16:31:12 +02:00 |
|
irq
|
genirq/irqdomain: Check pointer in irq_domain_alloc_irqs_hierarchy()
|
2020-04-17 10:48:41 +02:00 |
|
livepatch
|
livepatch: Nullify obj->mod in klp_module_coming()'s error path
|
2019-10-07 18:57:10 +02:00 |
|
locking
|
locktorture: Print ratio of acquisitions, not failures
|
2020-04-23 10:30:23 +02:00 |
|
power
|
PM: hibernate: Freeze kernel threads in software_resume()
|
2020-05-06 08:13:28 +02:00 |
|
printk
|
printk: fix exclusive_console replaying
|
2020-02-11 04:33:51 -08:00 |
|
rcu
|
rcu: Avoid data-race in rcu_gp_fqs_check_wake()
|
2020-02-11 04:33:55 -08:00 |
|
sched
|
sched: Avoid scale real weight down to zero
|
2020-04-17 10:48:40 +02:00 |
|
time
|
clocksource: Prevent double add_timer_on() for watchdog_timer
|
2020-02-11 04:34:18 -08:00 |
|
trace
|
tracing: Add a vmalloc_sync_mappings() for safe measure
|
2020-05-14 07:57:20 +02:00 |
|
.gitignore
|
|
|
|
acct.c
|
acct_on(): don't mess with freeze protection
|
2019-05-31 06:46:05 -07:00 |
|
async.c
|
kernel/async.c: revert "async: simplify lowest_in_progress()"
|
2018-02-06 18:32:44 -08:00 |
|
audit.c
|
audit: check the length of userspace generated audit records
|
2020-04-29 16:31:31 +02:00 |
|
audit.h
|
audit: track the owner of the command mutex ourselves
|
2018-02-23 11:22:22 -05:00 |
|
audit_fsnotify.c
|
fsnotify: add fsnotify_add_inode_mark() wrappers
|
2018-05-18 14:58:22 +02:00 |
|
audit_tree.c
|
audit: Embed key into chunk
|
2019-12-13 08:51:11 +01:00 |
|
audit_watch.c
|
audit_get_nd(): don't unlock parent too early
|
2019-12-13 08:51:02 +01:00 |
|
auditfilter.c
|
audit: fix error handling in audit_data_to_entry()
|
2020-03-05 16:42:17 +01:00 |
|
auditsc.c
|
audit: print empty EXECVE args
|
2019-12-01 09:17:17 +01:00 |
|
backtracetest.c
|
|
|
|
bounds.c
|
kbuild: fix kernel/bounds.c 'W=1' warning
|
2018-11-13 11:08:47 -08:00 |
|
capability.c
|
LSM: generalize flag passing to security_capable
|
2020-01-23 08:21:29 +01:00 |
|
compat.c
|
time: Enable get/put_compat_itimerspec64 always
|
2018-06-24 14:39:47 +02:00 |
|
configs.c
|
|
|
|
context_tracking.c
|
|
|
|
cpu.c
|
x86/speculation: Remove redundant arch_smt_update() invocation
|
2020-04-17 10:48:50 +02:00 |
|
cpu_pm.c
|
|
|
|
crash_core.c
|
kernel/crash_core.c: print timestamp using time64_t
|
2018-08-22 10:52:47 -07:00 |
|
crash_dump.c
|
|
|
|
cred.c
|
memcg: account security cred as well to kmemcg
|
2020-01-09 10:19:00 +01:00 |
|
delayacct.c
|
delayacct: Use raw_spinlocks
|
2018-04-27 14:34:51 +02:00 |
|
dma.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
elfcore.c
|
kernel/elfcore.c: include proper prototypes
|
2019-10-11 18:21:23 +02:00 |
|
exec_domain.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
exit.c
|
exit: panic before exit_mm() on global init exit
|
2020-01-09 10:19:02 +01:00 |
|
extable.c
|
extable: Make init_kernel_text() global
|
2018-02-21 16:54:06 +01:00 |
|
fail_function.c
|
bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe
|
2018-06-21 12:33:19 +02:00 |
|
fork.c
|
fork,memcg: alloc_thread_stack_node needs to set tsk->stack
|
2020-01-27 14:50:58 +01:00 |
|
freezer.c
|
PM / reboot: Eliminate race between reboot and suspend
|
2018-08-06 12:35:20 +02:00 |
|
futex.c
|
futex: Unbreak futex hashing
|
2020-03-25 08:06:14 +01:00 |
|
groups.c
|
|
|
|
hung_task.c
|
kernel: hung_task.c: disable on suspend
|
2019-04-20 09:16:02 +02:00 |
|
iomem.c
|
memremap: split devm_memremap_pages() and memremap() infrastructure
|
2018-05-15 23:08:33 -07:00 |
|
irq_work.c
|
irq_work: Do not raise an IPI when queueing work on the local CPU
|
2019-05-31 06:46:19 -07:00 |
|
jump_label.c
|
jump_label: move 'asm goto' support test to Kconfig
|
2019-06-04 08:02:34 +02:00 |
|
kallsyms.c
|
kallsyms: Don't let kallsyms_lookup_size_offset() fail on retrieving the first symbol
|
2019-09-21 07:17:02 +02:00 |
|
kcmp.c
|
|
|
|
Kconfig.freezer
|
|
|
|
Kconfig.hz
|
|
|
|
Kconfig.locks
|
|
|
|
Kconfig.preempt
|
kconfig: include kernel/Kconfig.preempt from init/Kconfig
|
2018-08-02 08:06:54 +09:00 |
|
kcov.c
|
kernel/kcov.c: mark write_comp_data() as notrace
|
2019-02-12 19:47:20 +01:00 |
|
kexec.c
|
kexec: add call to LSM hook in original kexec_load syscall
|
2018-07-16 12:31:57 -07:00 |
|
kexec_core.c
|
kexec: Allocate decrypted control pages for kdump if SME is enabled
|
2019-11-24 08:20:29 +01:00 |
|
kexec_file.c
|
treewide: Use array_size() in vzalloc()
|
2018-06-12 16:19:22 -07:00 |
|
kexec_internal.h
|
|
|
|
kmod.c
|
kmod: make request_module() return an error when autoloading is disabled
|
2020-04-17 10:48:52 +02:00 |
|
kprobes.c
|
kprobes: Fix optimize_kprobe()/unoptimize_kprobe() cancellation logic
|
2020-03-11 14:14:47 +01:00 |
|
ksysfs.c
|
|
|
|
kthread.c
|
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 11:25:07 -07:00 |
|
latencytop.c
|
|
|
|
Makefile
|
y2038: futex: Move compat implementation into futex.c
|
2019-12-01 09:17:38 +01:00 |
|
memremap.c
|
mm/memory_hotplug: shrink zones when offlining memory
|
2020-01-29 16:43:27 +01:00 |
|
module-internal.h
|
modsign: log module name in the event of an error
|
2018-07-02 11:36:17 +02:00 |
|
module.c
|
module: avoid setting info->name early in case we can fall back to info->mod->name
|
2020-02-24 08:34:49 +01:00 |
|
module_signing.c
|
modsign: log module name in the event of an error
|
2018-07-02 11:36:17 +02:00 |
|
notifier.c
|
x86/mm: split vmalloc_sync_all()
|
2020-03-25 08:06:13 +01:00 |
|
nsproxy.c
|
|
|
|
padata.c
|
padata: always acquire cpu_hotplug_lock before pinst->lock
|
2020-04-13 10:45:05 +02:00 |
|
panic.c
|
kernel/panic.c: do not append newline to the stack protector panic string
|
2019-12-01 09:17:10 +01:00 |
|
params.c
|
kernel/params.c: downgrade warning for unsafe parameters
|
2018-04-11 10:28:37 -07:00 |
|
pid.c
|
Fix failure path in alloc_pid()
|
2019-01-13 09:51:06 +01:00 |
|
pid_namespace.c
|
signal/pid_namespace: Fix reboot_pid_ns to use send_sig not force_sig
|
2019-07-26 09:14:01 +02:00 |
|
profile.c
|
|
|
|
ptrace.c
|
ptrace: reintroduce usage of subjective credentials in ptrace_has_cap()
|
2020-01-23 08:21:29 +01:00 |
|
range.c
|
|
|
|
reboot.c
|
PM / reboot: Eliminate race between reboot and suspend
|
2018-08-06 12:35:20 +02:00 |
|
relay.c
|
relay: check return of create_buf_file() properly
|
2019-03-13 14:02:35 -07:00 |
|
resource.c
|
resource: fix locking in find_next_iomem_res()
|
2019-09-16 08:22:20 +02:00 |
|
rseq.c
|
rseq: uapi: Declare rseq_cs field as union, update includes
|
2018-07-10 22:18:52 +02:00 |
|
seccomp.c
|
LSM: generalize flag passing to security_capable
|
2020-01-23 08:21:29 +01:00 |
|
signal.c
|
signal: Extend exec_id to 64bits
|
2020-04-17 10:48:47 +02:00 |
|
smp.c
|
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
|
2019-02-12 19:47:25 +01:00 |
|
smpboot.c
|
smpboot: Remove cpumask from the API
|
2018-07-03 09:20:44 +02:00 |
|
smpboot.h
|
|
|
|
softirq.c
|
nohz: Fix missing tick reprogram when interrupting an inline softirq
|
2018-08-03 15:52:10 +02:00 |
|
stacktrace.c
|
|
|
|
stop_machine.c
|
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 11:25:07 -07:00 |
|
sys.c
|
kernel/sys.c: prctl: fix false positive in validate_prctl_map()
|
2019-06-15 11:54:01 +02:00 |
|
sys_ni.c
|
Merge branch 'core-rseq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-06-10 10:17:09 -07:00 |
|
sysctl.c
|
kernel: sysctl: make drop_caches write-only
|
2020-01-04 19:13:17 +01:00 |
|
sysctl_binary.c
|
staging: irda: remove remaining remants of irda code removal
|
2018-04-16 11:26:49 +02:00 |
|
task_work.c
|
|
|
|
taskstats.c
|
taskstats: fix data-race
|
2020-01-09 10:18:59 +01:00 |
|
test_kprobes.c
|
kprobes: Remove jprobe API implementation
|
2018-06-21 12:33:05 +02:00 |
|
torture.c
|
torture: Keep old-school dmesg format
|
2018-06-25 11:30:10 -07:00 |
|
tracepoint.c
|
tracepoint: Fix tracepoint array element size mismatch
|
2018-10-17 15:35:29 -04:00 |
|
tsacct.c
|
|
|
|
ucount.c
|
headers: untangle kmemleak.h from mm.h
|
2018-04-05 21:36:27 -07:00 |
|
uid16.c
|
fs: add do_fchownat(), ksys_fchown() helpers and ksys_{,l}chown() wrappers
|
2018-04-02 20:15:59 +02:00 |
|
uid16.h
|
kernel: provide ksys_*() wrappers for syscalls called by kernel/uid16.c
|
2018-04-02 20:15:30 +02:00 |
|
umh.c
|
coredump: fix crash when umh is disabled
|
2020-05-14 07:57:21 +02:00 |
|
up.c
|
|
|
|
user-return-notifier.c
|
|
|
|
user.c
|
userns: use irqsave variant of refcount_dec_and_lock()
|
2018-08-22 10:52:47 -07:00 |
|
user_namespace.c
|
userns: also map extents in the reverse map to kernel IDs
|
2018-11-13 11:09:00 -08:00 |
|
utsname.c
|
uts: create "struct uts_namespace" from kmem_cache
|
2018-04-11 10:28:35 -07:00 |
|
utsname_sysctl.c
|
sys: don't hold uts_sem while accessing userspace memory
|
2018-08-11 02:05:53 -05:00 |
|
watchdog.c
|
watchdog/softlockup: Enforce that timestamp is valid on boot
|
2020-02-24 08:34:49 +01:00 |
|
watchdog_hld.c
|
watchdog: Mark watchdog touch functions as notrace
|
2018-08-30 12:56:40 +02:00 |
|
workqueue.c
|
workqueue: don't use wq_select_unbound_cpu() for bound works
|
2020-03-18 07:14:20 +01:00 |
|
workqueue_internal.h
|
workqueue: Set worker->desc to workqueue name by default
|
2018-05-18 08:47:13 -07:00 |