|
Message-ID: <20240223003633.GY4163@brightrain.aerifal.cx> Date: Thu, 22 Feb 2024 19:36:34 -0500 From: Rich Felker <dalias@...c.org> To: Gaël PORTAY <gael.portay@...ne.fr> Cc: musl@...ts.openwall.com Subject: Re: [PATCH v2 8/8] use new SYS_fchmodat2 syscall to implement fchmodat with flags On Sun, Feb 18, 2024 at 03:26:50AM +0100, Gaël PORTAY wrote: > commit 0dc4824479e357a3e23a02d35527e23fca920343 worked around for lack > of flags argument in syscall for fchmodat. > > linux 6.6 introduced a new syscall, SYS_fchmodat2, fixing this > deficiency. use it if any flags are passed, and fallback to the old > strategy on ENOSYS. continue using the old syscall when there are no > flags. this is the exact same strategy used when SYS_faccessat2 was used > to implement faccessat with flags. > --- > src/stat/fchmodat.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/src/stat/fchmodat.c b/src/stat/fchmodat.c > index 41db0c46..a3f407e3 100644 > --- a/src/stat/fchmodat.c > +++ b/src/stat/fchmodat.c > @@ -5,6 +5,11 @@ > > int fchmodat(int fd, const char *path, mode_t mode, int flag) > { > + if (flag) { > + int ret = __syscall(SYS_fchmodat2, fd, path, mode, flag); > + if (ret != -ENOSYS) return __syscall_ret(ret); > + } > + > if (!flag) return syscall(SYS_fchmodat, fd, path, mode); > > if (flag != AT_SYMLINK_NOFOLLOW) > -- > 2.43.2 I've reordered this to avoid confusing repeating conditionals, so it's now: if (!flag) return syscall(SYS_fchmodat, fd, path, mode); + int ret = __syscall(SYS_fchmodat2, fd, path, mode, flag); + if (ret != -ENOSYS) return __syscall_ret(ret); ... (with the later declaration of ret removed). Thanks for getting these patches in to make it into the release! Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.