Re: drivers/opp/debugfs.c:48:54: warning: '%d' directive output may be truncated writing between 1 and 11 bytes into a region of size 8

From: Liu, Yujie
Date: Wed Feb 21 2024 - 01:02:27 EST


Hi Viresh,

On Wed, 2024-02-14 at 11:28 +0530, Viresh Kumar wrote:
> On 14-02-24, 13:43, kernel test robot wrote:
> > Hi Viresh,
> >
> > FYI, the error/warning still remains.
> >
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > head:   7e90b5c295ec1e47c8ad865429f046970c549a66
> > commit: 46f48aca2e5aef3f430e95d1a5fb68227ec8ec85 OPP: Fix missing debugfs supply directory for OPPs
> > date:   5 years ago
> > config: x86_64-buildonly-randconfig-001-20231012 (https://download.01.org/0day-ci/archive/20240214/202402141313.81ltVF5g-lkp@xxxxxxxxx/config)
> > compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240214/202402141313.81ltVF5g-lkp@xxxxxxxxx/reproduce)
> >
> > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > the same patch/commit), kindly add following tags
> > > Reported-by: kernel test robot <lkp@xxxxxxxxx>
> > > Closes: https://lore.kernel.org/oe-kbuild-all/202402141313.81ltVF5g-lkp@xxxxxxxxx/
>
> I have informed this earlier too, this report is incorrect and applies
> to a very old commit.

Really sorry for not responding timely to the questions in the
following reports:

[1] https://lore.kernel.org/all/202311061847.BOtfUmbQ-lkp@xxxxxxxxx/
[2] https://lore.kernel.org/all/202312170608.s9xI4TQb-lkp@xxxxxxxxx/

We see that this still happens on the latest mainline rc regardless of
x86_64 or arm64 arch. Please note that this is a "W=1" warning. In our
tests, it can be reproduced with gcc-12 and gcc-13, but not with other
versions of gcc.

$ git checkout v6.8-rc5
HEAD is now at b401b621758e4 Linux 6.8-rc5

$ wget https://download.01.org/0day-ci/archive/20240214/202402141313.81ltVF5g-lkp@xxxxxxxxx/config -O .config

$ make CC=gcc-12 W=1 -j72 ARCH=x86_64 olddefconfig
$ make CC=gcc-12 W=1 -j72 ARCH=x86_64 drivers/opp/debugfs.o
...
drivers/opp/debugfs.c: In function 'opp_debug_create_one':
drivers/opp/debugfs.c:105:54: error: '%d' directive output may be truncated writing between 1 and 11 bytes into a region of size 8 [-Werror=format-truncation=]
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~
In function 'opp_debug_create_supplies',
inlined from 'opp_debug_create_one' at drivers/opp/debugfs.c:163:2:
drivers/opp/debugfs.c:105:46: note: directive argument in the range [-2147483644, 2147483646]
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~~~~~~~~~~
drivers/opp/debugfs.c:105:17: note: 'snprintf' output between 9 and 19 bytes into a destination of size 15
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$ make CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc-12 W=1 -j72 ARCH=arm64 olddefconfig
$ make CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc-12 W=1 -j72 ARCH=arm64 drivers/opp/debugfs.o
...
drivers/opp/debugfs.c: In function 'opp_debug_create_one':
drivers/opp/debugfs.c:105:54: error: '%d' directive output may be truncated writing between 1 and 11 bytes into a region of size 8 [-Werror=format-truncation=]
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~
In function 'opp_debug_create_supplies',
inlined from 'opp_debug_create_one' at drivers/opp/debugfs.c:163:2:
drivers/opp/debugfs.c:105:46: note: directive argument in the range [-2147483644, 2147483646]
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~~~~~~~~~~
drivers/opp/debugfs.c:105:17: note: 'snprintf' output between 9 and 19 bytes into a destination of size 15
105 | snprintf(name, sizeof(name), "supply-%d", i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

We are not sure if this is a real problem or a compiler shortcoming
that gcc calculates an incorrect size. Might need gcc experts to take a
look.

Regardless, we will configure the bot to ignore this issue to avoid
further bothering you with duplicate reports.

Best Regards,
Yujie