Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148888845
D55040.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D55040.diff
View Options
diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h
--- a/lib/libc/include/libc_private.h
+++ b/lib/libc/include/libc_private.h
@@ -226,6 +226,7 @@
INTERPOS_sendmsg,
INTERPOS_sendto,
INTERPOS_setcontext,
+ INTERPOS_setrlimit_uid,
INTERPOS_sigaction,
INTERPOS_sigprocmask,
INTERPOS_sigsuspend,
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -29,6 +29,7 @@
recvmmsg.c \
send.c \
sendmmsg.c \
+ setrlimit_uid.c \
shm_open.c \
stat.c \
vadvise.c \
diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map
--- a/lib/libc/sys/Symbol.map
+++ b/lib/libc/sys/Symbol.map
@@ -74,4 +74,5 @@
FBSD_1.9 {
pdwait;
+ setrlimit_uid;
};
diff --git a/lib/libc/sys/setrlimit_uid.c b/lib/libc/sys/setrlimit_uid.c
new file mode 100644
--- /dev/null
+++ b/lib/libc/sys/setrlimit_uid.c
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) Bojan Novković <bnovkov@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "namespace.h"
+#define _WANT_P_OSREL
+#include <sys/param.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+#include "libc_private.h"
+
+#pragma weak setrlimit_uid
+int setrlimit_uid(u_int which, struct rlimit *rlp, uid_t uid)
+{
+ if (__getosreldate() >= P_OSREL_SETRLIMIT_UID)
+ return (INTERPOS_SYS(setrlimit_uid, which, rlp, uid));
+ return (__sys_setrlimit(which, rlp));
+}
diff --git a/lib/libsys/Makefile.sys b/lib/libsys/Makefile.sys
--- a/lib/libsys/Makefile.sys
+++ b/lib/libsys/Makefile.sys
@@ -86,6 +86,7 @@
sendmsg \
sendto \
setcontext \
+ setrlimit_uid \
sigaction \
sigprocmask \
sigsuspend \
diff --git a/lib/libsys/_libsys.h b/lib/libsys/_libsys.h
--- a/lib/libsys/_libsys.h
+++ b/lib/libsys/_libsys.h
@@ -474,6 +474,7 @@
typedef int (__sys_kexec_load_t)(uint64_t, u_long, struct kexec_segment *, u_long);
typedef int (__sys_pdrfork_t)(int *, int, int);
typedef int (__sys_pdwait_t)(int, int *, int, struct __wrusage *, struct __siginfo *);
+typedef int (__sys_setrlimit_uid_t)(u_int, struct rlimit *, uid_t);
_Noreturn void __sys__exit(int rval);
int __sys_fork(void);
@@ -883,6 +884,7 @@
int __sys_kexec_load(uint64_t entry, u_long nseg, struct kexec_segment * segments, u_long flags);
int __sys_pdrfork(int * fdp, int pdflags, int rfflags);
int __sys_pdwait(int fd, int * status, int options, struct __wrusage * wrusage, struct __siginfo * info);
+int __sys_setrlimit_uid(u_int which, struct rlimit * rlp, uid_t uid);
__END_DECLS
#endif /* __LIBSYS_H_ */
diff --git a/lib/libsys/interposing_table.c b/lib/libsys/interposing_table.c
--- a/lib/libsys/interposing_table.c
+++ b/lib/libsys/interposing_table.c
@@ -56,6 +56,7 @@
SLOT(sendmsg, __sys_sendmsg),
SLOT(sendto, __sys_sendto),
SLOT(setcontext, __sys_setcontext),
+ SLOT(setrlimit_uid, __sys_setrlimit_uid),
SLOT(sigaction, __sys_sigaction),
SLOT(sigprocmask, __sys_sigprocmask),
SLOT(sigsuspend, __sys_sigsuspend),
diff --git a/lib/libsys/syscalls.map b/lib/libsys/syscalls.map
--- a/lib/libsys/syscalls.map
+++ b/lib/libsys/syscalls.map
@@ -823,4 +823,6 @@
__sys_pdrfork;
_pdwait;
__sys_pdwait;
+ _setrlimit_uid;
+ __sys_setrlimit_uid;
};
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 21, 7:30 PM (4 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30087544
Default Alt Text
D55040.diff (3 KB)
Attached To
Mode
D55040: lib{c,sys}: Expose setrlimit_uid(2) as an interposed syscall
Attached
Detach File
Event Timeline
Log In to Comment