]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bonding: Pass string literal as format argument of alloc_ordered_workqueue()
authorSimon Horman <horms@kernel.org>
Tue, 6 Aug 2024 09:56:52 +0000 (10:56 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 8 Aug 2024 03:19:31 +0000 (20:19 -0700)
Recently I noticed that both gcc-14 and clang-18 report that passing
a non-string literal as the format argument of alloc_ordered_workqueue
is potentially insecure.

F.e. clang-18 says:

.../bond_main.c:6384:37: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
 6384 |         bond->wq = alloc_ordered_workqueue(bond_dev->name, WQ_MEM_RECLAIM);
      |                                            ^~~~~~~~~~~~~~
.../workqueue.h:524:18: note: expanded from macro 'alloc_ordered_workqueue'
  524 |         alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | (flags), 1, ##args)
      |                         ^~~
.../bond_main.c:6384:37: note: treat the string as an argument to avoid this
 6384 |         bond->wq = alloc_ordered_workqueue(bond_dev->name, WQ_MEM_RECLAIM);
      |                                            ^
      |                                            "%s",
..../workqueue.h:524:18: note: expanded from macro 'alloc_ordered_workqueue'
  524 |         alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | (flags), 1, ##args)
      |                         ^

Perhaps it is always the case where the contents of bond_dev->name is
safe to pass as the format argument. That is, in my understanding, it
never contains any format escape sequences.

But, it seems better to be safe than sorry. And, as a bonus, compiler
output becomes less verbose by addressing this issue as suggested by
clang-18.

Signed-off-by: Simon Horman <horms@kernel.org>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
Link: https://patch.msgid.link/20240806-bonding-fmt-v1-1-e75027e45775@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/bonding/bond_main.c

index 1cd92c12e7824c4d2cf3ab55a729428e280e6ab2..f9633a6f857160d09886e95d390826823512bc29 100644 (file)
@@ -6338,7 +6338,8 @@ static int bond_init(struct net_device *bond_dev)
 
        netdev_dbg(bond_dev, "Begin bond_init\n");
 
-       bond->wq = alloc_ordered_workqueue(bond_dev->name, WQ_MEM_RECLAIM);
+       bond->wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM,
+                                          bond_dev->name);
        if (!bond->wq)
                return -ENOMEM;