Re: [PATCH] ovl: properly print correct variable

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

 



On Mon, Jul 28, 2025 at 2:45 PM Antonio Quartulli <antonio@xxxxxxxxxxxxx> wrote:
>
> Hi,
>
> On 26/07/2025 20:27, Amir Goldstein wrote:
> > On Fri, Jul 25, 2025 at 10:33 AM Antonio Quartulli
> > <antonio@xxxxxxxxxxxxx> wrote:
> >>
> >> Hi,
> >>
> >> On 21/07/2025 22:38, Antonio Quartulli wrote:
> >>> In case of ovl_lookup_temp() failure, we currently print `err`
> >>> which is actually not initialized at all.
> >>>
> >>> Instead, properly print PTR_ERR(whiteout) which is where the
> >>> actual error really is.
> >>>
> >>> Address-Coverity-ID: 1647983 ("Uninitialized variables  (UNINIT)")
> >>> Fixes: 8afa0a7367138 ("ovl: narrow locking in ovl_whiteout()")
> >>> Signed-off-by: Antonio Quartulli <antonio@xxxxxxxxxxxxx>
> >>> ---
> >>>    fs/overlayfs/dir.c | 5 +++--
> >>>    1 file changed, 3 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
> >>> index 30619777f0f6..70b8687dc45e 100644
> >>> --- a/fs/overlayfs/dir.c
> >>> +++ b/fs/overlayfs/dir.c
> >>> @@ -117,8 +117,9 @@ static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
> >>>                if (!IS_ERR(whiteout))
> >>>                        return whiteout;
> >>>                if (PTR_ERR(whiteout) != -EMLINK) {
> >>> -                     pr_warn("Failed to link whiteout - disabling whiteout inode sharing(nlink=%u, err=%i)\n",
> >>> -                             ofs->whiteout->d_inode->i_nlink, err);
> >>> +                     pr_warn("Failed to link whiteout - disabling whiteout inode sharing(nlink=%u, err=%lu)\n",
> >>
> >> while re-reading this patch, I realized that the format string for
> >> PTR_ERR(..) was supposed to be %ld, not %lu...
> >>
> >> Sorry about that :(
> >
> > No worries, but its not %ld either. the error is an int.
>
> PTR_ERR() returns long - this is what the patch is printing.

Doesn't matter what PTR_ERR returns, this is conceptually an int
error code.

>
> >
> >>
> >> Neil should I send yet another patch or maybe this can be sneaked into
> >> another change you are about to send?
> >
> > Please test this fix suggested by Neil and send a patch to Christian.
> >
> > --- a/fs/overlayfs/dir.c
> > +++ b/fs/overlayfs/dir.c
> > @@ -116,10 +116,10 @@ static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
> >                  inode_unlock(wdir);
> >                  if (!IS_ERR(whiteout))
> >                          return whiteout;
> > -               if (PTR_ERR(whiteout) != -EMLINK) {
> > -                       pr_warn("Failed to link whiteout - disabling
> > whiteout inode sharing(nlink=%u, err=%lu)\n",
> > -                               ofs->whiteout->d_inode->i_nlink,
> > -                               PTR_ERR(whiteout));
> > +               err = PTR_ERR(whiteout);
> > +               if (err != -EMLINK) {
> > +                       pr_warn("Failed to link whiteout - disabling
> > whiteout inode sharing(nlink=%u, err=%i)\n",
> > +                               ofs->whiteout->d_inode->i_nlink, err);
> >                          ofs->no_shared_whiteout = true;
> >                  }
> >          }
>
> Actually I think Neil was suggesting to make `err` local to the two
> blocks where it is currently used.
>
> This way the compiler would have caught its usage out of scope in the
> first place.
>
> It should be as listed below (including the format string fix).
> If you guys are fine with it, I'll send it as PATCH.
>

Sorry I do not like this suggestion.
I prefer not to reduce the scope of err var
and not have to define it twice.

Thanks,
Amir.

> Thanks!
>
> --- a/fs/overlayfs/dir.c
> +++ b/fs/overlayfs/dir.c
> @@ -80,7 +80,6 @@ struct dentry *ovl_lookup_temp(struct ovl_fs *ofs,
> struct dentry *workdir)
>
>   static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
>   {
> -       int err;
>          struct dentry *whiteout;
>          struct dentry *workdir = ofs->workdir;
>          struct inode *wdir = workdir->d_inode;
> @@ -91,7 +90,7 @@ static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
>                  inode_lock_nested(wdir, I_MUTEX_PARENT);
>                  whiteout = ovl_lookup_temp(ofs, workdir);
>                  if (!IS_ERR(whiteout)) {
> -                       err = ovl_do_whiteout(ofs, wdir, whiteout);
> +                       int err = ovl_do_whiteout(ofs, wdir, whiteout);
>                          if (err) {
>                                  dput(whiteout);
>                                  whiteout = ERR_PTR(err);
> @@ -107,7 +106,8 @@ static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
>                  inode_lock_nested(wdir, I_MUTEX_PARENT);
>                  whiteout = ovl_lookup_temp(ofs, workdir);
>                  if (!IS_ERR(whiteout)) {
> -                       err = ovl_do_link(ofs, ofs->whiteout, wdir,
> whiteout);
> +                       int err = ovl_do_link(ofs, ofs->whiteout, wdir,
> +                                             whiteout);
>                          if (err) {
>                                  dput(whiteout);
>                                  whiteout = ERR_PTR(err);
> @@ -117,7 +117,7 @@ static struct dentry *ovl_whiteout(struct ovl_fs *ofs)
>                  if (!IS_ERR(whiteout))
>                          return whiteout;
>                  if (PTR_ERR(whiteout) != -EMLINK) {
> -                       pr_warn("Failed to link whiteout - disabling
> whiteout inode sharing(nlink=%u, err=%lu)\n",
> +                       pr_warn("Failed to link whiteout - disabling
> whiteout inode sharing(nlink=%u, err=%ld)\n",
>                                  ofs->whiteout->d_inode->i_nlink,
>                                  PTR_ERR(whiteout));
>                          ofs->no_shared_whiteout = true;
>
>
>
> --
> Antonio Quartulli
>
> CEO and Co-Founder
> Mandelbit Srl
> https://www.mandelbit.com
>





[Index of Archives]     [Linux Filesystems Devel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux