2019-09-12 05:29:13

by Ding Xiang

[permalink] [raw]
Subject: [PATCH V2] ovl: Fix dereferencing possible ERR_PTR()

if ovl_encode_real_fh() fails, no memory was allocated
and the error in the error-valued pointer should be returned.

V1->V2: fix SHA1 length problem

Fixes: 9b6faee07470 ("ovl: check ERR_PTR() return value from ovl_encode_fh()")
Signed-off-by: Ding Xiang <[email protected]>
---
fs/overlayfs/export.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
index cb8ec1f..50ade19 100644
--- a/fs/overlayfs/export.c
+++ b/fs/overlayfs/export.c
@@ -229,7 +229,7 @@ static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
ovl_dentry_upper(dentry), !enc_lower);
err = PTR_ERR(fh);
if (IS_ERR(fh))
- goto fail;
+ return err;

err = -EOVERFLOW;
if (fh->len > buflen)
--
1.9.1




2019-09-12 06:04:14

by Amir Goldstein

[permalink] [raw]
Subject: Re: [PATCH V2] ovl: Fix dereferencing possible ERR_PTR()

On Thu, Sep 12, 2019 at 8:24 AM Ding Xiang
<[email protected]> wrote:
>
> if ovl_encode_real_fh() fails, no memory was allocated
> and the error in the error-valued pointer should be returned.
>
> V1->V2: fix SHA1 length problem
>
> Fixes: 9b6faee07470 ("ovl: check ERR_PTR() return value from ovl_encode_fh()")
> Signed-off-by: Ding Xiang <[email protected]>
> ---
> fs/overlayfs/export.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
> index cb8ec1f..50ade19 100644
> --- a/fs/overlayfs/export.c
> +++ b/fs/overlayfs/export.c
> @@ -229,7 +229,7 @@ static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
> ovl_dentry_upper(dentry), !enc_lower);
> err = PTR_ERR(fh);
> if (IS_ERR(fh))
> - goto fail;
> + return err;
>

Please fix the code in warning message instead of skipping the warning.

Thanks,
Amir.

2019-09-12 09:33:54

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [PATCH V2] ovl: Fix dereferencing possible ERR_PTR()

On Thu, Sep 12, 2019 at 8:02 AM Amir Goldstein <[email protected]> wrote:
>
> On Thu, Sep 12, 2019 at 8:24 AM Ding Xiang
> <[email protected]> wrote:
> >
> > if ovl_encode_real_fh() fails, no memory was allocated
> > and the error in the error-valued pointer should be returned.
> >
> > V1->V2: fix SHA1 length problem
> >
> > Fixes: 9b6faee07470 ("ovl: check ERR_PTR() return value from ovl_encode_fh()")
> > Signed-off-by: Ding Xiang <[email protected]>
> > ---
> > fs/overlayfs/export.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
> > index cb8ec1f..50ade19 100644
> > --- a/fs/overlayfs/export.c
> > +++ b/fs/overlayfs/export.c
> > @@ -229,7 +229,7 @@ static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
> > ovl_dentry_upper(dentry), !enc_lower);
> > err = PTR_ERR(fh);
> > if (IS_ERR(fh))
> > - goto fail;
> > + return err;
> >
>
> Please fix the code in warning message instead of skipping the warning.

Not sure that makes sense. ovl_encode_real_fh() will either return
-EIO in case of an internal error with WARN_ON() or it will return
-ENOMEM on memory allocation failure, which doesn't warrant a debug
message.

Thanks,
Miklos

2019-09-12 10:19:43

by Amir Goldstein

[permalink] [raw]
Subject: Re: [PATCH V2] ovl: Fix dereferencing possible ERR_PTR()

On Thu, Sep 12, 2019 at 12:28 PM Miklos Szeredi <[email protected]> wrote:
>
> On Thu, Sep 12, 2019 at 8:02 AM Amir Goldstein <[email protected]> wrote:
> >
> > On Thu, Sep 12, 2019 at 8:24 AM Ding Xiang
> > <[email protected]> wrote:
> > >
> > > if ovl_encode_real_fh() fails, no memory was allocated
> > > and the error in the error-valued pointer should be returned.
> > >
> > > V1->V2: fix SHA1 length problem
> > >
> > > Fixes: 9b6faee07470 ("ovl: check ERR_PTR() return value from ovl_encode_fh()")
> > > Signed-off-by: Ding Xiang <[email protected]>
> > > ---
> > > fs/overlayfs/export.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
> > > index cb8ec1f..50ade19 100644
> > > --- a/fs/overlayfs/export.c
> > > +++ b/fs/overlayfs/export.c
> > > @@ -229,7 +229,7 @@ static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
> > > ovl_dentry_upper(dentry), !enc_lower);
> > > err = PTR_ERR(fh);
> > > if (IS_ERR(fh))
> > > - goto fail;
> > > + return err;
> > >
> >
> > Please fix the code in warning message instead of skipping the warning.
>
> Not sure that makes sense. ovl_encode_real_fh() will either return
> -EIO in case of an internal error with WARN_ON() or it will return
> -ENOMEM on memory allocation failure, which doesn't warrant a debug
> message.
>

Very well. I did not look that deep.

No objections then.

Thanks,
Amir.