В ядре Linux устранена следующая уязвимость: l2tp: исправлена утечка памяти в l2tp_udp_encap_recv(). syzbot сообщил об утечке памяти структур l2tp_session, l2tp_tunnel, носок и т. д. [0] Цитируемый коммит отменил проверку протокола. версия в l2tp_udp_encap_recv(). Новое место требует дополнительной обработки ошибок, чтобы избежать утечка памяти. Давайте вызовем там l2tp_session_put(). [0]: ОШИБКА: утечка памяти. объект без ссылки 0xffff88810a290200 (размер 512): comm "syz.0.17", pid 6086, jiffies 4294944299 шестнадцатеричный дамп (первые 32 байта): 7д еб 04 0c 00 00 00 00 01 00 00 00 00 00 00 00 }........... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .............. обратная трассировка (crc babb6a4f): kmemleak_alloc_recursive include/linux/kmemleak.h:44 [встроенный] slab_post_alloc_hook мм/slub.c:4958 [встроенный] slab_alloc_node мм/slub.c:5263 [встроенный] __do_kmalloc_node мм/slub.c:5656 [встроенный] __kmalloc_noprof+0x3e0/0x660 мм/slub.c:5669 kmalloc_noprof include/linux/slab.h:961 [встроенный] kzalloc_noprof include/linux/slab.h:1094 [встроенный] l2tp_session_create+0x3a/0x3b0 net/l2tp/l2tp_core.c:1778 pppol2tp_connect+0x48b/0x920 net/l2tp/l2tp_ppp.c:755 __sys_connect_file+0x7a/0xb0 net/socket.c:2089 __sys_connect+0xde/0x110 net/socket.c:2108 __do_sys_connect net/socket.c:2114 [встроенный] __se_sys_connect net/socket.c:2111 [встроенный] __x64_sys_connect+0x1c/0x30 net/socket.c:2111 do_syscall_x64 Arch/x86/entry/syscall_64.c:63 [встроенный] do_syscall_64+0xa4/0xf80 Arch/x86/entry/syscall_64.c:94 запись_SYSCALL_64_after_hwframe+0x77/0x7f
Показать оригинальное описание (английский)
In the Linux kernel, the following vulnerability has been resolved: l2tp: Fix memleak in l2tp_udp_encap_recv(). syzbot reported memleak of struct l2tp_session, l2tp_tunnel, sock, etc. [0] The cited commit moved down the validation of the protocol version in l2tp_udp_encap_recv(). The new place requires an extra error handling to avoid the memleak. Let's call l2tp_session_put() there. [0]: BUG: memory leak unreferenced object 0xffff88810a290200 (size 512): comm "syz.0.17", pid 6086, jiffies 4294944299 hex dump (first 32 bytes): 7d eb 04 0c 00 00 00 00 01 00 00 00 00 00 00 00 }............... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace (crc babb6a4f): kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline] slab_post_alloc_hook mm/slub.c:4958 [inline] slab_alloc_node mm/slub.c:5263 [inline] __do_kmalloc_node mm/slub.c:5656 [inline] __kmalloc_noprof+0x3e0/0x660 mm/slub.c:5669 kmalloc_noprof include/linux/slab.h:961 [inline] kzalloc_noprof include/linux/slab.h:1094 [inline] l2tp_session_create+0x3a/0x3b0 net/l2tp/l2tp_core.c:1778 pppol2tp_connect+0x48b/0x920 net/l2tp/l2tp_ppp.c:755 __sys_connect_file+0x7a/0xb0 net/socket.c:2089 __sys_connect+0xde/0x110 net/socket.c:2108 __do_sys_connect net/socket.c:2114 [inline] __se_sys_connect net/socket.c:2111 [inline] __x64_sys_connect+0x1c/0x30 net/socket.c:2111 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xa4/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f