Jamie Iles
9ce7ac5ed5
jffs2: Fix NULL pointer dereference in rp_size fs option parsing
...
[ Upstream commit a61df3c413e49b0042f9caf774c58512d1cc71b7 ]
syzkaller found the following JFFS2 splat:
Unable to handle kernel paging request at virtual address dfffa00000000001
Mem abort info:
ESR = 0x96000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000004
CM = 0, WnR = 0
[dfffa00000000001] address between user and kernel address ranges
Internal error: Oops: 96000004 [#1 ] SMP
Dumping ftrace buffer:
(ftrace buffer empty)
Modules linked in:
CPU: 0 PID: 12745 Comm: syz-executor.5 Tainted: G S 5.9.0-rc8+ #98
Hardware name: linux,dummy-virt (DT)
pstate: 20400005 (nzCv daif +PAN -UAO BTYPE=--)
pc : jffs2_parse_param+0x138/0x308 fs/jffs2/super.c:206
lr : jffs2_parse_param+0x108/0x308 fs/jffs2/super.c:205
sp : ffff000022a57910
x29: ffff000022a57910 x28: 0000000000000000
x27: ffff000057634008 x26: 000000000000d800
x25: 000000000000d800 x24: ffff0000271a9000
x23: ffffa0001adb5dc0 x22: ffff000023fdcf00
x21: 1fffe0000454af2c x20: ffff000024cc9400
x19: 0000000000000000 x18: 0000000000000000
x17: 0000000000000000 x16: ffffa000102dbdd0
x15: 0000000000000000 x14: ffffa000109e44bc
x13: ffffa00010a3a26c x12: ffff80000476e0b3
x11: 1fffe0000476e0b2 x10: ffff80000476e0b2
x9 : ffffa00010a3ad60 x8 : ffff000023b70593
x7 : 0000000000000003 x6 : 00000000f1f1f1f1
x5 : ffff000023fdcf00 x4 : 0000000000000002
x3 : ffffa00010000000 x2 : 0000000000000001
x1 : dfffa00000000000 x0 : 0000000000000008
Call trace:
jffs2_parse_param+0x138/0x308 fs/jffs2/super.c:206
vfs_parse_fs_param+0x234/0x4e8 fs/fs_context.c:117
vfs_parse_fs_string+0xe8/0x148 fs/fs_context.c:161
generic_parse_monolithic+0x17c/0x208 fs/fs_context.c:201
parse_monolithic_mount_data+0x7c/0xa8 fs/fs_context.c:649
do_new_mount fs/namespace.c:2871 [inline]
path_mount+0x548/0x1da8 fs/namespace.c:3192
do_mount+0x124/0x138 fs/namespace.c:3205
__do_sys_mount fs/namespace.c:3413 [inline]
__se_sys_mount fs/namespace.c:3390 [inline]
__arm64_sys_mount+0x164/0x238 fs/namespace.c:3390
__invoke_syscall arch/arm64/kernel/syscall.c:36 [inline]
invoke_syscall arch/arm64/kernel/syscall.c:48 [inline]
el0_svc_common.constprop.0+0x15c/0x598 arch/arm64/kernel/syscall.c:149
do_el0_svc+0x60/0x150 arch/arm64/kernel/syscall.c:195
el0_svc+0x34/0xb0 arch/arm64/kernel/entry-common.c:226
el0_sync_handler+0xc8/0x5b4 arch/arm64/kernel/entry-common.c:236
el0_sync+0x15c/0x180 arch/arm64/kernel/entry.S:663
Code: d2d40001 f2fbffe1 91002260 d343fc02 (38e16841)
---[ end trace 4edf690313deda44 ]---
This is because since ec10a24f10c8, the option parsing happens before
fill_super and so the MTD device isn't associated with the filesystem.
Defer the size check until there is a valid association.
Fixes: ec10a24f10c8 ("vfs: Convert jffs2 to use the new mount API")
Cc: <stable@vger.kernel.org>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: Jamie Iles <jamie@nuviainc.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-01-06 14:48:37 +01:00
..
2020-11-05 11:43:34 +01:00
2019-07-19 11:33:22 -07:00
2020-09-09 19:12:34 +02:00
2020-12-30 11:50:54 +01:00
2019-10-25 00:03:11 -04:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2021-01-06 14:48:36 +01:00
2020-11-05 11:43:36 +01:00
2020-12-30 11:51:40 +01:00
2020-12-30 11:51:40 +01:00
2019-09-19 09:42:37 -07:00
2020-05-27 17:46:30 +02:00
2019-11-23 21:44:49 -05:00
2021-01-06 14:48:35 +01:00
2020-09-17 13:47:55 +02:00
2019-09-03 09:30:56 -04:00
2020-10-29 09:58:03 +01:00
2020-02-28 17:22:26 +01:00
2020-12-02 08:49:53 +01:00
2019-08-30 07:27:17 -07:00
2020-12-30 11:51:23 +01:00
2019-11-10 11:56:05 -05:00
2020-09-09 19:12:30 +02:00
2021-01-06 14:48:36 +01:00
2021-01-06 14:48:35 +01:00
2020-06-17 16:40:36 +02:00
2019-08-30 07:27:17 -07:00
2019-07-10 18:43:43 -07:00
2020-11-01 12:01:05 +01:00
2020-12-11 13:23:32 +01:00
2020-04-17 10:50:22 +02:00
2019-08-30 08:11:25 -07:00
2020-09-03 11:26:48 +02:00
2020-10-29 09:58:06 +01:00
2019-09-19 09:42:37 -07:00
2020-11-18 19:20:30 +01:00
2021-01-06 14:48:37 +01:00
2020-12-30 11:51:40 +01:00
2020-08-19 08:16:12 +02:00
2020-12-30 11:51:16 +01:00
2020-08-21 13:05:37 +02:00
2020-12-30 11:51:16 +01:00
2020-12-30 11:51:22 +01:00
2020-12-30 11:51:22 +01:00
2020-06-17 16:40:29 +02:00
2020-06-17 16:40:24 +02:00
2020-10-29 09:58:03 +01:00
2020-11-18 19:20:30 +01:00
2019-08-30 08:11:25 -07:00
2019-07-19 10:42:02 -07:00
2020-08-21 13:05:29 +02:00
2020-07-22 09:33:12 +02:00
2020-12-16 10:56:58 +01:00
2020-08-19 08:16:27 +02:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2020-12-30 11:51:00 +01:00
2020-10-29 09:57:53 +01:00
2020-10-29 09:58:08 +01:00
2020-08-26 10:40:51 +02:00
2019-09-19 10:06:57 -07:00
2019-07-19 10:42:02 -07:00
2019-08-30 07:27:18 -07:00
2019-10-12 20:49:07 -04:00
2021-01-06 14:48:35 +01:00
2020-11-05 11:43:29 +01:00
2020-08-21 13:05:37 +02:00
2019-09-17 11:48:24 -04:00
2019-08-12 19:33:50 -07:00
2020-11-24 13:29:18 +01:00
2020-06-17 16:40:24 +02:00
2019-07-19 10:42:02 -07:00
2020-02-11 04:35:12 -08:00
2020-06-03 08:21:27 +02:00
2020-09-03 11:26:39 +02:00
2019-07-19 10:42:02 -07:00
2020-10-01 13:17:55 +02:00
2020-11-05 11:43:24 +01:00
2020-01-14 20:08:18 +01:00
2020-01-09 10:20:05 +01:00
2020-12-11 13:23:30 +01:00
2020-10-29 09:57:45 +01:00
2020-03-05 16:43:36 +01:00
2020-10-01 13:17:19 +02:00
2019-10-14 15:04:01 -07:00
2020-01-12 12:21:37 +01:00
2020-02-11 04:35:37 -08:00
2020-10-07 08:01:31 +02:00
2020-11-05 11:43:13 +01:00
2019-08-07 21:51:47 -04:00
2019-08-19 11:00:39 -04:00
2020-05-27 17:46:12 +02:00
2020-04-17 10:50:21 +02:00
2019-09-06 21:28:49 +02:00
2019-09-12 21:06:14 -04:00
2019-07-16 22:52:37 -04:00
2020-09-03 11:27:04 +02:00
2019-07-19 10:42:02 -07:00
2020-03-25 08:25:58 +01:00
2020-01-17 19:48:21 +01:00
2020-10-14 10:32:57 +02:00
2019-12-17 19:55:30 +01:00
2019-09-18 16:59:14 -07:00
2020-11-24 13:29:19 +01:00
2020-03-25 08:25:41 +01:00
2019-09-18 16:59:14 -07:00
2019-07-16 22:52:37 -04:00
2020-01-17 19:48:21 +01:00
2020-03-05 16:43:48 +01:00
2019-10-16 23:15:09 -04:00
2020-03-18 07:17:51 +01:00
2020-05-02 08:48:44 +02:00
2019-09-06 21:28:49 +02:00
2020-02-11 04:35:23 -08:00
2020-01-29 16:45:31 +01:00
2019-07-16 19:23:25 -07:00
2019-08-13 16:06:52 -07:00
2020-08-26 10:40:58 +02:00
2019-12-17 19:56:52 +01:00
2019-10-03 14:21:35 -07:00
2020-11-24 13:29:01 +01:00
2019-08-01 20:51:23 +02:00
2020-01-04 19:18:32 +01:00
2020-02-11 04:35:12 -08:00
2020-08-11 15:33:39 +02:00