projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
6db6208
)
fs/ntfs3: Add null pointer check to attr_load_runs_vcn
author
Edward Lo
<edward.lo@ambergroup.io>
Sat, 6 Aug 2022 17:05:18 +0000
(
01:05
+0800)
committer
Konstantin Komarov
<almaz.alexandrovich@paragon-software.com>
Fri, 30 Sep 2022 14:39:50 +0000
(17:39 +0300)
Some metadata files are handled before MFT. This adds a null pointer
check for some corner cases that could lead to NPD while reading these
metadata files for a malformed NTFS image.
[ 240.190827] BUG: kernel NULL pointer dereference, address:
0000000000000158
[ 240.191583] #PF: supervisor read access in kernel mode
[ 240.191956] #PF: error_code(0x0000) - not-present page
[ 240.192391] PGD 0 P4D 0
[ 240.192897] Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
[ 240.193805] CPU: 0 PID: 242 Comm: mount Tainted: G B 5.19.0+ #17
[ 240.194477] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.14.0-0-g155821a1990b
-prebuilt.qemu.org 04/01/2014
[ 240.195152] RIP: 0010:ni_find_attr+0xae/0x300
[ 240.195679] Code: c8 48 c7 45 88 c0 4e 5e 86 c7 00 f1 f1 f1 f1 c7 40 04 00 f3 f3 f3 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 e8 e2 d9f
[ 240.196642] RSP: 0018:
ffff88800812f690
EFLAGS:
00000286
[ 240.197019] RAX:
0000000000000001
RBX:
0000000000000000
RCX:
ffffffff85ef037a
[ 240.197523] RDX:
0000000000000001
RSI:
0000000000000008
RDI:
ffffffff88e95f60
[ 240.197877] RBP:
ffff88800812f738
R08:
0000000000000001
R09:
fffffbfff11d2bed
[ 240.198292] R10:
ffffffff88e95f67
R11:
fffffbfff11d2bec
R12:
0000000000000000
[ 240.198647] R13:
0000000000000080
R14:
0000000000000000
R15:
0000000000000000
[ 240.199410] FS:
00007f233c33be40
(0000) GS:
ffff888058200000
(0000) knlGS:
0000000000000000
[ 240.199895] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 240.200314] CR2:
0000000000000158
CR3:
0000000004d32000
CR4:
00000000000006f0
[ 240.200839] Call Trace:
[ 240.201104] <TASK>
[ 240.201502] ? ni_load_mi+0x80/0x80
[ 240.202297] ? ___slab_alloc+0x465/0x830
[ 240.202614] attr_load_runs_vcn+0x8c/0x1a0
[ 240.202886] ? __kasan_slab_alloc+0x32/0x90
[ 240.203157] ? attr_data_write_resident+0x250/0x250
[ 240.203543] mi_read+0x133/0x2c0
[ 240.203785] mi_get+0x70/0x140
[ 240.204012] ni_load_mi_ex+0xfa/0x190
[ 240.204346] ? ni_std5+0x90/0x90
[ 240.204588] ? __kasan_kmalloc+0x88/0xb0
[ 240.204859] ni_enum_attr_ex+0xf1/0x1c0
[ 240.205107] ? ni_fname_type.part.0+0xd0/0xd0
[ 240.205600] ? ntfs_load_attr_list+0xbe/0x300
[ 240.205864] ? ntfs_cmp_names_cpu+0x125/0x180
[ 240.206157] ntfs_iget5+0x56c/0x1870
[ 240.206510] ? ntfs_get_block_bmap+0x70/0x70
[ 240.206776] ? __kasan_kmalloc+0x88/0xb0
[ 240.207030] ? set_blocksize+0x95/0x150
[ 240.207545] ntfs_fill_super+0xb8f/0x1e20
[ 240.207839] ? put_ntfs+0x1d0/0x1d0
[ 240.208069] ? vsprintf+0x20/0x20
[ 240.208467] ? mutex_unlock+0x81/0xd0
[ 240.208846] ? set_blocksize+0x95/0x150
[ 240.209221] get_tree_bdev+0x232/0x370
[ 240.209804] ? put_ntfs+0x1d0/0x1d0
[ 240.210519] ntfs_fs_get_tree+0x15/0x20
[ 240.210991] vfs_get_tree+0x4c/0x130
[ 240.211455] path_mount+0x645/0xfd0
[ 240.211806] ? putname+0x80/0xa0
[ 240.212112] ? finish_automount+0x2e0/0x2e0
[ 240.212559] ? kmem_cache_free+0x110/0x390
[ 240.212906] ? putname+0x80/0xa0
[ 240.213329] do_mount+0xd6/0xf0
[ 240.213829] ? path_mount+0xfd0/0xfd0
[ 240.214246] ? __kasan_check_write+0x14/0x20
[ 240.214774] __x64_sys_mount+0xca/0x110
[ 240.215080] do_syscall_64+0x3b/0x90
[ 240.215442] entry_SYSCALL_64_after_hwframe+0x63/0xcd
[ 240.215811] RIP: 0033:0x7f233b4e948a
[ 240.216104] Code: 48 8b 0d 11 fa 2a 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 008
[ 240.217615] RSP: 002b:
00007fff02211ec8
EFLAGS:
00000202
ORIG_RAX:
00000000000000a5
[ 240.218718] RAX:
ffffffffffffffda
RBX:
0000561cdc35b060
RCX:
00007f233b4e948a
[ 240.219556] RDX:
0000561cdc35b260
RSI:
0000561cdc35b2e0
RDI:
0000561cdc363af0
[ 240.219975] RBP:
0000000000000000
R08:
0000561cdc35b280
R09:
0000000000000020
[ 240.220403] R10:
00000000c0ed0000
R11:
0000000000000202
R12:
0000561cdc363af0
[ 240.220803] R13:
0000561cdc35b260
R14:
0000000000000000
R15:
00000000ffffffff
[ 240.221256] </TASK>
[ 240.221567] Modules linked in:
[ 240.222028] CR2:
0000000000000158
[ 240.223291] ---[ end trace
0000000000000000
]---
[ 240.223669] RIP: 0010:ni_find_attr+0xae/0x300
[ 240.224058] Code: c8 48 c7 45 88 c0 4e 5e 86 c7 00 f1 f1 f1 f1 c7 40 04 00 f3 f3 f3 65 48 8b 04 25 28 00 00 00 48 89 45 d0 31 c0 e8 e2 d9f
[ 240.225033] RSP: 0018:
ffff88800812f690
EFLAGS:
00000286
[ 240.225968] RAX:
0000000000000001
RBX:
0000000000000000
RCX:
ffffffff85ef037a
[ 240.226624] RDX:
0000000000000001
RSI:
0000000000000008
RDI:
ffffffff88e95f60
[ 240.227307] RBP:
ffff88800812f738
R08:
0000000000000001
R09:
fffffbfff11d2bed
[ 240.227816] R10:
ffffffff88e95f67
R11:
fffffbfff11d2bec
R12:
0000000000000000
[ 240.228330] R13:
0000000000000080
R14:
0000000000000000
R15:
0000000000000000
[ 240.228729] FS:
00007f233c33be40
(0000) GS:
ffff888058200000
(0000) knlGS:
0000000000000000
[ 240.229281] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 240.230298] CR2:
0000000000000158
CR3:
0000000004d32000
CR4:
00000000000006f0
Signed-off-by: Edward Lo <edward.lo@ambergroup.io>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/attrib.c
patch
|
blob
|
history
diff --git
a/fs/ntfs3/attrib.c
b/fs/ntfs3/attrib.c
index 0d354560d3235c7f3bce99fd237fa14a47adec1f..578c2bcfb1d9385e63edebe45ef47206a0691811 100644
(file)
--- a/
fs/ntfs3/attrib.c
+++ b/
fs/ntfs3/attrib.c
@@
-1221,6
+1221,11
@@
int attr_load_runs_vcn(struct ntfs_inode *ni, enum ATTR_TYPE type,
CLST svcn, evcn;
u16 ro;
+ if (!ni) {
+ /* Is record corrupted? */
+ return -ENOENT;
+ }
+
attr = ni_find_attr(ni, NULL, NULL, type, name, name_len, &vcn, NULL);
if (!attr) {
/* Is record corrupted? */