[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2f0efed5-f9f3-4a5c-9fd4-a4837cada298@prevas.dk>
Date: Wed, 10 Jan 2024 21:47:56 +0100
From: Rasmus Villemoes <rasmus.villemoes@...vas.dk>
To: Audra Mitchell <audra@...hat.com>, linux-kernel@...r.kernel.org
Cc: tj@...nel.org, jiangshanlai@...il.com, hirokazu.yamauchi.hk@...achi.com,
ddouwsma@...hat.com, loberman@...hat.com, raquini@...hat.com
Subject: Re: [PATCH v2] workqueue.c: Increase workqueue name length
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
Powered by blists - more mailing lists