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] [day] [month] [year] [list]
Date:   Thu, 9 Feb 2023 10:25:25 +0800
From:   Feiyang Chen <chris.chenfeiyang@...il.com>
To:     Huacai Chen <chenhuacai@...nel.org>
Cc:     w@....eu, paulmck@...nel.org,
        Feiyang Chen <chenfeiyang@...ngson.cn>, arnd@...db.de,
        jiaxun.yang@...goat.com, loongarch@...ts.linux.dev,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 2/5] tools/nolibc: Add statx() and make stat() rely on
 statx() when available

On Wed, 8 Feb 2023 at 19:00, Huacai Chen <chenhuacai@...nel.org> wrote:
>
> Hi, Feiyang,
>
> On Wed, Feb 8, 2023 at 6:18 PM <chris.chenfeiyang@...il.com> wrote:
> >
> > From: Feiyang Chen <chenfeiyang@...ngson.cn>
> >
> > loongarch and riscv32 only have statx(). arc, hexagon, nios2 and
> > openrisc have statx() and stat64() but not stat() or newstat().
> > Add statx() and make stat() rely on statx() to make them happy.
> Some bikesheddings, maybe it is better to use LoongArch here.
>

Hi, Huacai

Yes.

Thanks,
Feiyang

> Huacai
> >
> > Signed-off-by: Feiyang Chen <chenfeiyang@...ngson.cn>
> > ---
> >  tools/include/nolibc/sys.h | 51 ++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 51 insertions(+)
> >
> > diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h
> > index c4818a9c8823..46b6b3bb3b4e 100644
> > --- a/tools/include/nolibc/sys.h
> > +++ b/tools/include/nolibc/sys.h
> > @@ -20,6 +20,7 @@
> >  #include <linux/time.h>
> >  #include <linux/auxvec.h>
> >  #include <linux/fcntl.h> // for O_* and AT_*
> > +#include <linux/stat.h>  // for statx()
> >
> >  #include "arch.h"
> >  #include "errno.h"
> > @@ -1048,12 +1049,61 @@ pid_t setsid(void)
> >         return ret;
> >  }
> >
> > +/*
> > + * int statx(int fd, const char *path, int flags, unsigned int mask, struct statx *buf);
> > + */
> > +
> > +static __attribute__((unused))
> > +int sys_statx(int fd, const char *path, int flags, unsigned int mask, struct statx *buf)
> > +{
> > +       return my_syscall5(__NR_statx, fd, path, flags, mask, buf);
> > +}
> > +
> > +static __attribute__((unused))
> > +int statx(int fd, const char *path, int flags, unsigned int mask, struct statx *buf)
> > +{
> > +       int ret = sys_statx(fd, path, flags, mask, buf);
> > +
> > +       if (ret < 0) {
> > +               SET_ERRNO(-ret);
> > +               ret = -1;
> > +       }
> > +       return ret;
> > +}
> >
> >  /*
> >   * int stat(const char *path, struct stat *buf);
> >   * Warning: the struct stat's layout is arch-dependent.
> >   */
> >
> > +#ifdef __NR_statx
> > +static __attribute__((unused))
> > +int sys_stat(const char *path, struct stat *buf)
> > +{
> > +       struct statx stat;
> > +       long ret;
> > +
> > +       ret = sys_statx(AT_FDCWD, path, AT_NO_AUTOMOUNT, STATX_BASIC_STATS, &stat);
> > +       buf->st_dev     = ((stat.stx_dev_minor & 0xff)
> > +                         | (stat.stx_dev_major << 8)
> > +                         | ((stat.stx_dev_minor & ~0xff) << 12));
> > +       buf->st_ino     = stat.stx_ino;
> > +       buf->st_mode    = stat.stx_mode;
> > +       buf->st_nlink   = stat.stx_nlink;
> > +       buf->st_uid     = stat.stx_uid;
> > +       buf->st_gid     = stat.stx_gid;
> > +       buf->st_rdev    = ((stat.stx_rdev_minor & 0xff)
> > +                         | (stat.stx_rdev_major << 8)
> > +                         | ((stat.stx_rdev_minor & ~0xff) << 12));
> > +       buf->st_size    = stat.stx_size;
> > +       buf->st_blksize = stat.stx_blksize;
> > +       buf->st_blocks  = stat.stx_blocks;
> > +       buf->st_atime   = stat.stx_atime.tv_sec;
> > +       buf->st_mtime   = stat.stx_mtime.tv_sec;
> > +       buf->st_ctime   = stat.stx_ctime.tv_sec;
> > +       return ret;
> > +}
> > +#else
> >  static __attribute__((unused))
> >  int sys_stat(const char *path, struct stat *buf)
> >  {
> > @@ -1083,6 +1133,7 @@ int sys_stat(const char *path, struct stat *buf)
> >         buf->st_ctime   = stat.st_ctime;
> >         return ret;
> >  }
> > +#endif /* __NR_statx */
> >
> >  static __attribute__((unused))
> >  int stat(const char *path, struct stat *buf)
> > --
> > 2.39.0
> >

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ