On Wed, May 31, 2023 at 1:45 AM He Zhe <zhe...@windriver.com> wrote:
>
>
>
> On 5/30/23 21:35, Bruce Ashfield wrote:
> > On Mon, May 29, 2023 at 11:41 PM He Zhe <zhe...@windriver.com> wrote:
> >> Sorry for messy encoding...
> >>
> >>
> >> We met the following warning when build linux-yocto v6.1, introduced by 
> >> latter diff. It perhaps miscalculates the buf length.
> > Are you only seeing it with gcc-13 ?
> >
> > That fix follows the same pattern as many other parts of the kernel,
> > and checking the 6.1 branch, those other subsystems still have similar
> > sprintf() changes in place:
> >
> > i.e.:
> >
> >         switch (cmd) {
> >         case BLKTRACESETUP:
> >                 snprintf(b, sizeof(b), "%pg", bdev);
>
> The problem is when array is passed as function parameter it'll be treated as 
> a
> simple pointer and thus sizeof will return the length of a pointer. This is 
> the
> warning is about.
>
> But this doesn't apply to the above case since it passes array directly to
> sizeof.
>

I came to a similar conclusion after sending my email yesterday morning!

> >
> > So I don't see a miscalculation of the buffer length in the snippet
> > you have below.
> >
> > The callers of yaffs_devname declare "buf" to be a char array, just as
> > the other kernel references I mentioned do. The different being that
> > yaffs_devname is an inline function, where the other reference changes
> > are not.
> >
> > What happens if you take the code from the inline function and
> > implement it in the calling function, does the warning go away ?
>
> I did a quick test piggybacking print_unknown_bootoptions in init/main.c
>
> static inline char* test_decay(char *buf) {
>         printk("sizeof(buf) is %lu", sizeof(buf));
>         snprintf(buf, sizeof(buf), "test_decay");
>         return buf;
> }
>
> static void __init print_unknown_bootoptions(void)
> {
>         char *unknown_options;
>         char *end;
>         const char *const *p;
>         size_t len;
>         char buf[16];
>
>         test_decay(buf);
> ...
>
> During build we got:
> build/tmp-glibc/work-shared/qemux86-64/kernel-source/init/main.c:895:29: 
> warning: argument to 'sizeof' in 'snprintf' call is the same expression as 
> the destination; did you mean to provide an explicit length? 
> [-Wsizeof-pointer-memaccess]
>   895 |         snprintf(buf, sizeof(buf), "test_decay");
>       |
>
> During boot we got:
> ...
> [    0.000000] sizeof(buf) is 8
> ...
>
>
> I'll send a patch later.

I have a similar patch, except mine converts things to #define to
avoid passing a pointer, and hence the sizeof issue.

But since I haven't extensively tested my fix, I'll likely switch to yours.

Bruce

>
> Zhe
>
> >
> > Bruce
> >
> >> fs/yaffs2/yaffs_vfs.c:122:29: warning: argument to 'sizeof' in 'snprintf' 
> >> call is the same expression as the destination; did you mean to provide an 
> >> explicit length? [-Wsizeof-pointer-memaccess]
> >>
> >> --- a/fs/yaffs2/yaffs_vfs.c
> >> +++ b/fs/yaffs2/yaffs_vfs.c
> >> @@ -117,7 +117,11 @@
> >>  #define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags)
> >>
> >>  /* FIXME: use sb->s_id instead ? */
> >> -#define yaffs_devname(sb, buf) bdevname(sb->s_bdev, buf)
> >> +//#define yaffs_devname(sb, buf) bdevname(sb->s_bdev, buf)
> >> +static inline char* yaffs_devname(struct super_block *sb, char *buf) {
> >> +       snprintf(buf, sizeof(buf), "%pg", sb->s_bdev);
> >> +       return buf;
> >> +}
> >>
> >>  #else
> >>
> >>
> >>
> >> Thanks,
> >> Zhe
> >>
> >> On 5/30/23 11:34, He Zhe via lists.yoctoproject.org wrote:
> >>> |Hi Bruce, We met the following warning when build linux-yocto v6.1, 
> >>> introduced by latter diff. It perhaps miscalculates the buf length. 
> >>> fs/yaffs2/yaffs_vfs.c:122:29: warning: argument to 'sizeof' in 'snprintf' 
> >>> call is the same expression as the destination; did you mean to provide 
> >>> an explicit length? [-Wsizeof-pointer-memaccess] --- 
> >>> a/fs/yaffs2/yaffs_vfs.c +++ b/fs/yaffs2/yaffs_vfs.c @@ -117,7 +117,11 @@  
> >>> #define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags)    /* 
> >>> FIXME: use sb->s_id instead ? */ -#define yaffs_devname(sb, buf) 
> >>> bdevname(sb->s_bdev, buf) +//#define yaffs_devname(sb, buf) 
> >>> bdevname(sb->s_bdev, buf) +static inline char* yaffs_devname(struct 
> >>> super_block *sb, char *buf) { +       snprintf(buf, sizeof(buf), "%pg", 
> >>> sb->s_bdev); +       return buf; +}    #else   Thanks, Zhe |
> >>>
> >>>
> >>>
> >>>
> >
> >
> > 
> >
>


-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#12672): 
https://lists.yoctoproject.org/g/linux-yocto/message/12672
Mute This Topic: https://lists.yoctoproject.org/mt/99213494/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: 
https://lists.yoctoproject.org/g/linux-yocto/leave/6687884/21656/624485779/xyzzy
 [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to