Commit d494449
bpf: Fix memory leaks in __check_func_call
[ Upstream commit eb86559 ]
kmemleak reports this issue:
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:
[<0000000045f075f0>] kmalloc_trace+0x27/0xa0
[<0000000098b7c90a>] __check_func_call+0x316/0x1230
[<00000000b4c3c403>] check_helper_call+0x172e/0x4700
[<00000000aa3875b7>] do_check+0x21d8/0x45e0
[<000000001147357b>] do_check_common+0x767/0xaf0
[<00000000b5a595b4>] bpf_check+0x43e3/0x5bc0
[<0000000011e391b1>] bpf_prog_load+0xf26/0x1940
[<0000000007f765c0>] __sys_bpf+0xd2c/0x3650
[<00000000839815d6>] __x64_sys_bpf+0x75/0xc0
[<00000000946ee250>] do_syscall_64+0x3b/0x90
[<0000000000506b7f>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
The root case here is: In function prepare_func_exit(), the callee is
not released in the abnormal scenario after "state->curframe--;". To
fix, move "state->curframe--;" to the very bottom of the function,
right when we free callee and reset frame[] pointer to NULL, as Andrii
suggested.
In addition, function __check_func_call() has a similar problem. In
the abnormal scenario before "state->curframe++;", the callee also
should be released by free_func_state().
Fixes: 69c087b ("bpf: Add bpf_for_each_map_elem() helper")
Fixes: fd978bf ("bpf: Add reference tracking to verifier")
Signed-off-by: Wang Yufen <wangyufen@huawei.com>
Link: https://lore.kernel.org/r/1667884291-15666-1-git-send-email-wangyufen@huawei.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>1 parent 25521fd commit d494449
1 file changed
Lines changed: 9 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5808 | 5808 | | |
5809 | 5809 | | |
5810 | 5810 | | |
5811 | | - | |
| 5811 | + | |
5812 | 5812 | | |
5813 | 5813 | | |
5814 | 5814 | | |
5815 | | - | |
| 5815 | + | |
5816 | 5816 | | |
5817 | 5817 | | |
5818 | 5818 | | |
| |||
5829 | 5829 | | |
5830 | 5830 | | |
5831 | 5831 | | |
| 5832 | + | |
| 5833 | + | |
| 5834 | + | |
| 5835 | + | |
| 5836 | + | |
5832 | 5837 | | |
5833 | 5838 | | |
5834 | 5839 | | |
| |||
5966 | 5971 | | |
5967 | 5972 | | |
5968 | 5973 | | |
5969 | | - | |
5970 | | - | |
| 5974 | + | |
5971 | 5975 | | |
5972 | 5976 | | |
5973 | 5977 | | |
| |||
6006 | 6010 | | |
6007 | 6011 | | |
6008 | 6012 | | |
6009 | | - | |
| 6013 | + | |
6010 | 6014 | | |
6011 | 6015 | | |
6012 | 6016 | | |
| |||
0 commit comments