lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 15 Mar 2015 09:34:35 +0100 (CET)
From:	Fabian Frederick <fabf@...net.be>
To:	Jan Kara <jack@...e.cz>
Cc:	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 4/5 linux-next] udf: rename udf_get_filename()



> On 14 March 2015 at 07:52 Jan Kara <jack@...e.cz> wrote:
>
>
> On Tue 10-03-15 21:44:34, Fabian Frederick wrote:
> > udf_readdir(), udf_find_entry() and udf_pc_to_char() use
> > udf_get_filename to obtain name length. Give that function
> > an appropriate name.
>   Hum, have you read what that function does? It actually converts the name
> to a different format and returns converted length. So your name is IMHO
> more confusing - it's as if sprintf() was called sprintf_length()... Not
> applied.
>
>                                                               Honza

Hi Jan,

Ok for the name but AFAICS there's still a problem with error management in
udf_get_filename().
We return 0 when not able to allocate filename and callsites don't seem to
relate the real problem.
Maybe we could either BUG_ON(!filename), BUG_ON(!unifilename) directly in
udf_get_filename() or return -ENOMEM ?
 
udf_readdir() could return -ENOMEM instead of 0 but functions like
udf_find_entry() would need some updates ...

Another solution would be to have length as argument and return error...

Regards,
Fabian

>
> >
> > Signed-off-by: Fabian Frederick <fabf@...net.be>
> > ---
> >  fs/udf/dir.c     | 3 ++-
> >  fs/udf/namei.c   | 3 ++-
> >  fs/udf/symlink.c | 7 ++++---
> >  fs/udf/udfdecl.h | 4 ++--
> >  fs/udf/unicode.c | 4 ++--
> >  5 files changed, 12 insertions(+), 9 deletions(-)
> >
> > diff --git a/fs/udf/dir.c b/fs/udf/dir.c
> > index 05e90ed..edf4232 100644
> > --- a/fs/udf/dir.c
> > +++ b/fs/udf/dir.c
> > @@ -168,7 +168,8 @@ static int udf_readdir(struct file *file, struct
> > dir_context *ctx)
> >                     continue;
> >             }
> > 
> > -           flen = udf_get_filename(sb, nameptr, lfi, fname, UDF_NAME_LEN);
> > +           flen = udf_get_filename_length(sb, nameptr, lfi, fname,
> > +                                          UDF_NAME_LEN);
> >             if (!flen)
> >                     continue;
> > 
> > diff --git a/fs/udf/namei.c b/fs/udf/namei.c
> > index 33b246b..189b98b 100644
> > --- a/fs/udf/namei.c
> > +++ b/fs/udf/namei.c
> > @@ -234,7 +234,8 @@ static struct fileIdentDesc *udf_find_entry(struct inode
> > *dir,
> >             if (!lfi)
> >                     continue;
> > 
> > -           flen = udf_get_filename(sb, nameptr, lfi, fname, UDF_NAME_LEN);
> > +           flen = udf_get_filename_length(sb, nameptr, lfi, fname,
> > +                                          UDF_NAME_LEN);
> >             if (flen && udf_match(flen, fname, child->len, child->name))
> >                     goto out_ok;
> >     }
> > diff --git a/fs/udf/symlink.c b/fs/udf/symlink.c
> > index ac10ca9..d986916a 100644
> > --- a/fs/udf/symlink.c
> > +++ b/fs/udf/symlink.c
> > @@ -80,9 +80,10 @@ static int udf_pc_to_char(struct super_block *sb,
> > unsigned char *from,
> >                     elen += pc->lengthComponentIdent;
> >                     if (elen > fromlen)
> >                             return -EIO;
> > -                   comp_len = udf_get_filename(sb, pc->componentIdent,
> > -                                               pc->lengthComponentIdent,
> > -                                               p, tolen);
> > +                   comp_len = udf_get_filename_length(sb,
> > +                                           pc->componentIdent,
> > +                                           pc->lengthComponentIdent,
> > +                                           p, tolen);
> >                     p += comp_len;
> >                     tolen -= comp_len;
> >                     if (tolen == 0)
> > diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
> > index 47bb3f5..70dc260 100644
> > --- a/fs/udf/udfdecl.h
> > +++ b/fs/udf/udfdecl.h
> > @@ -211,8 +211,8 @@ udf_get_lb_pblock(struct super_block *sb, struct
> > kernel_lb_addr *loc,
> >  }
> > 
> >  /* unicode.c */
> > -extern int udf_get_filename(struct super_block *, uint8_t *, int, uint8_t
> > *,
> > -                       int);
> > +extern int udf_get_filename_length(struct super_block *, uint8_t *, int,
> > +                              uint8_t *, int);
> >  extern int udf_put_filename(struct super_block *, const uint8_t *, uint8_t
> >*,
> >                         int);
> >  extern int udf_build_ustr(struct ustr *, dstring *, int);
> > diff --git a/fs/udf/unicode.c b/fs/udf/unicode.c
> > index b84fee3..209c0c7 100644
> > --- a/fs/udf/unicode.c
> > +++ b/fs/udf/unicode.c
> > @@ -334,8 +334,8 @@ try_again:
> >     return u_len + 1;
> >  }
> > 
> > -int udf_get_filename(struct super_block *sb, uint8_t *sname, int slen,
> > -                uint8_t *dname, int dlen)
> > +int udf_get_filename_length(struct super_block *sb, uint8_t *sname, int
> > slen,
> > +                       uint8_t *dname, int dlen)
> >  {
> >     struct ustr *filename, *unifilename;
> >     int len = 0;
> > --
> > 1.9.1
> >
> --
> Jan Kara <jack@...e.cz>
> SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists