| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2023-52973: vc_screen: move load of struct vc_data pointer in vcs_read() to avoid UAF |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| vc_screen: move load of struct vc_data pointer in vcs_read() to avoid UAF |
| |
| After a call to console_unlock() in vcs_read() the vc_data struct can be |
| freed by vc_deallocate(). Because of that, the struct vc_data pointer |
| load must be done at the top of while loop in vcs_read() to avoid a UAF |
| when vcs_size() is called. |
| |
| Syzkaller reported a UAF in vcs_size(). |
| |
| BUG: KASAN: use-after-free in vcs_size (drivers/tty/vt/vc_screen.c:215) |
| Read of size 4 at addr ffff8881137479a8 by task 4a005ed81e27e65/1537 |
| |
| CPU: 0 PID: 1537 Comm: 4a005ed81e27e65 Not tainted 6.2.0-rc5 #1 |
| Hardware name: Red Hat KVM, BIOS 1.15.0-2.module |
| Call Trace: |
| <TASK> |
| __asan_report_load4_noabort (mm/kasan/report_generic.c:350) |
| vcs_size (drivers/tty/vt/vc_screen.c:215) |
| vcs_read (drivers/tty/vt/vc_screen.c:415) |
| vfs_read (fs/read_write.c:468 fs/read_write.c:450) |
| ... |
| </TASK> |
| |
| Allocated by task 1191: |
| ... |
| kmalloc_trace (mm/slab_common.c:1069) |
| vc_allocate (./include/linux/slab.h:580 ./include/linux/slab.h:720 |
| drivers/tty/vt/vt.c:1128 drivers/tty/vt/vt.c:1108) |
| con_install (drivers/tty/vt/vt.c:3383) |
| tty_init_dev (drivers/tty/tty_io.c:1301 drivers/tty/tty_io.c:1413 |
| drivers/tty/tty_io.c:1390) |
| tty_open (drivers/tty/tty_io.c:2080 drivers/tty/tty_io.c:2126) |
| chrdev_open (fs/char_dev.c:415) |
| do_dentry_open (fs/open.c:883) |
| vfs_open (fs/open.c:1014) |
| ... |
| |
| Freed by task 1548: |
| ... |
| kfree (mm/slab_common.c:1021) |
| vc_port_destruct (drivers/tty/vt/vt.c:1094) |
| tty_port_destructor (drivers/tty/tty_port.c:296) |
| tty_port_put (drivers/tty/tty_port.c:312) |
| vt_disallocate_all (drivers/tty/vt/vt_ioctl.c:662 (discriminator 2)) |
| vt_ioctl (drivers/tty/vt/vt_ioctl.c:903) |
| tty_ioctl (drivers/tty/tty_io.c:2776) |
| ... |
| |
| The buggy address belongs to the object at ffff888113747800 |
| which belongs to the cache kmalloc-1k of size 1024 |
| The buggy address is located 424 bytes inside of |
| 1024-byte region [ffff888113747800, ffff888113747c00) |
| |
| The buggy address belongs to the physical page: |
| page:00000000b3fe6c7c refcount:1 mapcount:0 mapping:0000000000000000 |
| index:0x0 pfn:0x113740 |
| head:00000000b3fe6c7c order:3 compound_mapcount:0 subpages_mapcount:0 |
| compound_pincount:0 |
| anon flags: 0x17ffffc0010200(slab|head|node=0|zone=2|lastcpupid=0x1fffff) |
| raw: 0017ffffc0010200 ffff888100042dc0 0000000000000000 dead000000000001 |
| raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000 |
| page dumped because: kasan: bad access detected |
| |
| Memory state around the buggy address: |
| ffff888113747880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb |
| ffff888113747900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb |
| > ffff888113747980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb |
| ^ |
| ffff888113747a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb |
| ffff888113747a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb |
| ================================================================== |
| Disabling lock debugging due to kernel taint |
| |
| The Linux kernel CVE team has assigned CVE-2023-52973 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 4.14.329 with commit af79ea9a2443016f64d8fd8d72020cc874f0e066 |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 4.19.273 with commit 6332f52f44b9776568bf3c0b714ddfb0bb175e78 |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 5.4.232 with commit d0332cbf53dad06a22189cc341391237f4ea6d9f |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 5.10.168 with commit 55515d7d8743b71b80bfe68e89eb9d92630626ab |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 5.15.93 with commit fc9e27f3ba083534b8bbf72ab0f5c810ffdc7d18 |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 6.1.11 with commit 8506f16aae9daf354e3732bcfd447e2a97f023df |
| Issue introduced in 2.6.38 with commit ac751efa6a0d70f2c9daef5c7e3a92270f5c2dff and fixed in 6.2 with commit 226fae124b2dac217ea5436060d623ff3385bc34 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2023-52973 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| drivers/tty/vt/vc_screen.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/af79ea9a2443016f64d8fd8d72020cc874f0e066 |
| https://git.kernel.org/stable/c/6332f52f44b9776568bf3c0b714ddfb0bb175e78 |
| https://git.kernel.org/stable/c/d0332cbf53dad06a22189cc341391237f4ea6d9f |
| https://git.kernel.org/stable/c/55515d7d8743b71b80bfe68e89eb9d92630626ab |
| https://git.kernel.org/stable/c/fc9e27f3ba083534b8bbf72ab0f5c810ffdc7d18 |
| https://git.kernel.org/stable/c/8506f16aae9daf354e3732bcfd447e2a97f023df |
| https://git.kernel.org/stable/c/226fae124b2dac217ea5436060d623ff3385bc34 |