]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Wrap the quotactl_fd syscall
authorMartin Cermak <mcermak@redhat.com>
Wed, 17 Sep 2025 14:08:05 +0000 (16:08 +0200)
committerMark Wielaard <mark@klomp.org>
Thu, 18 Sep 2025 19:50:46 +0000 (21:50 +0200)
SYSCALL_DEFINE4(quotactl_fd,
    unsigned int, fd,
    unsigned int, cmd,
    qid_t, id,
    void __user *, addr)

The quotactl_fd works in a similar way to quotactl.  They both manipulate
disk quotas.  They differ in how the target file system is specified.
While quotactl takes path, quotactl_fd takes a file descriptor.

Declare a quotactl_fd wrapper in priv_syswrap-linux.h and hook it for
{amd64,arm,arm64,mips64,ppc32,ppc64,riscv64,s390x,x86}-linux using
LINX_ with PRE handler in syswrap-linux.c

https://bugs.kde.org/show_bug.cgi?id=509567

14 files changed:
NEWS
coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-arm-linux.c
coregrind/m_syswrap/syswrap-arm64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-mips32-linux.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-riscv64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-scnums-shared-linux.h

diff --git a/NEWS b/NEWS
index 32d8acec91eb6393053c1f355748a40d320b60b0..3114eb4fe14d61fe71e93c7d09f47978cc1ae3ae 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -138,6 +138,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 509258  FreeBSD: add jail_attach_jd and jail_remove_jd syscall wrappers
 509517  s390x: Even/odd lane confusion in various vector insns
 509590  Run the LTP tests with LTP_QUIET
+509567  unhandled amd64-linux syscall: 443 (quotactl_fd)
 
 To see details of a given bug, visit
   https://bugs.kde.org/show_bug.cgi?id=XXXXXX
index 1706af786b0c3fb280da00830d61e9b8b6db1367..49a4c222b5d27598ba2fe826d6cd27baa7b696e2 100644 (file)
@@ -254,6 +254,7 @@ DECL_TEMPLATE(linux, sys_munlockall);
 DECL_TEMPLATE(linux, sys_pipe);
 DECL_TEMPLATE(linux, sys_pipe2);
 DECL_TEMPLATE(linux, sys_quotactl);
+DECL_TEMPLATE(linux, sys_quotactl_fd);
 DECL_TEMPLATE(linux, sys_waitid);
 
 // Posix, but in Darwin utime is a libc function that calls syscall utimes.
index c0d3637f7dbe7741a2817b1888cd8678a967b6c6..88c84b84185962fc3d2eeee79df9a34f7811f77f 100644 (file)
@@ -895,6 +895,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,       sys_faccessat2),        // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+   LINX_(__NR_quotactl_fd,       sys_quotactl_fd),       // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
index 42f795210340d04df42f67d37cf0f7c6cb9ed709..5567146eb359017110fd00e67dbbbc35b10a4083 100644 (file)
@@ -1067,15 +1067,15 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_close_range,       sys_close_range),       // 436
    LINXY(__NR_openat2,           sys_openat2),           // 437
    LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
-   LINX_(__NR_faccessat2,    sys_faccessat2),           // 439
-
+   LINX_(__NR_faccessat2,        sys_faccessat2),        // 439
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
-   LINX_(__NR_futex_waitv,       sys_futex_waitv),       // 449
+   LINX_(__NR_quotactl_fd,       sys_quotactl_fd),       // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
    LINX_(__NR_landlock_restrict_self,  sys_landlock_restrict_self),  // 446
 
+   LINX_(__NR_futex_waitv,       sys_futex_waitv),       // 449
    LINXY(__NR_cachestat,         sys_cachestat),         // 451
    LINX_(__NR_fchmodat2,         sys_fchmodat2),         // 452
    LINXY(__NR_statmount,         sys_statmount),         // 457
index fd6ac23f708bd36f9e959634357072e3de45d6fa..ada952cca6cc2df72ad3194389aa840d30527147 100644 (file)
@@ -846,6 +846,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_(__NR_faccessat2,        sys_faccessat2),        // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+   LINX_(__NR_quotactl_fd,       sys_quotactl_fd),       // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
index 9333dfde1dd70fbe8110d12360c9ce77fd944376..0d5aa7965d741adb7a46876e196dc5a4ee96ce46 100644 (file)
@@ -4103,6 +4103,22 @@ PRE(sys_quotactl)
    PRE_MEM_RASCIIZ( "quotactl(special)", ARG2 );
 }
 
+PRE(sys_quotactl_fd)
+{
+   // SYSCALL_DEFINE4(quotactl_fd,
+   //     unsigned int, fd,
+   //     unsigned int, cmd,
+   //     qid_t, id,
+   //     void __user *, addr)
+   PRINT("sys_quotactl (0x%" FMT_REGWORD "x, 0x%#" FMT_REGWORD "x, 0x%"
+         FMT_REGWORD "x, 0x%" FMT_REGWORD "x )", ARG1, ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "quotactl_fd",
+                 unsigned int, fd, unsigned int, cmd, vki_qid_t, id,
+                 void *, addr);
+   if (!ML_(fd_allowed)(ARG1, "quotactl_fd", tid, False))
+      SET_STATUS_Failure( VKI_EBADF );
+}
+
 PRE(sys_waitid)
 {
    *flags |= SfMayBlock;
index 3020d15fe37910b909d6278995347e0e59faf2cd..ba5a8bb1790692442968092552865dde004fdd4f 100644 (file)
@@ -1177,6 +1177,7 @@ static SyscallTableEntry syscall_main_table[] = {
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
 
+   LINX_(__NR_quotactl_fd,             sys_quotactl_fd),             // 443
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
    LINX_(__NR_landlock_restrict_self,  sys_landlock_restrict_self),  // 446
index ec6e3fa14138af3968907684e3056d59bc72e5e8..095be9b6ae35aafb856dc75265f410cfe17f7de7 100644 (file)
@@ -819,6 +819,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_listmount, sys_listmount),
    LINX_ (__NR_mseal, sys_mseal),
    LINX_ (__NR_futex_waitv, sys_futex_waitv),
+   LINX_ (__NR_quotactl_fd, sys_quotactl_fd),
 };
 
 SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
index 2a7612ccc4ab8c159944302c65aaa60950d62726..a0e11d5ed6eea8ccf7ae5379f5f22cafaa299654 100644 (file)
@@ -1075,6 +1075,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
+   LINX_ (__NR_quotactl_fd,      sys_quotactl_fd),       // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
index 5b1b0c1aff7f9f2dd59ff493cdc3d1bc083a2c99..d5e2f523c4f3973ef921161a2399363e438b4920 100644 (file)
@@ -1049,6 +1049,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
+   LINX_ (__NR_quotactl_fd,      sys_quotactl_fd),       // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
index a0655706b15a8002633bf369314a60cf147172f0..5134bd17134c3ca2f15e3ee2aeff3c26f9aff223 100644 (file)
@@ -594,6 +594,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_pidfd_getfd, sys_pidfd_getfd),                       /* 438 */
    LINX_(__NR_faccessat2, sys_faccessat2),                         /* 439 */
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),                     /* 441 */
+   LINX_(__NR_quotactl_fd, sys_quotactl_fd),                       /* 443 */
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), /* 444 */
    LINX_(__NR_landlock_add_rule, sys_landlock_add_rule),           /* 445 */
    LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), /* 446 */
index 5a68f14db37ce65f397f0799b2c54b8d00029910..4d794ce81c3a500244faf6fc229d1a1d0f881fd4 100644 (file)
@@ -881,6 +881,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,  sys_faccessat2),                           // 439
 
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),                        // 441
+   LINX_(__NR_quotactl_fd, sys_quotactl_fd),                          // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset),  // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),        // 445
index fb6adff112f9bf538cc101a9a2f10bd90e4f1a54..f129317a82e40279d7725584ea3c1709c0b38392 100644 (file)
@@ -1668,6 +1668,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,       sys_faccessat2),       // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),     // 441
+   LINX_(__NR_quotactl_fd,       sys_quotactl_fd),      // 443
 
    LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444
    LINX_(__NR_landlock_add_rule,       sys_landlock_add_rule),       // 445
index 9c20964c515145c11957e41ca0af7e02c6e82e29..c5f33e935c29eb6d5a55ea4c8cfbe4a3d5a25f8f 100644 (file)
@@ -48,6 +48,7 @@
 
 #define __NR_epoll_pwait2              441
 
+#define __NR_quotactl_fd                443
 #define __NR_landlock_create_ruleset   444
 #define __NR_landlock_add_rule         445
 #define __NR_landlock_restrict_self    446