Re: [PATCH] dm vdo: Fix W=1 allmodconfig build error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi John,

I'm all for getting rid of warnings where we can, but I'm not convinced this is the right approach here.

First, we use snprintf here because we really do want to limit the
string to 15 bytes. Making this constant larger doesn't maintain that. This change also increases the size of struct vdo (in vdo.h) by about 50 bytes. While that's not a lot, it does seem unnecessary.

In practice, we know that the our module name is only about 6 bytes, and the instance number will never be more than 3, so snprintf will never actually truncate anything here. Would checking for a non-zero return value suppress the error?

I'm also confused because I don't understand the difference between this line and the similar use of snprintf at drivers/md/dm-vdo/funnel-workqueue.c:430, which I presume does not trigger a warning?

Anyway, I'd be happy with a version that suppresses the warning without changing the size of any structures.

Matt Sakai

On 1/6/25 9:17 AM, John Garry wrote:
For an allmodconfig build, I currently get this error when building with
W=1:

$ make W=1 drivers/md/dm-vdo/vdo.o
   CALL    scripts/checksyscalls.sh
   DESCEND objtool
   INSTALL libsubcmd_headers
   CC [M]  drivers/md/dm-vdo/vdo.o
drivers/md/dm-vdo/vdo.c: In function ‘vdo_make’:
drivers/md/dm-vdo/vdo.c:564:5: error: ‘%s’ directive output may be truncated writing up to 55 bytes into a region of size 16 [-Werror=format-truncation=]
     "%s%u", MODULE_NAME, instance);
      ^~
drivers/md/dm-vdo/vdo.c:563:2: note: ‘snprintf’ output between 2 and 66 bytes into a destination of size 16
   snprintf(vdo->thread_name_prefix, sizeof(vdo->thread_name_prefix),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     "%s%u", MODULE_NAME, instance);
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix by defining MAX_VDO_WORK_QUEUE_NAME_LEN to be sum of MODULE_NAME_LEN
plus 11 - 11 comes from number of characters required to print max unsigned
int plus NUL terminator.

Also relocate the include of sched.h to the only c file which it is
actually needed.

Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx>

diff --git a/drivers/md/dm-vdo/funnel-workqueue.c b/drivers/md/dm-vdo/funnel-workqueue.c
index ae11941c90a9..7e42342263ab 100644
--- a/drivers/md/dm-vdo/funnel-workqueue.c
+++ b/drivers/md/dm-vdo/funnel-workqueue.c
@@ -11,6 +11,7 @@
  #include <linux/err.h>
  #include <linux/kthread.h>
  #include <linux/percpu.h>
+#include <linux/sched.h>
#include "funnel-queue.h"
  #include "logger.h"
diff --git a/drivers/md/dm-vdo/funnel-workqueue.h b/drivers/md/dm-vdo/funnel-workqueue.h
index b5be6e9e83bc..3447aac5b188 100644
--- a/drivers/md/dm-vdo/funnel-workqueue.h
+++ b/drivers/md/dm-vdo/funnel-workqueue.h
@@ -6,12 +6,10 @@
  #ifndef VDO_WORK_QUEUE_H
  #define VDO_WORK_QUEUE_H
-#include <linux/sched.h> /* for TASK_COMM_LEN */
-
  #include "types.h"
enum {
-	MAX_VDO_WORK_QUEUE_NAME_LEN = TASK_COMM_LEN,
+	MAX_VDO_WORK_QUEUE_NAME_LEN = MODULE_NAME_LEN + 11,
  };
struct vdo_work_queue_type {





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux