]>
 
 
www.infradead.org Git - users/jedix/linux-maple.git/commit 
 
 
 
 
 
 
tty: n_gsm: fix UAF in gsm_cleanup_mux 
 
In gsm_cleanup_mux() the 'gsm->dlci' pointer was not cleaned properly, 
leaving it a dangling pointer after gsm_dlci_release. 
This leads to use-after-free where 'gsm->dlci[0]' are freed and accessed 
by the subsequent gsm_cleanup_mux(). 
 
Such is the case in the following call trace: 
 
 <TASK> 
 __dump_stack lib/dump_stack.c:88 [inline] 
 dump_stack_lvl+0x1e3/0x2cb lib/dump_stack.c:106 
 print_address_description+0x63/0x3b0 mm/kasan/report.c:248 
 __kasan_report mm/kasan/report.c:434 [inline] 
 kasan_report+0x16b/0x1c0 mm/kasan/report.c:451 
 gsm_cleanup_mux+0x76a/0x850 drivers/tty/n_gsm.c:2397 
 gsm_config drivers/tty/n_gsm.c:2653 [inline] 
 gsmld_ioctl+0xaae/0x15b0 drivers/tty/n_gsm.c:2986 
 tty_ioctl+0x8ff/0xc50 drivers/tty/tty_io.c:2816 
 vfs_ioctl fs/ioctl.c:51 [inline] 
 __do_sys_ioctl fs/ioctl.c:874 [inline] 
 __se_sys_ioctl+0xf1/0x160 fs/ioctl.c:860 
 do_syscall_x64 arch/x86/entry/common.c:50 [inline] 
 do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 
 entry_SYSCALL_64_after_hwframe+0x61/0xcb 
 </TASK> 
 
Allocated by task 3501: 
 kasan_save_stack mm/kasan/common.c:38 [inline] 
 kasan_set_track mm/kasan/common.c:46 [inline] 
 set_alloc_info mm/kasan/common.c:434 [inline] 
 ____kasan_kmalloc+0xba/0xf0 mm/kasan/common.c:513 
 kasan_kmalloc include/linux/kasan.h:264 [inline] 
 kmem_cache_alloc_trace+0x143/0x290 mm/slub.c:3247 
 kmalloc include/linux/slab.h:591 [inline] 
 kzalloc include/linux/slab.h:721 [inline] 
 gsm_dlci_alloc+0x53/0x3a0 drivers/tty/n_gsm.c:1932 
 gsm_activate_mux+0x1c/0x330 drivers/tty/n_gsm.c:2438 
 gsm_config drivers/tty/n_gsm.c:2677 [inline] 
 gsmld_ioctl+0xd46/0x15b0 drivers/tty/n_gsm.c:2986 
 tty_ioctl+0x8ff/0xc50 drivers/tty/tty_io.c:2816 
 vfs_ioctl fs/ioctl.c:51 [inline] 
 __do_sys_ioctl fs/ioctl.c:874 [inline] 
 __se_sys_ioctl+0xf1/0x160 fs/ioctl.c:860 
 do_syscall_x64 arch/x86/entry/common.c:50 [inline] 
 do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 
 entry_SYSCALL_64_after_hwframe+0x61/0xcb 
 
Freed by task 3501: 
 kasan_save_stack mm/kasan/common.c:38 [inline] 
 kasan_set_track+0x4b/0x80 mm/kasan/common.c:46 
 kasan_set_free_info+0x1f/0x40 mm/kasan/generic.c:360 
 ____kasan_slab_free+0xd8/0x120 mm/kasan/common.c:366 
 kasan_slab_free include/linux/kasan.h:230 [inline] 
 slab_free_hook mm/slub.c:1705 [inline] 
 slab_free_freelist_hook+0xdd/0x160 mm/slub.c:1731 
 slab_free mm/slub.c:3499 [inline] 
 kfree+0xf1/0x270 mm/slub.c:4559 
 dlci_put drivers/tty/n_gsm.c:1988 [inline] 
 gsm_dlci_release drivers/tty/n_gsm.c:2021 [inline] 
 gsm_cleanup_mux+0x574/0x850 drivers/tty/n_gsm.c:2415 
 gsm_config drivers/tty/n_gsm.c:2653 [inline] 
 gsmld_ioctl+0xaae/0x15b0 drivers/tty/n_gsm.c:2986 
 tty_ioctl+0x8ff/0xc50 drivers/tty/tty_io.c:2816 
 vfs_ioctl fs/ioctl.c:51 [inline] 
 __do_sys_ioctl fs/ioctl.c:874 [inline] 
 __se_sys_ioctl+0xf1/0x160 fs/ioctl.c:860 
 do_syscall_x64 arch/x86/entry/common.c:50 [inline] 
 do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 
 entry_SYSCALL_64_after_hwframe+0x61/0xcb 
 
Fixes: aa371e96f05d ("tty: n_gsm: fix restart handling via CLD command")  
Signed-off-by: Chaoyuan Peng <hedonistsmith@gmail.com>  
Cc: stable <stable@kernel.org>  
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>