Hailong.Liu
198a80833e
mm/vmalloc: fix vmalloc which may return null if called with __GFP_NOFAIL
...
[ Upstream commit 8e0545c83d672750632f46e3f9ad95c48c91a0fc ]
commit a421ef303008 ("mm: allow !GFP_KERNEL allocations for kvmalloc")
includes support for __GFP_NOFAIL, but it presents a conflict with commit
dd544141b9eb ("vmalloc: back off when the current task is OOM-killed"). A
possible scenario is as follows:
process-a
__vmalloc_node_range(GFP_KERNEL | __GFP_NOFAIL)
__vmalloc_area_node()
vm_area_alloc_pages()
--> oom-killer send SIGKILL to process-a
if (fatal_signal_pending(current)) break;
--> return NULL;
To fix this, do not check fatal_signal_pending() in vm_area_alloc_pages()
if __GFP_NOFAIL set.
This issue occurred during OPLUS KASAN TEST. Below is part of the log
-> oom-killer sends signal to process
[65731.222840] [ T1308] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/apps/uid_10198,task=gs.intelligence,pid=32454,uid=10198
[65731.259685] [T32454] Call trace:
[65731.259698] [T32454] dump_backtrace+0xf4/0x118
[65731.259734] [T32454] show_stack+0x18/0x24
[65731.259756] [T32454] dump_stack_lvl+0x60/0x7c
[65731.259781] [T32454] dump_stack+0x18/0x38
[65731.259800] [T32454] mrdump_common_die+0x250/0x39c [mrdump]
[65731.259936] [T32454] ipanic_die+0x20/0x34 [mrdump]
[65731.260019] [T32454] atomic_notifier_call_chain+0xb4/0xfc
[65731.260047] [T32454] notify_die+0x114/0x198
[65731.260073] [T32454] die+0xf4/0x5b4
[65731.260098] [T32454] die_kernel_fault+0x80/0x98
[65731.260124] [T32454] __do_kernel_fault+0x160/0x2a8
[65731.260146] [T32454] do_bad_area+0x68/0x148
[65731.260174] [T32454] do_mem_abort+0x151c/0x1b34
[65731.260204] [T32454] el1_abort+0x3c/0x5c
[65731.260227] [T32454] el1h_64_sync_handler+0x54/0x90
[65731.260248] [T32454] el1h_64_sync+0x68/0x6c
[65731.260269] [T32454] z_erofs_decompress_queue+0x7f0/0x2258
--> be->decompressed_pages = kvcalloc(be->nr_pages, sizeof(struct page *), GFP_KERNEL | __GFP_NOFAIL);
kernel panic by NULL pointer dereference.
erofs assume kvmalloc with __GFP_NOFAIL never return NULL.
[65731.260293] [T32454] z_erofs_runqueue+0xf30/0x104c
[65731.260314] [T32454] z_erofs_readahead+0x4f0/0x968
[65731.260339] [T32454] read_pages+0x170/0xadc
[65731.260364] [T32454] page_cache_ra_unbounded+0x874/0xf30
[65731.260388] [T32454] page_cache_ra_order+0x24c/0x714
[65731.260411] [T32454] filemap_fault+0xbf0/0x1a74
[65731.260437] [T32454] __do_fault+0xd0/0x33c
[65731.260462] [T32454] handle_mm_fault+0xf74/0x3fe0
[65731.260486] [T32454] do_mem_abort+0x54c/0x1b34
[65731.260509] [T32454] el0_da+0x44/0x94
[65731.260531] [T32454] el0t_64_sync_handler+0x98/0xb4
[65731.260553] [T32454] el0t_64_sync+0x198/0x19c
Link: https://lkml.kernel.org/r/20240510100131.1865-1-hailong.liu@oppo.com
Fixes: 9376130c390a ("mm/vmalloc: add support for __GFP_NOFAIL")
Signed-off-by: Hailong.Liu <hailong.liu@oppo.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Suggested-by: Barry Song <21cnbao@gmail.com>
Reported-by: Oven <liyangouwen1@oppo.com>
Reviewed-by: Barry Song <baohua@kernel.org>
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Cc: Chao Yu <chao@kernel.org>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Gao Xiang <xiang@kernel.org>
Cc: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-21 14:35:41 +02:00
..
2024-03-01 13:26:39 +01:00
2024-04-03 15:19:27 +02:00
2023-12-03 07:32:08 +01:00
2024-06-16 13:41:38 +02:00
2023-04-26 14:28:39 +02:00
2022-08-02 12:34:03 -04:00
2022-08-28 14:02:45 -07:00
2022-09-11 20:25:50 -07:00
2024-06-16 13:41:39 +02:00
2022-03-22 15:57:09 -07:00
2024-04-03 15:19:42 +02:00
2022-06-27 12:52:53 -07:00
2022-09-26 19:46:26 -07:00
2022-03-22 15:57:11 -07:00
2022-04-26 13:36:25 -07:00
2022-11-22 18:50:44 -08:00
2024-01-10 17:10:31 +01:00
2022-10-03 14:02:53 -07:00
2022-09-26 12:14:34 -07:00
2022-07-17 17:14:27 -07:00
2023-07-01 13:16:25 +02:00
2022-10-12 18:51:51 -07:00
2022-09-26 19:46:05 -07:00
2024-06-16 13:41:38 +02:00
2024-05-17 11:55:52 +02:00
2023-09-19 12:27:56 +02:00
2022-08-08 18:06:43 -07:00
2024-06-16 13:41:39 +02:00
2022-10-03 14:03:05 -07:00
2022-09-26 19:46:16 -07:00
2024-01-10 17:10:31 +01:00
2022-06-27 12:22:31 +01:00
2023-07-01 13:16:24 +02:00
2023-06-14 11:15:29 +02:00
2024-01-10 17:10:31 +01:00
2022-10-28 13:37:22 -07:00
2023-03-30 12:49:29 +02:00
2022-06-16 19:48:31 -07:00
2023-06-28 11:12:17 +02:00
2023-08-30 16:11:11 +02:00
2022-10-03 14:03:36 -07:00
2024-03-01 13:26:36 +01:00
2024-03-01 13:26:32 +01:00
2023-06-28 11:12:27 +02:00
2024-01-10 17:10:33 +01:00
2024-04-27 17:07:16 +02:00
2023-03-10 09:34:27 +01:00
2024-04-10 16:28:33 +02:00
2023-11-08 14:11:02 +01:00
2022-06-16 19:48:30 -07:00
2022-11-08 15:57:23 -08:00
2024-04-03 15:19:36 +02:00
2022-11-22 18:50:43 -08:00
2024-05-17 11:55:52 +02:00
2023-03-22 13:34:03 +01:00
2022-09-26 19:46:27 -07:00
2022-09-26 19:46:09 -07:00
2022-10-03 14:02:43 -07:00
2023-11-08 14:11:03 +01:00
2022-11-30 14:49:42 -08:00
2022-04-21 20:01:10 -07:00
2022-09-26 19:46:09 -07:00
2022-10-12 15:56:46 -07:00
2023-02-09 11:28:22 +01:00
2022-09-26 19:46:25 -07:00
2023-07-05 18:27:37 +01:00
2022-09-26 19:46:29 -07:00
2024-04-03 15:19:42 +02:00
2022-09-11 20:26:01 -07:00
2022-11-22 18:50:41 -08:00
2022-05-19 14:08:54 -07:00
2023-02-09 11:28:04 +01:00
2022-10-28 13:37:22 -07:00
2022-10-03 14:03:03 -07:00
2023-06-14 11:15:29 +02:00
2022-09-26 19:46:05 -07:00
2024-02-23 09:12:32 +01:00
2022-10-10 17:53:04 -07:00
2022-05-13 07:20:18 -07:00
2022-03-08 09:30:46 -05:00
2022-07-17 17:14:47 -07:00
2024-06-16 13:41:38 +02:00
2023-02-09 11:28:04 +01:00
2022-09-03 10:13:13 -07:00
2024-05-17 11:56:21 +02:00
2023-03-10 09:34:25 +01:00
2022-10-03 14:03:05 -07:00
2022-10-03 14:03:36 -07:00
2023-12-20 17:00:26 +01:00
2023-02-22 12:59:46 +01:00
2022-10-03 14:03:07 -07:00
2023-10-06 14:57:03 +02:00
2023-03-30 12:49:23 +02:00
2022-10-10 17:53:04 -07:00
2022-09-29 11:30:55 +02:00
2022-10-11 17:42:55 -06:00
2022-08-08 18:06:42 -07:00
2024-01-31 16:17:02 -08:00
2022-10-03 14:03:36 -07:00
2022-10-03 14:02:46 -07:00
2022-10-03 14:02:51 -07:00
2022-10-03 14:02:45 -07:00
2024-03-01 13:26:32 +01:00
2024-04-03 15:19:32 +02:00
2024-01-10 17:10:31 +01:00
2023-06-28 11:12:17 +02:00
2024-02-23 09:12:51 +01:00
2023-09-13 09:42:59 +02:00
2024-06-21 14:35:41 +02:00
2023-09-13 09:42:33 +02:00
2024-04-03 15:19:42 +02:00
2022-10-10 17:53:04 -07:00
2023-12-20 17:00:26 +01:00
2022-08-02 12:34:03 -04:00
2023-08-23 17:52:40 +02:00
2024-03-01 13:26:39 +01:00