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_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@594d2a14f2168c09b13b114c3d457aa939403e52",
"signature_type": "Function",
"target": {
"function": "load_elf_binary",
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-0b91d152",
"digest": {
"length": 7475.0,
"function_hash": "319340080918361459330090018233876614766"
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@265b6fb780f57d10449a40e94219b28fa52479cc",
"signature_type": "Function",
"target": {
"function": "load_elf_binary",
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-1aeede9c",
"digest": {
"length": 7487.0,
"function_hash": "146665288076753107369623902979825123253"
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@594d2a14f2168c09b13b114c3d457aa939403e52",
"signature_type": "Line",
"target": {
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-473ee8f5",
"digest": {
"line_hashes": [
"225826773352559401573241625501033547950",
"79557538034889213382342953271995975805",
"91006337941324544696750526667799761522",
"153612106750943142211362051287102499085",
"226688940631350216956109161022860137692",
"281797802091043952987006483091961777963",
"289958879242784823549518954580245654029",
"295057729182664995923550446368208068015"
],
"threshold": 0.9
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@265b6fb780f57d10449a40e94219b28fa52479cc",
"signature_type": "Line",
"target": {
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-4e1e09d7",
"digest": {
"line_hashes": [
"225826773352559401573241625501033547950",
"79557538034889213382342953271995975805",
"91006337941324544696750526667799761522",
"153612106750943142211362051287102499085",
"226688940631350216956109161022860137692",
"281797802091043952987006483091961777963",
"289958879242784823549518954580245654029",
"295057729182664995923550446368208068015"
],
"threshold": 0.9
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@706215300411d48db6b51a5832b872632a84bbc1",
"signature_type": "Function",
"target": {
"function": "load_elf_binary",
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-6c1c7930",
"digest": {
"length": 7508.0,
"function_hash": "230918035303510750387694522006614622996"
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@acd9b4914f1c5928c7ae8ebc623d6291eb1a573a",
"signature_type": "Line",
"target": {
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-90869ec2",
"digest": {
"line_hashes": [
"225826773352559401573241625501033547950",
"79557538034889213382342953271995975805",
"91006337941324544696750526667799761522",
"153612106750943142211362051287102499085",
"226688940631350216956109161022860137692",
"281797802091043952987006483091961777963",
"289958879242784823549518954580245654029",
"295057729182664995923550446368208068015"
],
"threshold": 0.9
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@706215300411d48db6b51a5832b872632a84bbc1",
"signature_type": "Line",
"target": {
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-a2505bfc",
"digest": {
"line_hashes": [
"225826773352559401573241625501033547950",
"79557538034889213382342953271995975805",
"91006337941324544696750526667799761522",
"153612106750943142211362051287102499085",
"226688940631350216956109161022860137692",
"281797802091043952987006483091961777963",
"289958879242784823549518954580245654029",
"295057729182664995923550446368208068015"
],
"threshold": 0.9
},
"deprecated": false
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@acd9b4914f1c5928c7ae8ebc623d6291eb1a573a",
"signature_type": "Function",
"target": {
"function": "load_elf_binary",
"file": "fs/binfmt_elf.c"
},
"id": "CVE-2022-50466-dde00508",
"digest": {
"length": 7475.0,
"function_hash": "319340080918361459330090018233876614766"
},
"deprecated": false
}
]