CVE-2022-49837 in Linux
要約
〜によって VulDB • 2026年06月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
bpf: `__check_func_call` におけるメモリリークの修正
kmemleak がこの問題を報告しています:
unreferenced object 0xffff88817139d000 (size 2048): comm "test_progs", pid 33246, jiffies 4307381979 (age 45851.820s) hex dump (first 32 bytes): 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [] kmalloc_trace+0x27/0xa0
[] __check_func_call+0x316/0x1230
[] check_helper_call+0x172e/0x4700
[] do_check+0x21d8/0x45e0
[] do_check_common+0x767/0xaf0
[] bpf_check+0x43e3/0x5bc0
[] bpf_prog_load+0xf26/0x1940
[] __sys_bpf+0xd2c/0x3650
[] __x64_sys_bpf+0x75/0xc0
[] do_syscall_64+0x3b/0x90
[] entry_SYSCALL_64_after_hwframe+0x63/0xcd
根本原因は以下の通りです。`prepare_func_exit()` 関数において、異常なシナリオ発生時に `state->curframe--;` の実行後にも呼び出し先(callee)が解放されていません。修正として、Andrii が提案したように、`state->curframe--;` を関数の最下部に移動し、ここで呼び出し先の解放と frame[] ポインタの NULL リセットを行います。
さらに、`__check_func_call()` 関数にも同様の問題があります。異常なシナリオにおいて `state->curframe++;` の実行前においても、呼び出し先は `free_func_state()` によって解放される必要があります。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.