From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: from second.openwall.net (second.openwall.net [193.110.157.125]) by inbox.vuxu.org (Postfix) with SMTP id 7840323348 for ; Tue, 21 May 2024 14:12:53 +0200 (CEST) Received: (qmail 24571 invoked by uid 550); 21 May 2024 12:12:48 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 16221 invoked from network); 21 May 2024 01:43:15 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716255787; x=1716860587; darn=lists.openwall.com; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SXqodu7semDhW9FBZmp3ACwWViNn9m6Lh/uQqeV/sBg=; b=BqerqC5XZWbDsGkD6aqbFimMsbncxpOZccMue9j+ALPhea2lc8BUror9h+mwHT0KH+ FHoJN12O5Vf93lnmkZjEevxmygOntZR72iu6RlW0ShENc1unj0zvKJV5A6sjFTtkoucY aAKJu1DBPKiA+uxWRHj+MUTxCNoVKXa2yLmlHTMZKxC3AJi2C+FQlW8Dsdnaf/KqafwO +ts1qwEOMha2jZ3vQAMwUFUfDd+ucllWA8bH13+zHjeW2uWW56iqYukuHbIEpmYEHDlv 7yaegx+7Wd6lIx4G7m3c9PL+zfPmBZuFPfFCaEWebj77ETLEdNFax+2FY21ybSeednqM p+Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716255787; x=1716860587; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SXqodu7semDhW9FBZmp3ACwWViNn9m6Lh/uQqeV/sBg=; b=cc5Q+lGy/cFcheNFF3yAO3NdSi+Fr+u/xYwpZMzQJmnCcOoK4mLJnkcLw1oTzGQOzA mCDrgXyBRQIKAqFB7cH1UaHrEbzJZmJ/tV0xtJNyUb0r/Ey6leh3MTvqIkw7Lk04CK46 T3ZekG68Ysqfs0A5HvFZwwl4zFoR2PFCYrVInObHFtPvH/4U3zJ1n/WhFqs6diVNrItY W4G5t1/76VXLt/DC3LOUP7ohAz0cZtroLMRUzInmwUyTNqdoEQoVAQ/zKwmoR89GhFFR va6+p7Sxm5aUfCxTMxOWTb0FooJPqnfGx9UO50FdHQy3oDrq0u5OddSLm0F1/eOsp8o5 GVXw== X-Gm-Message-State: AOJu0YwXTlddUYbNsZF2/QTNmdQFx+NJJTWElkLplVOik/N8JHy2221+ 05Jj3pkDoasj1O+/Fjnt0JHYoqOXxKPcDDtyXBGPiGTFrIAQ7c8PFHrbkGRWd+qKjuIJ8/vipea YGal3uEgEE4f95+g97mAVsB1hZ+hIzQ== X-Google-Smtp-Source: AGHT+IFZdrX6Ic/9sqmUmS51Go4jSrpOcWZXTkJ1XHA1iKLggrVKU8aJRDGywnIMlHnQYHJnONNhcAUJOOzHo+d6SKY= X-Received: by 2002:a05:6870:f14d:b0:24c:5338:15df with SMTP id 586e51a60fabf-24c5338173fmr151514fac.10.1716255787124; Mon, 20 May 2024 18:43:07 -0700 (PDT) MIME-Version: 1.0 References: <20240423234355.2414567-1-Tony.Ambardar@gmail.com> <20240507032832.2432241-1-Tony.Ambardar@gmail.com> In-Reply-To: <20240507032832.2432241-1-Tony.Ambardar@gmail.com> From: T A Date: Mon, 20 May 2024 18:42:55 -0700 Message-ID: To: musl@lists.openwall.com Cc: Rich Felker Content-Type: multipart/alternative; boundary="000000000000890ffc0618ecf047" Subject: [musl] Re: [PATCH v3] add renameat2 linux syscall wrapper --000000000000890ffc0618ecf047 Content-Type: text/plain; charset="UTF-8" Hi Rich, I think this v3 patch addressed all your suggestions. Are any other improvements needed? Thanks, Tony On Mon, May 6, 2024, 20:28 Tony Ambardar wrote: > This syscall is available since Linux 3.15 and also implemented in glibc > from version 2.28. It is commonly used in filesystem or security contexts. > > Constants RENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT are guarded by > _GNU_SOURCE as with glibc. > > Signed-off-by: Tony Ambardar > --- > v2 -> v3: > * call SYS_renameat first if applicable > * drop unneeded error code handling > > v1 -> v2: > * align related constants > * drop 'int' from 'unsigned int' > * add fallback to SYS_renameat where applicable > --- > include/stdio.h | 7 +++++++ > src/linux/renameat2.c | 11 +++++++++++ > 2 files changed, 18 insertions(+) > create mode 100644 src/linux/renameat2.c > > diff --git a/include/stdio.h b/include/stdio.h > index cb858618..4ea4c170 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -158,6 +158,13 @@ char *ctermid(char *); > #define L_ctermid 20 > #endif > > +#if defined(_GNU_SOURCE) > +#define RENAME_NOREPLACE (1 << 0) > +#define RENAME_EXCHANGE (1 << 1) > +#define RENAME_WHITEOUT (1 << 2) > + > +int renameat2(int, const char *, int, const char *, unsigned); > +#endif > > #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ > || defined(_BSD_SOURCE) > diff --git a/src/linux/renameat2.c b/src/linux/renameat2.c > new file mode 100644 > index 00000000..b8060388 > --- /dev/null > +++ b/src/linux/renameat2.c > @@ -0,0 +1,11 @@ > +#define _GNU_SOURCE > +#include > +#include "syscall.h" > + > +int renameat2(int oldfd, const char *old, int newfd, const char *new, > unsigned flags) > +{ > +#ifdef SYS_renameat > + if (!flags) return syscall(SYS_renameat, oldfd, old, newfd, new); > +#endif > + return syscall(SYS_renameat2, oldfd, old, newfd, new, flags); > +} > -- > 2.34.1 --000000000000890ffc0618ecf047 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Rich,

I think this v3 patch addressed all your suggestions. Are any oth= er improvements needed?

= Thanks,
Tony

On Mon, May 6, 2024, 20:28 Tony Ambardar <tony.ambardar@gmail.com> wrote:
This syscall is available since Linux 3.15= and also implemented in glibc
from version 2.28. It is commonly used in filesystem or security contexts.<= br>
Constants RENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT are guarded by=
_GNU_SOURCE as with glibc.

Signed-off-by: Tony Ambardar <Tony.Ambardar@gmail.com>
---
v2 -> v3:
=C2=A0* call SYS_renameat first if applicable
=C2=A0* drop unneeded error code handling

v1 -> v2:
=C2=A0* align related constants
=C2=A0* drop 'int' from 'unsigned int'
=C2=A0* add fallback to SYS_renameat where applicable
---
=C2=A0include/stdio.h=C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 7 +++++++
=C2=A0src/linux/renameat2.c | 11 +++++++++++
=C2=A02 files changed, 18 insertions(+)
=C2=A0create mode 100644 src/linux/renameat2.c

diff --git a/include/stdio.h b/include/stdio.h
index cb858618..4ea4c170 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -158,6 +158,13 @@ char *ctermid(char *);
=C2=A0#define L_ctermid 20
=C2=A0#endif

+#if defined(_GNU_SOURCE)
+#define RENAME_NOREPLACE (1 << 0)
+#define RENAME_EXCHANGE=C2=A0 (1 << 1)
+#define RENAME_WHITEOUT=C2=A0 (1 << 2)
+
+int renameat2(int, const char *, int, const char *, unsigned);
+#endif

=C2=A0#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
=C2=A0 || defined(_BSD_SOURCE)
diff --git a/src/linux/renameat2.c b/src/linux/renameat2.c
new file mode 100644
index 00000000..b8060388
--- /dev/null
+++ b/src/linux/renameat2.c
@@ -0,0 +1,11 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include "syscall.h"
+
+int renameat2(int oldfd, const char *old, int newfd, const char *new, unsi= gned flags)
+{
+#ifdef SYS_renameat
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!flags) return syscall(SYS_renameat, oldfd,= old, newfd, new);
+#endif
+=C2=A0 =C2=A0 =C2=A0 =C2=A0return syscall(SYS_renameat2, oldfd, old, newfd= , new, flags);
+}
--
2.34.1
--000000000000890ffc0618ecf047--