Description
In the Linux kernel, the following vulnerability has been resolved: rds: tcp: unregister sysctl before tearing down listen socket rds_tcp_exit_net() frees the per-netns RDS TCP listen socket via rds_tcp_kill_sock() before unregistering the per-netns sysctl table. Since rds_tcp_skbuf_handler() derives the netns from rtn->rds_tcp_listen_sock->sk, a concurrent sysctl write can race with netns teardown and dereference the freed socket/sk. KASAN reports the race as: BUG: KASAN: slab-use-after-free in rds_tcp_skbuf_handler+0x2aa/0x2e0 rds_tcp_skbuf_handler net/rds/tcp.c:721 proc_sys_call_handler fs/proc/proc_sysctl.c vfs_write fs/read_write.c __x64_sys_pwrite64 fs/read_write.c Fix this by unregistering the RDS TCP sysctl table before calling rds_tcp_kill_sock(). unregister_net_sysctl_table() prevents new sysctl handlers from starting and waits for in-flight handlers to finish, so the listen socket can then be released safely. The fix was tested against the linked reproducer.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
de8d6de0ee27be4b2b1e5b06f04aeacbabbba492 to < 80fffed08dc1c10e971066941d2daa56253f1552affected7f5611cbc4871c7fb1ad36c2e5a9edad63dca95c to < 16df2d154ec82e2f7e7585b4fa154751ba37729aaffected7f5611cbc4871c7fb1ad36c2e5a9edad63dca95c to < 3aa13fe0c1bb7bc5312f878e61523e5d8cf3f85daffected7f5611cbc4871c7fb1ad36c2e5a9edad63dca95c to < 167e54c703ccd4fa028feb568b0d1002020cff86affected33b3e09a489a31b30342b77cc55290f025d95c7eaffected6.12.10 to < 6.12.101affected6.6.160 to < 6.7affected
Linux Linux
Default version status: affected
6.13affected0 to < 6.13unaffected6.12.101 to ≤ 6.12.*unaffected6.18.42 to ≤ 6.18.*unaffected7.1.6 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected