[COMMIT osv master] Implement prlimit syscall

2 views
Skip to first unread message

Commit Bot

unread,
Nov 4, 2023, 1:34:17 PM11/4/23
to osv...@googlegroups.com, Waldemar Kozaczuk
From: Waldemar Kozaczuk <jwkoz...@gmail.com>
Committer: WALDEMAR KOZACZUK <jwkoz...@gmail.com>
Branch: master

Implement prlimit syscall

Signed-off-by: Waldemar Kozaczuk <jwkoz...@gmail.com>

---
diff --git a/exported_symbols/osv_ld-musl.so.1.symbols b/exported_symbols/osv_ld-musl.so.1.symbols
--- a/exported_symbols/osv_ld-musl.so.1.symbols
+++ b/exported_symbols/osv_ld-musl.so.1.symbols
@@ -740,6 +740,8 @@ pread64
preadv
preadv64
printf
+prlimit
+prlimit64
__progname
__progname_full
program_invocation_name
diff --git a/exported_symbols/osv_libc.so.6.symbols b/exported_symbols/osv_libc.so.6.symbols
--- a/exported_symbols/osv_libc.so.6.symbols
+++ b/exported_symbols/osv_libc.so.6.symbols
@@ -610,6 +610,8 @@ __pread64_chk
preadv
preadv64
printf
+prlimit
+prlimit64
__printf_chk
__progname
__progname_full
diff --git a/libc/libc.cc b/libc/libc.cc
--- a/libc/libc.cc
+++ b/libc/libc.cc
@@ -102,8 +102,28 @@ int setrlimit(int resource, const struct rlimit *rlim)
// osv - no limits
return 0;
}
+
+int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit)
+{
+ if (pid != getpid() && pid != 0) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (old_limit && getrlimit(resource, old_limit)) {
+ return -1;
+ }
+
+ if (new_limit && setrlimit(resource, new_limit)) {
+ return -1;
+ }
+
+ return 0;
+}
LFS64(getrlimit);
LFS64(setrlimit);
+#undef prlimit64
+LFS64(prlimit);

uid_t geteuid()
{
diff --git a/linux.cc b/linux.cc
--- a/linux.cc
+++ b/linux.cc
@@ -699,6 +699,7 @@ OSV_LIBC_API long syscall(long number, ...)
SYSCALL5(sys_clone, unsigned long, void *, int *, int *, unsigned long);
SYSCALL2(sys_clone3, struct clone_args *, size_t);
#endif
+ SYSCALL4(prlimit64, pid_t, int, const struct rlimit *, struct rlimit *);
}

debug_always("syscall(): unimplemented system call %d\n", number);
Reply all
Reply to author
Forward
0 new messages