Li Zetao
7062153004
fs/binfmt_elf: Fix memory leak in load_elf_binary()
...
commit 594d2a14f2168c09b13b114c3d457aa939403e52 upstream.
There is a memory leak reported by kmemleak:
unreferenced object 0xffff88817104ef80 (size 224):
comm "xfs_admin", 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>] __alloc_file+0x21/0x250
[<ffffffff81918061>] alloc_empty_file+0x41/0xf0
[<ffffffff81948cda>] path_openat+0xea/0x3d30
[<ffffffff8194ec89>] do_filp_open+0x1b9/0x290
[<ffffffff8192660e>] do_open_execat+0xce/0x5b0
[<ffffffff81926b17>] open_exec+0x27/0x50
[<ffffffff81a69250>] load_elf_binary+0x510/0x3ed0
[<ffffffff81927759>] bprm_execve+0x599/0x1240
[<ffffffff8192a997>] do_execveat_common.isra.0+0x4c7/0x680
[<ffffffff8192b078>] __x64_sys_execve+0x88/0xb0
[<ffffffff83bbf0a5>] do_syscall_64+0x35/0x80
If "interp_elf_ex" fails to allocate memory in load_elf_binary(),
the program will take the "out_free_ph" error handing path,
resulting in "interpreter" file resource is not released.
Fix it by adding an error handing path "out_free_file", which will
release the file resource when "interp_elf_ex" failed to allocate
memory.
Fixes: 0693ffebcfe5 ("fs/binfmt_elf.c: allocate less for static executable")
Signed-off-by: Li Zetao <lizetao1@huawei.com>
Reviewed-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20221024154421.982230-1-lizetao1@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-11-03 23:57:49 +09:00
..
2022-06-22 14:13:12 +02:00
2020-10-24 12:26:05 -07:00
2021-03-04 11:38:37 +01:00
2022-09-23 14:17:00 +02:00
2020-10-16 11:11:22 -07:00
2020-09-18 16:45:50 -04:00
2021-01-06 14:56:52 +01:00
2022-10-30 09:41:16 +01:00
2021-03-30 14:32:07 +02:00
2022-10-15 07:55:50 +02:00
2022-10-30 09:41:17 +01:00
2022-03-02 11:42:52 +01:00
2020-09-18 16:45:50 -04:00
2021-11-18 14:03:54 +01:00
2022-09-15 11:32:03 +02:00
2022-02-01 17:25:39 +01:00
2022-10-26 13:25:08 +02:00
2021-05-26 12:06:55 +02:00
2020-11-25 16:55:02 +01:00
2020-09-18 16:45:50 -04:00
2022-08-21 15:15:35 +02:00
2022-06-06 08:42:42 +02:00
2022-08-21 15:15:28 +02:00
2022-10-26 13:25:56 +02:00
2022-10-26 13:25:56 +02:00
2022-06-09 10:20:58 +02:00
2021-09-18 13:40:15 +02:00
2022-08-21 15:16:10 +02:00
2022-06-09 10:20:57 +02:00
2021-07-31 08:16:12 +02:00
2021-05-19 10:13:10 +02:00
2021-04-14 08:42:06 +02:00
2020-09-18 16:45:50 -04:00
2022-04-27 13:53:54 +02:00
2022-07-07 17:52:19 +02:00
2021-11-12 14:58:33 +01:00
2022-10-26 13:25:13 +02:00
2022-06-14 18:32:35 +02:00
2022-06-09 10:20:57 +02:00
2022-06-14 18:32:43 +02:00
2021-09-18 13:40:30 +02:00
2022-04-13 21:01:01 +02:00
2022-09-23 14:16:57 +02:00
2020-12-30 11:53:45 +01:00
2022-10-26 13:25:45 +02:00
2022-10-15 07:55:50 +02:00
2022-06-09 10:21:03 +02:00
2022-10-05 10:38:39 +02:00
2022-10-30 09:41:15 +01:00
2020-09-22 23:39:45 -04:00
2022-01-20 09:17:50 +01:00
2022-08-21 15:15:23 +02:00
2022-10-30 09:41:19 +01:00
2022-04-08 14:39:56 +02:00
2021-09-30 10:11:08 +02:00
2020-09-18 16:45:50 -04:00
2022-10-26 13:25:09 +02:00
2020-10-16 11:11:22 -07:00
2021-08-12 13:22:19 +02:00
2020-10-24 12:26:05 -07:00
2021-05-19 10:13:10 +02:00
2020-10-02 12:02:30 +02:00
2020-09-18 16:45:50 -04:00
2022-09-20 12:38:31 +02:00
2022-04-13 21:00:53 +02:00
2022-02-01 17:25:39 +01:00
2020-10-24 12:26:05 -07:00
2021-10-17 10:43:33 +02:00
2021-10-06 15:55:46 +02:00
2022-09-28 11:10:29 +02:00
2022-06-25 15:16:08 +02:00
2021-12-14 11:32:40 +01:00
2022-08-21 15:15:22 +02:00
2022-04-08 14:40:44 +02:00
2022-11-03 23:57:49 +09:00
2022-06-09 10:20:47 +02:00
2021-03-17 17:06:35 +01:00
2021-06-03 09:00:45 +02:00
2020-10-18 09:27:09 -07:00
2022-04-08 14:40:45 +02:00
2020-10-14 14:54:45 -07:00
2022-06-09 10:21:16 +02:00
2021-04-14 08:41:58 +02:00
2022-08-21 15:15:28 +02:00
2022-08-21 15:16:14 +02:00
2022-10-30 09:41:18 +01:00
2022-05-18 10:23:48 +02:00
2022-04-08 14:40:30 +02:00
2022-02-08 18:30:36 +01:00
2020-10-13 18:38:27 -07:00
2022-06-09 10:21:22 +02:00
2022-10-15 07:55:51 +02:00
2021-07-31 08:16:11 +02:00
2022-10-26 13:25:55 +02:00
2021-09-18 13:40:06 +02:00
2021-02-13 13:54:56 +01:00
2022-05-25 09:17:54 +02:00
2021-02-17 11:02:21 +01:00
2021-10-27 09:56:51 +02:00
2020-11-22 10:48:22 -08:00
2021-03-20 10:43:44 +01:00
2020-10-23 11:33:41 -07:00
2022-08-21 15:16:15 +02:00
2021-08-26 08:35:57 -04:00
2021-07-14 16:55:59 +02:00
2022-06-06 08:42:41 +02:00
2021-03-17 17:06:13 +01:00
2020-12-30 11:54:02 +01:00
2020-10-23 11:33:41 -07:00
2021-04-21 13:00:54 +02:00
2022-07-21 21:20:01 +02:00
2022-01-29 10:26:11 +01:00
2021-07-20 16:05:59 +02:00
2022-09-05 10:28:58 +02:00
2022-10-17 17:26:07 +02:00
2022-04-27 13:53:54 +02:00
2022-02-23 12:00:59 +01:00
2022-08-31 17:15:14 +02:00
2022-10-26 13:25:17 +02:00
2020-10-13 18:38:27 -07:00