{"id":21334,"date":"2026-09-12T04:31:03","date_gmt":"2026-09-11T20:31:03","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81001"},"modified":"2026-09-12T04:31:03","modified_gmt":"2026-09-11T20:31:03","slug":"cve-2026-81001","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81001","title":{"rendered":"CVE-2026-81001 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nslip: fix use-after-f"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>slip: fix use-after-free in sl_sync()<\/p>\n<p>slip_devs[] stores bare net_device pointers and takes no reference on<br \/>\nthem.  sl_sync() and sl_alloc() walk that table from slip_open() under<br \/>\nrtnl_lock(), while an entry is dropped by sl_free_netdev(), which<br \/>\nsl_setup() installs as dev-&gt;priv_destructor.<\/p>\n<p>priv_destructor is called from netdev_run_todo(), which deliberately<br \/>\nruns with the RTNL semaphore released so that it can sleep while waiting<br \/>\nfor the device refcount to drop:<\/p>\n<p>\t\/* Snapshot list, allow later requests *\/<br \/>\n\tlist_replace_init(&amp;net_todo_list, &amp;list);<\/p>\n<p>\t__rtnl_unlock();<br \/>\n\t&#8230;<br \/>\n\t\tif (dev-&gt;priv_destructor)<br \/>\n\t\t\tdev-&gt;priv_destructor(dev);\t\/* slip_devs[i] = NULL *\/<br \/>\n\t\tif (dev-&gt;needs_free_netdev)<br \/>\n\t\t\tfree_netdev(dev);<br \/>\n\t\t&#8230;<br \/>\n\t\t\/* Free network device *\/<br \/>\n\t\tkobject_put(&amp;dev-&gt;dev.kobj);<\/p>\n<p>So rtnl_lock() does not serialise slip_open() against the teardown at<br \/>\nall.  sl_sync() can load slip_devs[i] while the entry is still published<br \/>\nand dereference it after netdev_run_todo() has run the destructor and<br \/>\nreleased the device:<\/p>\n<p>  CPU0 (slip_open)                 CPU1 (slip_close)<br \/>\n                                   unregister_netdev()<br \/>\n                                     rtnl_unlock()<br \/>\n                                       netdev_run_todo()<br \/>\n                                         __rtnl_unlock()<br \/>\n  rtnl_lock()<br \/>\n  sl_sync()<br \/>\n    dev = slip_devs[i]<br \/>\n                                         priv_destructor(dev)<br \/>\n                                           slip_devs[i] = NULL<br \/>\n                                         kobject_put(&amp;dev-&gt;dev.kobj)<br \/>\n                                           \/* dev is freed *\/<br \/>\n    sl = netdev_priv(dev)<br \/>\n    if (sl-&gt;tty || sl-&gt;leased)     \/* use-after-free *\/<\/p>\n<p>  BUG: KASAN: use-after-free in sl_sync drivers\/net\/slip\/slip.c:730 [inline]<br \/>\n  BUG: KASAN: use-after-free in slip_open+0xef4\/0x1210 drivers\/net\/slip\/slip.c:806<br \/>\n  Read of size 1 at addr ffff8880712dac71 by task syz-executor.2\/6506<\/p>\n<p>  CPU: 2 PID: 6506 Comm: syz-executor.2 Not tainted 6.1.134-syzkaller-00260-g0c8fc3469765 #0<br \/>\n  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04\/01\/2014<br \/>\n  Call Trace:<br \/>\n   sl_sync drivers\/net\/slip\/slip.c:730 [inline]<br \/>\n   slip_open+0xef4\/0x1210 drivers\/net\/slip\/slip.c:806<br \/>\n   tty_ldisc_open+0xa2\/0x120 drivers\/tty\/tty_ldisc.c:433<br \/>\n   tty_set_ldisc+0x324\/0x720 drivers\/tty\/tty_ldisc.c:564<br \/>\n   tiocsetd drivers\/tty\/tty_io.c:2428 [inline]<br \/>\n   tty_ioctl+0x5f0\/0x1530 drivers\/tty\/tty_io.c:2712<\/p>\n<p>  Allocated by task 6502:<br \/>\n   alloc_netdev_mqs+0x98\/0xfe0 net\/core\/dev.c:10719<br \/>\n   sl_alloc drivers\/net\/slip\/slip.c:756 [inline]<br \/>\n   slip_open+0x36d\/0x1210 drivers\/net\/slip\/slip.c:817<br \/>\n   tty_ldisc_open+0xa2\/0x120 drivers\/tty\/tty_ldisc.c:433<br \/>\n   tty_set_ldisc+0x324\/0x720 drivers\/tty\/tty_ldisc.c:564<\/p>\n<p>  Freed by task 6497:<br \/>\n   device_release+0xa2\/0x240 drivers\/base\/core.c:2507<br \/>\n   kobject_put+0x179\/0x280 lib\/kobject.c:729<br \/>\n   netdev_run_todo+0x6c8\/0xef0 net\/core\/dev.c:10509<br \/>\n   slip_close+0x166\/0x1c0 drivers\/net\/slip\/slip.c:906<br \/>\n   tty_ldisc_close+0x113\/0x1a0 drivers\/tty\/tty_ldisc.c:456<br \/>\n   tty_ldisc_kill+0x94\/0x160 drivers\/tty\/tty_ldisc.c:614<br \/>\n   tty_ldisc_release+0xe3\/0x2b0 drivers\/tty\/tty_ldisc.c:782<br \/>\n   tty_release+0xbcc\/0xe70 drivers\/tty\/tty_io.c:1860<\/p>\n<p>Commit e58c19124189 (&#8220;slip: Fix use-after-free Read in slip_open&#8221;) fixed<br \/>\na different source of stale entries &#8211; a device left in slip_devs[] after<br \/>\nslip_open() freed it on the registration error path &#8211; and does not<br \/>\naddress this race, which is why the report survives it.<\/p>\n<p>Drop the entry from ndo_uninit instead.  unregister_netdevice() calls<br \/>\nndo_uninit under RTNL, before the device is queued to netdev_run_todo(),<br \/>\nso an entry that sl_sync() can still see while holding RTNL belongs to a<br \/>\ndevice that cannot be freed until RTNL is dropped.  sl_free_netdev()<br \/>\nstays only for the slip_open() error path, where register_netdevice()<br \/>\nmay have failed before ndo_init and ndo_uninit is then not called<br \/>\neither.  Both running for the same device is harmless: the<br \/>\n&#8212;truncated&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>slip: fix use-after-free in sl_sync()<\/p>\n<p>slip_devs[] stores bare net_device pointers and takes no reference on<br \/>\nthem.  sl_sync() and s<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21334","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}