In the Linux kernel, the following vulnerability has been resolved:
fs/binfmtelf: Fix memory leak in loadelf_binary()
There is a memory leak reported by kmemleak:
unreferenced object 0xffff88817104ef80 (size 224): comm "xfsadmin", pid 47165, jiffies 4298708825 (age 1333.476s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 60 a8 b3 00 81 88 ff ff a8 10 5a 00 81 88 ff ff `.........Z..... backtrace: [<ffffffff819171e1>] _allocfile+0x21/0x250 [<ffffffff81918061>] allocemptyfile+0x41/0xf0 [<ffffffff81948cda>] pathopenat+0xea/0x3d30 [<ffffffff8194ec89>] dofilpopen+0x1b9/0x290 [<ffffffff8192660e>] doopenexecat+0xce/0x5b0 [<ffffffff81926b17>] openexec+0x27/0x50 [<ffffffff81a69250>] loadelfbinary+0x510/0x3ed0 [<ffffffff81927759>] bprmexecve+0x599/0x1240 [<ffffffff8192a997>] doexecveatcommon.isra.0+0x4c7/0x680 [<ffffffff8192b078>] _x64sysexecve+0x88/0xb0 [<ffffffff83bbf0a5>] dosyscall_64+0x35/0x80
If "interpelfex" fails to allocate memory in loadelfbinary(), the program will take the "outfreeph" error handing path, resulting in "interpreter" file resource is not released.
Fix it by adding an error handing path "outfreefile", which will release the file resource when "interpelfex" failed to allocate memory.
[ { "signature_type": "Line", "target": { "file": "fs/binfmt_elf.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "225826773352559401573241625501033547950", "79557538034889213382342953271995975805", "91006337941324544696750526667799761522", "153612106750943142211362051287102499085", "226688940631350216956109161022860137692", "281797802091043952987006483091961777963", "289958879242784823549518954580245654029", "295057729182664995923550446368208068015" ] }, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@acd9b4914f1c5928c7ae8ebc623d6291eb1a573a", "signature_version": "v1", "id": "CVE-2022-50466-90869ec2" }, { "signature_type": "Function", "target": { "function": "load_elf_binary", "file": "fs/binfmt_elf.c" }, "deprecated": false, "digest": { "function_hash": "319340080918361459330090018233876614766", "length": 7475.0 }, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@acd9b4914f1c5928c7ae8ebc623d6291eb1a573a", "signature_version": "v1", "id": "CVE-2022-50466-dde00508" } ]