Luis Chamberlain
3740d93e37
coredump: fix crash when umh is disabled
...
Commit 64e90a8acb859 ("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: 64e90a8acb85 ("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>
2020-04-28 17:54:13 +02:00
..
2020-04-24 17:42:44 -07:00
2020-04-03 11:30:20 -07:00
2020-04-07 10:43:42 -07:00
2020-04-03 13:12:26 -07:00
2020-04-08 21:46:57 +02:00
2020-04-22 23:10:14 +02:00
2020-04-10 15:36:22 -07:00
2020-04-14 10:08:50 +02:00
2019-11-27 11:42:01 -08:00
2020-04-08 12:05:07 +02:00
2020-04-06 21:42:36 +02:00
2020-04-10 13:18:57 -07:00
2020-04-14 08:36:41 +02:00
2020-04-22 23:10:13 +02:00
2020-04-16 12:10:54 +02:00
2020-04-22 22:07:26 -04:00
2020-03-25 11:50:48 +01:00
2019-12-18 18:07:31 +01:00
2019-06-05 17:37:17 +02:00
2020-03-23 18:19:06 +01:00
2020-04-06 08:58:42 -07:00
2020-04-20 17:10:58 -04:00
2020-03-12 10:42:51 -04:00
2020-02-22 20:36:47 -05:00
2020-03-12 10:42:51 -04:00
2019-06-05 17:37:17 +02:00
2020-02-21 11:22:15 -08:00
2020-02-04 03:05:26 +00:00
2020-02-14 16:05:04 +01:00
2019-06-05 17:36:37 +02:00
2020-03-30 18:06:39 -07:00
2019-06-19 17:09:06 +02:00
2020-03-25 10:04:01 -05:00
2019-09-25 17:51:39 -07:00
2020-04-24 15:49:00 -05:00
2020-04-07 10:43:42 -07:00
2019-06-03 15:49:06 +02:00
2020-04-15 09:56:32 +02:00
2019-10-06 09:11:37 -06:00
2020-03-30 16:17:15 -07:00
2019-11-11 20:10:01 +09:00
2019-07-12 11:05:40 -07:00
2020-03-21 16:00:24 +01:00
2019-08-29 15:10:10 +01:00
2020-04-07 10:43:44 -07:00
2020-03-25 10:04:01 -05:00
2019-12-08 14:37:36 +01:00
2019-11-12 11:35:32 +01:00
2019-12-04 19:44:14 -08:00
2020-01-08 16:32:55 +00:00
2019-09-06 23:58:44 +02:00
2020-01-08 16:32:55 +00:00
2020-01-08 16:32:55 +00:00
2020-01-08 16:32:55 +00:00
2020-04-10 15:36:22 -07:00
2020-01-09 12:40:13 +01:00
2020-03-20 13:06:20 +01:00
2020-02-04 03:05:26 +00:00
2020-01-31 10:30:41 -08:00
2019-08-05 18:39:56 -04:00
2019-08-05 18:39:56 -04:00
2020-04-09 12:52:34 -07:00
2020-03-21 18:56:06 -07:00
2020-01-14 12:20:48 +01:00
2020-03-06 12:28:24 +11:00
2019-11-25 09:15:42 +01:00
2019-08-19 21:54:16 -07:00
2020-02-28 16:29:12 -06:00
2020-04-10 12:59:56 -07:00
2020-02-04 03:05:26 +00:00
2020-01-18 13:51:39 +01:00
2019-09-24 15:54:09 -07:00
2019-12-25 10:41:20 +01:00
2020-03-31 17:29:33 -07:00
2020-04-23 13:30:18 -07:00
2020-03-25 12:59:37 +01:00
2020-03-21 16:03:54 +01:00
2019-11-11 10:30:59 +01:00
2020-01-17 10:19:21 +01:00
2019-11-15 14:38:30 +01:00
2020-03-03 19:34:32 +01:00
2019-11-26 13:03:56 -06:00
2020-01-09 16:42:29 -07:00
2020-04-02 09:35:31 -07:00
2020-03-02 14:06:33 -07:00
2019-12-04 15:18:39 +01:00
2020-03-30 18:06:39 -07:00
2019-07-18 11:51:00 -07:00
2019-12-18 18:07:31 +01:00
2020-04-07 21:51:27 +02:00
2020-04-28 17:54:13 +02:00
2020-02-07 15:34:12 +01:00
2019-07-08 19:36:47 -07:00
2019-07-08 19:36:47 -07:00
2019-06-05 17:37:17 +02:00
2019-06-05 17:37:17 +02:00
2020-01-17 11:19:22 +01:00
2020-04-08 11:35:20 +02:00