Re: [PATCH v2] workqueue.c: Increase workqueue name length

From: Rasmus Villemoes
Date: Wed Jan 10 2024 - 15:51:03 EST


On 10/01/2024 21.29, Audra Mitchell wrote:

> @@ -4663,9 +4663,10 @@ struct workqueue_struct *alloc_workqueue(const char *fmt,
> unsigned int flags,
> int max_active, ...)
> {
> - va_list args;
> + va_list args, args_copy;
> struct workqueue_struct *wq;
> struct pool_workqueue *pwq;
> + int len;
>
> /*
> * Unbound && max_active == 1 used to imply ordered, which is no longer
> @@ -4692,6 +4693,13 @@ struct workqueue_struct *alloc_workqueue(const char *fmt,
> }
>
> va_start(args, max_active);
> + va_copy(args_copy, args);
> + len = vsnprintf(NULL, 0, fmt, args_copy);
> + WARN(len > WQ_NAME_LEN,
> + "workqueue: wq->name too long (%d). Truncated to WQ_NAME_LEN (%d)\n",
> + len, WQ_NAME_LEN);
> +
> + va_end(args_copy);
> vsnprintf(wq->name, sizeof(wq->name), fmt, args);

Eh, why not just _not_ throw away the return value from the existing
vsnprintf() and do "len >= sizeof(wq->name)" to know if truncation
happened? There's really no need need to do vsnprintf() twice. (And yes,
you want >=, not >).

Oh, and definitely not WARN, pr_warn() or pr_warn_once() please.

Rasmus