Page MenuHomeFreeBSD

D55040.diff
No OneTemporary

D55040.diff

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

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)

Event Timeline