CVE-2021-47238 in Linux
Zusammenfassung
von VulDB • 16.06.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net: ipv4: Behebung eines Speicherlecks in ip_mc_add1_src
FEHLER: Speicherleck nicht referenziertes Objekt 0xffff888101bc4c00 (Größe 32): comm "syz-executor527", pid 360, jiffies 4294807421 (Alter 19,329 s) Hex-Dump (erste 32 Bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01 00 00 00 00 00 00 00 ac 14 14 bb 00 00 02 00 ................ Backtrace: [] kmalloc include/linux/slab.h:558 [inline]
[] kzalloc include/linux/slab.h:688 [inline]
[] ip_mc_add1_src net/ipv4/igmp.c:1971 [inline]
[] ip_mc_add_src+0x95f/0xdb0 net/ipv4/igmp.c:2095
[] ip_mc_source+0x84c/0xea0 net/ipv4/igmp.c:2416
[] do_ip_setsockopt net/ipv4/ip_sockglue.c:1294 [inline]
[] ip_setsockopt+0x114b/0x30c0 net/ipv4/ip_sockglue.c:1423
[] raw_setsockopt+0x13d/0x170 net/ipv4/raw.c:857
[] __sys_setsockopt+0x158/0x270 net/socket.c:2117
[] __do_sys_setsockopt net/socket.c:2128 [inline]
[] __se_sys_setsockopt net/socket.c:2125 [inline]
[] __x64_sys_setsockopt+0xba/0x150 net/socket.c:2125
[] do_syscall_64+0x40/0x80 arch/x86/entry/common.c:47
[] entry_SYSCALL_64_after_hwframe+0x44/0xae
Im Commit 24803f38a5c0 („igmp: igmp source list info nicht entfernen, wenn Link heruntergefahren wird") wurde der Aufruf von ip_mc_clear_src() in ip_mc_destroy_dev() entfernt, da er auch in igmpv3_clear_delrec() aufgerufen wurde.
Grobe Aufrufkette:
inetdev_destroy -> ip_mc_destroy_dev -> igmpv3_clear_delrec -> ip_mc_clear_src -> RCU_INIT_POINTER(dev->ip_ptr, NULL)
Allerdings gibt ip_mc_clear_src(), das in igmpv3_clear_delrec() aufgerufen wird, in_dev->mc_list->sources nicht frei. Und RCU_INIT_POINTER() weist dev->ip_ptr den Wert NULL zu. Infolgedessen kann in_dev nicht über inetdev_by_index() abgerufen werden, und in_dev->mc_list->sources kann in sock_close nicht durch ip_mc_del1_src() freigegeben werden. Die grobe Aufrufsequenz sieht wie folgt aus:
sock_close -> __sock_release -> inet_release -> ip_mc_drop_socket -> inetdev_by_index -> ip_mc_leave_src -> ip_mc_del_src -> ip_mc_del1_src
Daher müssen wir ip_mc_clear_src() weiterhin in ip_mc_destroy_dev() aufrufen, um in_dev->mc_list->sources freizugeben.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.