Files
ack-tegra/include/linux
Breno Leitao 0de4cb473a workqueue: fix devm_alloc_workqueue() va_list misuse
devm_alloc_workqueue() built a va_list and passed it as a single
positional argument to the variadic alloc_workqueue() macro:

	va_start(args, max_active);
	wq = alloc_workqueue(fmt, flags, max_active, args);
	va_end(args);

C does not allow forwarding a va_list through a ... parameter.
alloc_workqueue() expands to alloc_workqueue_noprof(), which runs
its own va_start() over its ... params, so the inner
vsnprintf(wq->name, sizeof(wq->name), fmt, args) in
__alloc_workqueue() received the outer va_list object as the first
variadic slot rather than the caller's actual format arguments.

Add a new static helper alloc_workqueue_va() that wraps
__alloc_workqueue() and runs wq_init_lockdep() on success, and
fold both alloc_workqueue_noprof() and devm_alloc_workqueue_noprof()
onto it as suggested by Tejun.

The wq_init_lockdep() step is required on the devm path
too, otherwise __flush_workqueue()'s on-stack
COMPLETION_INITIALIZER_ONSTACK_MAP would NULL-deref wq->lockdep_map.

No caller changes are required. devm_alloc_ordered_workqueue() is
a macro forwarding to devm_alloc_workqueue() and inherits the fix.
Two in-tree callers actively trigger the broken path on every probe:

  drivers/power/supply/mt6370-charger.c:889
  drivers/power/supply/max77705_charger.c:649

both of which use devm_alloc_ordered_workqueue(dev, "%s", 0,
dev_name(dev)).

A standalone reproducer module is available at[1].

Link: https://github.com/leitao/debug/blob/main/workqueue/valist/wq_va_test.c [1]
Fixes: 1dfc9d60a6 ("workqueue: devres: Add device-managed allocate workqueue")
Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
2026-04-28 06:13:40 -10:00
..
…
…
…
…
…
…
…
…
2026-04-02 15:52:49 +02:00
2026-03-18 15:11:40 +05:30
…
2026-03-19 23:55:27 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-03 16:53:50 -04:00
…
…
…
…
…
2026-04-07 08:22:24 -06:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-04 08:10:37 -06:00
…
…
…
…
…
…
…
2026-03-05 18:15:58 -10:00
2026-03-16 13:16:49 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-02 17:08:05 -05:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-31 19:15:21 +02:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-16 07:03:40 -07:00
2026-03-23 13:33:51 -04:00
…
…
2026-04-07 17:38:07 +02:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-02-27 16:40:16 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-02-23 13:43:16 -08:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-05 13:53:28 -07:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-01 10:19:41 +02:00
…
…
…
…
…
…
…
…
…
2026-04-03 16:53:50 -04:00
2026-04-03 16:53:50 -04:00
…
…
…
…
…
2026-03-18 09:59:57 +00:00
…
…
…
…
…
…
2026-04-06 11:39:54 +02:00
2026-04-05 13:53:00 -07:00
…
…
2026-03-17 15:34:47 +05:30
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-08 11:06:53 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-27 07:35:05 -07:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-05 13:53:10 -07:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-04-20 11:35:17 -07:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-27 17:14:31 -07:00
…
…
…
…
…
…
…
…
2026-02-27 16:40:16 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-08 11:06:53 +01:00
…
…
…
…
…
2026-03-31 07:04:00 -06:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-25 20:11:29 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-23 12:41:58 +01:00
…
…
…
…
…
…
2026-03-13 08:22:54 +01:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
2026-03-12 15:05:34 +01:00
…
…
2026-04-13 08:39:51 -07:00
…
…
…
…
…
…
…
2026-04-06 09:06:39 +02:00
…
…
…
…
2026-03-30 16:43:24 -06:00
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…