Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240421153640.379015-1-Tony.Ambardar@gmail.com>
Date: Sun, 21 Apr 2024 08:36:40 -0700
From: Tony Ambardar <tony.ambardar@...il.com>
To: musl@...ts.openwall.com
Cc: Tony Ambardar <Tony.Ambardar@...il.com>
Subject: [PATCH v1] add renameat2 linux syscall wrapper

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.

Defines RENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT are guarded by
_GNU_SOURCE as with glibc.

Signed-off-by: Tony Ambardar <Tony.Ambardar@...il.com>
---
 include/stdio.h       | 7 +++++++
 src/linux/renameat2.c | 8 ++++++++
 2 files changed, 15 insertions(+)
 create mode 100644 src/linux/renameat2.c

diff --git a/include/stdio.h b/include/stdio.h
index cb858618..8312c3bf 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 int);
+#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..3062aa15
--- /dev/null
+++ b/src/linux/renameat2.c
@@ -0,0 +1,8 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include "syscall.h"
+
+int renameat2(int oldfd, const char *old, int newfd, const char *new, unsigned int flags)
+{
+	return syscall(SYS_renameat2, oldfd, old, newfd, new, flags);
+}
-- 
2.34.1

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.