Page MenuHomeFreeBSD

D26777.id78298.diff
No OneTemporary

D26777.id78298.diff

Index: head/sys/compat/linux/linux_misc.h
===================================================================
--- head/sys/compat/linux/linux_misc.h
+++ head/sys/compat/linux/linux_misc.h
@@ -137,12 +137,12 @@
#define LINUX_P_PID 1
#define LINUX_P_PGID 2
-#define LINUX_RLIMIT_LOCKS RLIM_NLIMITS + 1
-#define LINUX_RLIMIT_SIGPENDING RLIM_NLIMITS + 2
-#define LINUX_RLIMIT_MSGQUEUE RLIM_NLIMITS + 3
-#define LINUX_RLIMIT_NICE RLIM_NLIMITS + 4
-#define LINUX_RLIMIT_RTPRIO RLIM_NLIMITS + 5
-#define LINUX_RLIMIT_RTTIME RLIM_NLIMITS + 6
+#define LINUX_RLIMIT_LOCKS 10
+#define LINUX_RLIMIT_SIGPENDING 11
+#define LINUX_RLIMIT_MSGQUEUE 12
+#define LINUX_RLIMIT_NICE 13
+#define LINUX_RLIMIT_RTPRIO 14
+#define LINUX_RLIMIT_RTTIME 15
#define LINUX_RLIM_INFINITY (~0UL)
Index: head/sys/compat/linux/linux_misc.c
===================================================================
--- head/sys/compat/linux/linux_misc.c
+++ head/sys/compat/linux/linux_misc.c
@@ -1373,6 +1373,28 @@
return (0);
}
+static bool
+linux_get_dummy_limit(l_uint resource, struct rlimit *rlim)
+{
+
+ switch (resource) {
+ case LINUX_RLIMIT_LOCKS:
+ case LINUX_RLIMIT_SIGPENDING:
+ case LINUX_RLIMIT_MSGQUEUE:
+ case LINUX_RLIMIT_RTTIME:
+ rlim->rlim_cur = LINUX_RLIM_INFINITY;
+ rlim->rlim_max = LINUX_RLIM_INFINITY;
+ return (true);
+ case LINUX_RLIMIT_NICE:
+ case LINUX_RLIMIT_RTPRIO:
+ rlim->rlim_cur = 0;
+ rlim->rlim_max = 0;
+ return (true);
+ default:
+ return (false);
+ }
+}
+
int
linux_setrlimit(struct thread *td, struct linux_setrlimit_args *args)
{
@@ -1405,6 +1427,12 @@
struct rlimit bsd_rlim;
u_int which;
+ if (linux_get_dummy_limit(args->resource, &bsd_rlim)) {
+ rlim.rlim_cur = bsd_rlim.rlim_cur;
+ rlim.rlim_max = bsd_rlim.rlim_max;
+ return (copyout(&rlim, args->rlim, sizeof(rlim)));
+ }
+
if (args->resource >= LINUX_RLIM_NLIMITS)
return (EINVAL);
@@ -1440,6 +1468,12 @@
struct rlimit bsd_rlim;
u_int which;
+ if (linux_get_dummy_limit(args->resource, &bsd_rlim)) {
+ rlim.rlim_cur = bsd_rlim.rlim_cur;
+ rlim.rlim_max = bsd_rlim.rlim_max;
+ return (copyout(&rlim, args->rlim, sizeof(rlim)));
+ }
+
if (args->resource >= LINUX_RLIM_NLIMITS)
return (EINVAL);
@@ -2137,6 +2171,14 @@
u_int which;
int flags;
int error;
+
+ if (args->new == NULL && args->old != NULL) {
+ if (linux_get_dummy_limit(args->resource, &rlim)) {
+ lrlim.rlim_cur = rlim.rlim_cur;
+ lrlim.rlim_max = rlim.rlim_max;
+ return (copyout(&lrlim, args->old, sizeof(lrlim)));
+ }
+ }
if (args->resource >= LINUX_RLIM_NLIMITS)
return (EINVAL);

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 23, 10:47 PM (7 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24092997
Default Alt Text
D26777.id78298.diff (2 KB)

Event Timeline