]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
linux: Add fanotify_mark C implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 11 Jun 2020 19:49:40 +0000 (16:49 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 25 Nov 2021 12:56:57 +0000 (09:56 -0300)
Passing 64-bit arguments on syscalls.list is tricky: it requires
to reimplement the expected kernel abi in each architecture.  This
is way to better to represent in C code where we already have
macros for this (SYSCALL_LL64).

Checked on x86_64-linux-gnu.

18 files changed:
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/arm/syscalls.list
sysdeps/unix/sysv/linux/fanotify_mark.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list
sysdeps/unix/sysv/linux/hppa/fanotify_mark.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/hppa/syscalls.list
sysdeps/unix/sysv/linux/i386/syscalls.list
sysdeps/unix/sysv/linux/m68k/syscalls.list
sysdeps/unix/sysv/linux/microblaze/syscalls.list
sysdeps/unix/sysv/linux/mips/mips32/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list
sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
sysdeps/unix/sysv/linux/sh/fanotify_mark.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sh/syscalls.list
sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
sysdeps/unix/sysv/linux/wordsize-64/syscalls.list

index 76042a6019e7f49ee57c8069e9c5c7b5ce37a61b..695535716a7793248b57ed0a8c771193c1cf5aa4 100644 (file)
@@ -66,7 +66,8 @@ sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
                   fxstatat fxstatat64 \
                   xmknod xmknodat convert_scm_timestamps \
                   closefrom_fallback \
-                  clone3 clone-internal
+                  clone3 clone-internal \
+                  fanotify_mark \
 
 CFLAGS-gethostid.c = -fexceptions
 CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables
index 10c3ae9daef6c2f20d14fbc87b1dea8eebc82850..fa26876f903d882b1d9908427aee9f471c183fdb 100644 (file)
@@ -17,8 +17,6 @@ setfsuid      -       setfsuid32      Ei:i    setfsuid
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
-
 personality    EXTRA   personality     Ei:i    __personality   personality
 
 # proper socket implementations:
diff --git a/sysdeps/unix/sysv/linux/fanotify_mark.c b/sysdeps/unix/sysv/linux/fanotify_mark.c
new file mode 100644 (file)
index 0000000..6269b2c
--- /dev/null
@@ -0,0 +1,36 @@
+/* Add, remove, or modify an fanotify mark on a filesystem object.
+   Linux specific syscall.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <sys/fanotify.h>
+#include <sysdep.h>
+
+int
+__fanotify_mark (int fd, unsigned int flags, uint64_t mask, int dirfd,
+                const char *pathname)
+{
+  return INLINE_SYSCALL_CALL (fanotify_mark, fd, flags, SYSCALL_LL64 (mask),
+                             dirfd, pathname);
+}
+#ifdef VERSION_fanotify_mark
+# include <shlib-compat.h>
+versioned_symbol (libc, __fanotify_mark, fanotify_mark,
+                 VERSION_fanotify_mark);
+#else
+weak_alias (__fanotify_mark, fanotify_mark)
+#endif
index b775008a37c54ae1c6abd231002a6ddc9e69814c..736edbe654a0a28caa1c257de097403980afd123 100644 (file)
@@ -2,4 +2,3 @@
 
 # rlimit APIs
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
diff --git a/sysdeps/unix/sysv/linux/hppa/fanotify_mark.c b/sysdeps/unix/sysv/linux/hppa/fanotify_mark.c
new file mode 100644 (file)
index 0000000..ce347a4
--- /dev/null
@@ -0,0 +1,2 @@
+#define VERSION_fanotify_mark GLIBC_2_19
+#include <sysdeps/unix/sysv/linux/fanotify_mark.c>
index 043d884bf96be7b69bb8aee4951825c8cd15a93d..cc5305a585bbd411aa3e1f9eddd37281e13246ab 100644 (file)
@@ -10,5 +10,4 @@ socket                -       socket          i:iii   __socket        socket
 socketpair     -       socketpair      i:iiif  __socketpair    socketpair
 
 prlimit64      EXTRA   prlimit64       i:iipp  __prlimit64     prlimit64@@GLIBC_2.17
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        __fanotify_mark fanotify_mark@@GLIBC_2.19
 personality    EXTRA   personality     Ei:i    __personality   personality
index 58020dfae5c886d1dd53691861262f1f1dd3a352..d3eaabe61b8aabc83765d26ec42a55d84b8f5cc9 100644 (file)
@@ -21,6 +21,4 @@ vm86          -       vm86            i:ip    __vm86          vm86@@GLIBC_2.3.4
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index 55a377b841907ceb07e150b060e4304c04c2ffc2..44c84bf626e26c501933037704cb7577e22ec679 100644 (file)
@@ -17,5 +17,4 @@ setfsuid      -       setfsuid32      Ei:i    setfsuid
 
 cacheflush     EXTRA   cacheflush      i:iiii  __cacheflush    cacheflush
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
 personality    EXTRA   personality     Ei:i    __personality   personality
index 932c9cccc8dddce6b8b7d1a2742c9f1c421584ea..0abdc38bf34095d7e7c326c7a7cdae5db0611102 100644 (file)
@@ -3,5 +3,4 @@
 cacheflush     EXTRA   cacheflush      i:iiii  __cacheflush    cacheflush
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
 personality    EXTRA   personality     Ei:i    __personality   personality
index f357b5c9181ea7a83493ff794733e951a11b83ac..dbeb184d73bbeade6c23b5258eb3540f8e455fd7 100644 (file)
@@ -1,5 +1,3 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
index 9e6a584685627d0d85b6531f869b7e799a6b71d4..848028f12516e72a63353392ca4c510e220d6dd4 100644 (file)
@@ -6,6 +6,4 @@ lseek64         -       lseek           i:iii   __lseek64       __libc_lseek64 lseek64@@GLIBC_2.2 llseek@GLIBC
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 
-fanotify_mark  EXTRA   fanotify_mark   i:iiiis fanotify_mark
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index e4e16dfa4987c7675f451fc763702fadbd78345e..84f348c8e5c6c5274c9bdee56aca7d20d6a28e6a 100644 (file)
@@ -2,6 +2,4 @@
 
 prlimit                EXTRA   prlimit64       i:iipp  prlimit         prlimit64
 
-fanotify_mark  EXTRA   fanotify_mark   i:iiiis fanotify_mark
-
 sendfile       -       sendfile        i:iipi  sendfile        sendfile64
index 966856e64a019e797061befad1a0f54d46ca86e7..d31303250d89b004a48588b85abc9ad3614f1582 100644 (file)
@@ -4,4 +4,3 @@ chown           -       chown           i:sii   __chown         chown@@GLIBC_2.1
 lchown         -       lchown          i:sii   __lchown        lchown@@GLIBC_2.0 chown@GLIBC_2.0
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
index 300b13dd0167b978d59a10546d31b4d0d85be850..8e9b7c4b715cc8ca18b9fd0d6b85be9b5d6c6283 100644 (file)
@@ -16,5 +16,4 @@ setfsgid      -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
 personality    EXTRA   personality     Ei:i    __personality   personality
diff --git a/sysdeps/unix/sysv/linux/sh/fanotify_mark.c b/sysdeps/unix/sysv/linux/sh/fanotify_mark.c
new file mode 100644 (file)
index 0000000..3662f21
--- /dev/null
@@ -0,0 +1,2 @@
+#define VERSION_fanotify_mark GLIBC_2_16
+#include <sysdeps/unix/sysv/linux/fanotify_mark.c>
index 32badd1ee09d0d6ecc9ceac67a7eab0f496fc03d..6ff3e8eb8ae076af4c776d4639f96169feb05080 100644 (file)
@@ -17,6 +17,4 @@ setfsuid      -       setfsuid32      Ei:i    setfsuid
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        __fanotify_mark fanotify_mark@@GLIBC_2.16
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index 0b6095ffab58148a341b32f7f25b91dc38d8b272..4fcae654519a0d3b7eb1adc11b272e422f0bccb4 100644 (file)
@@ -16,4 +16,3 @@ setfsgid      -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
 prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-fanotify_mark  EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
index 68e3c60536e9733107daf88c8f7e3d70251d980d..8d97a32344369f0d7ee851e34b48710142187516 100644 (file)
@@ -2,6 +2,4 @@
 
 sendfile       -       sendfile        i:iipi  sendfile        sendfile64
 prlimit                EXTRA   prlimit64       i:iipp  prlimit         prlimit64
-
-fanotify_mark  EXTRA   fanotify_mark   i:iiiis fanotify_mark
 personality    EXTRA   personality     i:i     __personality   personality