CVE-2021-47238 in Linux
要約
〜によって VulDB • 2026年06月19日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
net: ipv4: ip_mc_add1_srcにおけるメモリリークの修正
BUG: メモリリーク 未参照オブジェクト 0xffff888101bc4c00 (サイズ 32): comm "syz-executor527", pid 360, jiffies 4294807421 (経過時間 19.329秒) hex dump (最初の32バイト): 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
コミット 24803f38a5c0 ("igmp: do not remove igmp souce list info when set link down") において、ip_mc_destroy_dev() 内の ip_mc_clear_src() が削除されました。これは、igmpv3_clear_delrec() 内でも呼び出されていたためです。
大まかなコールグラフ:
inetdev_destroy -> ip_mc_destroy_dev -> igmpv3_clear_delrec -> ip_mc_clear_src -> RCU_INIT_POINTER(dev->ip_ptr, NULL)
しかし、igmpv3_clear_delrec() 内で呼び出される ip_mc_clear_src() は、in_dev->mc_list->sources を解放しません。また、RCU_INIT_POINTER() は dev->ip_ptr に NULL を割り当てます。その結果、inetdev_by_index() を通じて in_dev を取得できなくなり、sock_close 時の ip_mc_del1_src() によって in_dev->mc_list->sources を解放できなくなります。大まかなシーケンスは以下の通りです。
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
したがって、in_dev->mc_list->sources を解放するために、ip_mc_destroy_dev() 内で ip_mc_clear_src() を呼び出す必要があります。
If you want to get best quality of vulnerability data, you may have to visit VulDB.