Patch "fs/ntfs3: Validate attribute name offset" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    fs/ntfs3: Validate attribute name offset

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     fs-ntfs3-validate-attribute-name-offset.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4692eea4959eb1408ac3e975d04d18f8de8eb638
Author: Edward Lo <edward.lo@xxxxxxxxxxxxx>
Date:   Fri Sep 9 09:04:00 2022 +0800

    fs/ntfs3: Validate attribute name offset
    
    [ Upstream commit 4f1dc7d9756e66f3f876839ea174df2e656b7f79 ]
    
    Although the attribute name length is checked before comparing it to
    some common names (e.g., $I30), the offset isn't. This adds a sanity
    check for the attribute name offset, guarantee the validity and prevent
    possible out-of-bound memory accesses.
    
    [  191.720056] BUG: unable to handle page fault for address: ffffebde00000008
    [  191.721060] #PF: supervisor read access in kernel mode
    [  191.721586] #PF: error_code(0x0000) - not-present page
    [  191.722079] PGD 0 P4D 0
    [  191.722571] Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI
    [  191.723179] CPU: 0 PID: 244 Comm: mount Not tainted 6.0.0-rc4 #28
    [  191.723749] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    [  191.724832] RIP: 0010:kfree+0x56/0x3b0
    [  191.725870] Code: 80 48 01 d8 0f 82 65 03 00 00 48 c7 c2 00 00 00 80 48 2b 15 2c 06 dd 01 48 01 d0 48 c1 e8 0c 48 c1 e0 06 48 03 05 0a 069
    [  191.727375] RSP: 0018:ffff8880076f7878 EFLAGS: 00000286
    [  191.727897] RAX: ffffebde00000000 RBX: 0000000000000040 RCX: ffffffff8528d5b9
    [  191.728531] RDX: 0000777f80000000 RSI: ffffffff8522d49c RDI: 0000000000000040
    [  191.729183] RBP: ffff8880076f78a0 R08: 0000000000000000 R09: 0000000000000000
    [  191.729628] R10: ffff888008949fd8 R11: ffffed10011293fd R12: 0000000000000040
    [  191.730158] R13: ffff888008949f98 R14: ffff888008949ec0 R15: ffff888008949fb0
    [  191.730645] FS:  00007f3520cd7e40(0000) GS:ffff88805ba00000(0000) knlGS:0000000000000000
    [  191.731328] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  191.731667] CR2: ffffebde00000008 CR3: 0000000009704000 CR4: 00000000000006f0
    [  191.732568] Call Trace:
    [  191.733231]  <TASK>
    [  191.733860]  kvfree+0x2c/0x40
    [  191.734632]  ni_clear+0x180/0x290
    [  191.735085]  ntfs_evict_inode+0x45/0x70
    [  191.735495]  evict+0x199/0x280
    [  191.735996]  iput.part.0+0x286/0x320
    [  191.736438]  iput+0x32/0x50
    [  191.736811]  iget_failed+0x23/0x30
    [  191.737270]  ntfs_iget5+0x337/0x1890
    [  191.737629]  ? ntfs_clear_mft_tail+0x20/0x260
    [  191.738201]  ? ntfs_get_block_bmap+0x70/0x70
    [  191.738482]  ? ntfs_objid_init+0xf6/0x140
    [  191.738779]  ? ntfs_reparse_init+0x140/0x140
    [  191.739266]  ntfs_fill_super+0x121b/0x1b50
    [  191.739623]  ? put_ntfs+0x1d0/0x1d0
    [  191.739984]  ? asm_sysvec_apic_timer_interrupt+0x1b/0x20
    [  191.740466]  ? put_ntfs+0x1d0/0x1d0
    [  191.740787]  ? sb_set_blocksize+0x6a/0x80
    [  191.741272]  get_tree_bdev+0x232/0x370
    [  191.741829]  ? put_ntfs+0x1d0/0x1d0
    [  191.742669]  ntfs_fs_get_tree+0x15/0x20
    [  191.743132]  vfs_get_tree+0x4c/0x130
    [  191.743457]  path_mount+0x654/0xfe0
    [  191.743938]  ? putname+0x80/0xa0
    [  191.744271]  ? finish_automount+0x2e0/0x2e0
    [  191.744582]  ? putname+0x80/0xa0
    [  191.745053]  ? kmem_cache_free+0x1c4/0x440
    [  191.745403]  ? putname+0x80/0xa0
    [  191.745616]  do_mount+0xd6/0xf0
    [  191.745887]  ? path_mount+0xfe0/0xfe0
    [  191.746287]  ? __kasan_check_write+0x14/0x20
    [  191.746582]  __x64_sys_mount+0xca/0x110
    [  191.746850]  do_syscall_64+0x3b/0x90
    [  191.747122]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
    [  191.747517] RIP: 0033:0x7f351fee948a
    [  191.748332] 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
    [  191.749341] RSP: 002b:00007ffd51cf3af8 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
    [  191.749960] RAX: ffffffffffffffda RBX: 000055b903733060 RCX: 00007f351fee948a
    [  191.750589] RDX: 000055b903733260 RSI: 000055b9037332e0 RDI: 000055b90373bce0
    [  191.751115] RBP: 0000000000000000 R08: 000055b903733280 R09: 0000000000000020
    [  191.751537] R10: 00000000c0ed0000 R11: 0000000000000202 R12: 000055b90373bce0
    [  191.751946] R13: 000055b903733260 R14: 0000000000000000 R15: 00000000ffffffff
    [  191.752519]  </TASK>
    [  191.752782] Modules linked in:
    [  191.753785] CR2: ffffebde00000008
    [  191.754937] ---[ end trace 0000000000000000 ]---
    [  191.755429] RIP: 0010:kfree+0x56/0x3b0
    [  191.755725] Code: 80 48 01 d8 0f 82 65 03 00 00 48 c7 c2 00 00 00 80 48 2b 15 2c 06 dd 01 48 01 d0 48 c1 e8 0c 48 c1 e0 06 48 03 05 0a 069
    [  191.756744] RSP: 0018:ffff8880076f7878 EFLAGS: 00000286
    [  191.757218] RAX: ffffebde00000000 RBX: 0000000000000040 RCX: ffffffff8528d5b9
    [  191.757580] RDX: 0000777f80000000 RSI: ffffffff8522d49c RDI: 0000000000000040
    [  191.758016] RBP: ffff8880076f78a0 R08: 0000000000000000 R09: 0000000000000000
    [  191.758570] R10: ffff888008949fd8 R11: ffffed10011293fd R12: 0000000000000040
    [  191.758957] R13: ffff888008949f98 R14: ffff888008949ec0 R15: ffff888008949fb0
    [  191.759317] FS:  00007f3520cd7e40(0000) GS:ffff88805ba00000(0000) knlGS:0000000000000000
    [  191.759711] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  191.760118] CR2: ffffebde00000008 CR3: 0000000009704000 CR4: 00000000000006f0
    
    Signed-off-by: Edward Lo <edward.lo@xxxxxxxxxxxxx>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c
index 3f5e3ca099c7..791d049a9ad7 100644
--- a/fs/ntfs3/inode.c
+++ b/fs/ntfs3/inode.c
@@ -129,6 +129,9 @@ static struct inode *ntfs_read_mft(struct inode *inode,
 	rsize = attr->non_res ? 0 : le32_to_cpu(attr->res.data_size);
 	asize = le32_to_cpu(attr->size);
 
+	if (le16_to_cpu(attr->name_off) + attr->name_len > asize)
+		goto out;
+
 	switch (attr->type) {
 	case ATTR_STD:
 		if (attr->non_res ||



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux