Steven Rostedt (Google)
ff2f35f5cd
tracing: Inform kmemleak of saved_cmdlines allocation
commit 2394ac4145ea91b92271e675a09af2a9ea6840b7 upstream.
The allocation of the struct saved_cmdlines_buffer structure changed from:
s = kmalloc(sizeof(*s), GFP_KERNEL);
s->saved_cmdlines = kmalloc_array(TASK_COMM_LEN, val, GFP_KERNEL);
to:
orig_size = sizeof(*s) + val * TASK_COMM_LEN;
order = get_order(orig_size);
size = 1 << (order + PAGE_SHIFT);
page = alloc_pages(GFP_KERNEL, order);
if (!page)
return NULL;
s = page_address(page);
memset(s, 0, sizeof(*s));
s->saved_cmdlines = kmalloc_array(TASK_COMM_LEN, val, GFP_KERNEL);
Where that s->saved_cmdlines allocation looks to be a dangling allocation
to kmemleak. That's because kmemleak only keeps track of kmalloc()
allocations. For allocations that use page_alloc() directly, the kmemleak
needs to be explicitly informed about it.
Add kmemleak_alloc() and kmemleak_free() around the page allocation so
that it doesn't give the following false positive:
unreferenced object 0xffff8881010c8000 (size 32760):
comm "swapper", pid 0, jiffies 4294667296
hex dump (first 32 bytes):
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
backtrace (crc ae6ec1b9):
[<ffffffff86722405>] kmemleak_alloc+0x45/0x80
[<ffffffff8414028d>] __kmalloc_large_node+0x10d/0x190
[<ffffffff84146ab1>] __kmalloc+0x3b1/0x4c0
[<ffffffff83ed7103>] allocate_cmdlines_buffer+0x113/0x230
[<ffffffff88649c34>] tracer_alloc_buffers.isra.0+0x124/0x460
[<ffffffff8864a174>] early_trace_init+0x14/0xa0
[<ffffffff885dd5ae>] start_kernel+0x12e/0x3c0
[<ffffffff885f5758>] x86_64_start_reservations+0x18/0x30
[<ffffffff885f582b>] x86_64_start_kernel+0x7b/0x80
[<ffffffff83a001c3>] secondary_startup_64_no_verify+0x15e/0x16b
Link: https://lore.kernel.org/linux-trace-kernel/87r0hfnr9r.fsf@kernel.org/
Link: https://lore.kernel.org/linux-trace-kernel/20240214112046.09a322d6@gandalf.local.home
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Fixes: 44dc5c41b5b1 ("tracing: Fix wasted memory in saved_cmdlines logic")
Reported-by: Kalle Valo <kvalo@kernel.org>
Tested-by: Kalle Valo <kvalo@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-23 08:55:10 +01:00
..
2024-02-23 08:54:42 +01:00
2023-10-19 23:05:37 +02:00
2021-05-07 00:26:34 -07:00
2024-01-25 14:52:54 -08:00
2024-01-25 14:52:38 -08:00
2023-03-30 12:47:51 +02:00
2024-02-23 08:54:52 +01:00
2023-11-20 11:08:13 +01:00
2022-12-31 13:14:47 +01:00
2023-11-28 16:56:30 +00:00
2023-07-23 13:47:12 +02:00
2023-11-20 11:08:25 +01:00
2023-12-03 07:31:23 +01:00
2024-02-23 08:54:23 +01:00
2023-09-23 11:09:59 +02:00
2023-12-08 08:48:02 +01:00
2023-11-20 11:08:13 +01:00
2024-02-23 08:55:01 +01:00
2024-02-23 08:55:10 +01:00
2021-05-02 00:43:35 +09:00
2022-12-31 13:14:40 +01:00
2024-02-23 08:54:25 +01:00
2022-08-31 17:16:33 +02:00
2021-08-24 18:52:36 -04:00
2023-11-28 16:56:27 +00:00
2024-02-23 08:54:37 +01:00
2022-04-08 14:23:06 +02:00
2023-09-19 12:22:39 +02:00
2022-06-22 14:22:04 +02:00
2023-04-05 11:24:53 +02:00
2021-08-16 18:55:32 +02:00
2023-12-13 18:36:31 +01:00
2021-12-29 12:28:49 +01:00
2023-12-20 15:17:37 +01:00
2021-05-12 11:43:25 +02:00
2023-02-01 08:27:22 +01:00
2023-03-11 13:57:38 +01:00
2023-09-23 11:09:55 +02:00
2021-06-18 11:43:08 +02:00
2021-05-27 04:01:50 +09:00
2021-07-02 12:08:10 -07:00
2021-06-10 10:00:08 +02:00
2021-07-05 10:46:20 +02:00
2023-12-13 18:36:45 +01:00
2021-08-17 17:50:51 +02:00
2021-06-28 22:43:05 +02:00
2023-07-23 13:46:52 +02:00
2023-06-21 15:59:14 +02:00
2023-04-20 12:13:57 +02:00
2023-11-28 16:56:16 +00:00
2023-05-11 23:00:17 +09:00
2021-05-07 00:26:33 -07:00
2024-01-25 14:52:31 -08:00
2023-04-20 12:13:57 +02:00
2023-03-30 12:47:42 +02:00
2022-12-31 13:14:04 +01:00
2024-01-15 18:51:26 +01:00
2021-08-16 18:55:32 +02:00
2021-09-03 09:58:12 -07:00
2023-11-28 16:56:18 +00:00
2023-02-01 08:27:22 +01:00
2021-08-16 14:42:22 +02:00
2023-03-10 09:39:09 +01:00
2021-08-10 12:53:07 +02:00
2022-08-17 14:24:04 +02:00
2022-06-09 10:22:29 +02:00
2023-11-28 16:56:31 +00:00
2023-05-11 23:00:18 +09:00
2023-03-10 09:40:08 +01:00
2022-04-08 14:23:10 +02:00
2023-09-23 11:09:55 +02:00
2021-11-18 19:16:29 +01:00
2022-02-16 12:56:38 +01:00
2022-07-21 21:24:42 +02:00
2022-08-17 14:24:24 +02:00
2021-08-10 14:57:42 +02:00
2023-08-16 18:22:04 +02:00
2022-02-23 12:03:07 +01:00
2022-04-13 20:59:28 +02:00
2022-04-13 20:59:28 +02:00
2022-04-13 20:59:28 +02:00
2022-08-31 17:16:33 +02:00
2023-04-26 13:51:52 +02:00
2021-06-23 16:41:24 -06:00
2023-02-01 08:27:20 +01:00
2021-04-30 11:20:42 -07:00
2023-08-30 16:18:19 +02:00
2021-08-16 11:39:51 -04:00
2022-01-27 11:05:35 +01:00
2022-02-23 12:03:20 +01:00
2021-05-07 00:26:34 -07:00
2021-05-09 13:07:03 -07:00
2022-03-08 19:12:42 +01:00
2021-09-08 11:50:27 -07:00
2021-07-03 11:41:14 -07:00
2023-11-28 16:56:16 +00:00
2023-07-23 13:46:52 +02:00
2023-11-28 16:56:28 +00:00
2021-08-17 07:49:10 -10:00
2023-12-08 08:48:03 +01:00