summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2016-03-12 14:54:34 +0000
committerkib <kib@FreeBSD.org>2016-03-12 14:54:34 +0000
commitc25914807466d1029480aca4fac687af6e2e1918 (patch)
tree69599a8cabd37a03a7aef687faef00d3bf85ab4c
parent3c057e4b1fa0583a4ca025153e05a66869a4396e (diff)
downloadFreeBSD-src-c25914807466d1029480aca4fac687af6e2e1918.zip
FreeBSD-src-c25914807466d1029480aca4fac687af6e2e1918.tar.gz
Fix handling of umtxp resource limit in sh(1)/ulimit(1), limits(1), add
login.conf(5) support. Reviewed by: jilles Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D5610
-rw-r--r--bin/sh/miscbltin.c2
-rw-r--r--bin/sh/sh.17
-rw-r--r--etc/login.conf1
-rw-r--r--lib/libutil/login.conf.51
-rw-r--r--lib/libutil/login_class.31
-rw-r--r--lib/libutil/login_class.c1
-rw-r--r--usr.bin/limits/limits.120
-rw-r--r--usr.bin/limits/limits.c5
8 files changed, 28 insertions, 10 deletions
diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c
index 9dae4cb..1537196 100644
--- a/bin/sh/miscbltin.c
+++ b/bin/sh/miscbltin.c
@@ -452,7 +452,7 @@ ulimitcmd(int argc __unused, char **argv __unused)
struct rlimit limit;
what = 'f';
- while ((optc = nextopt("HSatfdsmcnuvlbpwk")) != '\0')
+ while ((optc = nextopt("HSatfdsmcnuvlbpwko")) != '\0')
switch (optc) {
case 'H':
how = HARD;
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
index 9406779..1f2d67b 100644
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -2615,7 +2615,7 @@ and not found.
For aliases the alias expansion is printed;
for commands and tracked aliases
the complete pathname of the command is printed.
-.It Ic ulimit Oo Fl HSabcdfklmnpstuvw Oc Op Ar limit
+.It Ic ulimit Oo Fl HSabcdfklmnopstuvw Oc Op Ar limit
Set or display resource limits (see
.Xr getrlimit 2 ) .
If
@@ -2674,6 +2674,11 @@ kilobytes.
The maximal resident set size of a process, in kilobytes.
.It Fl n Ar nofiles
The maximal number of descriptors that could be opened by a process.
+.It Fl o Ar umtxp
+The maximal number of process-shared locks
+(see
+.Xr pthread 3 )
+for this user ID.
.It Fl p Ar pseudoterminals
The maximal number of pseudo-terminals for this user ID.
.It Fl s Ar stacksize
diff --git a/etc/login.conf b/etc/login.conf
index 2cc6730..e352f7f 100644
--- a/etc/login.conf
+++ b/etc/login.conf
@@ -43,6 +43,7 @@ default:\
:swapuse=unlimited:\
:pseudoterminals=unlimited:\
:kqueues=unlimited:\
+ :umtxp=unlimited:\
:priority=0:\
:ignoretime@:\
:umask=022:
diff --git a/lib/libutil/login.conf.5 b/lib/libutil/login.conf.5
index e780940..1c3cfee 100644
--- a/lib/libutil/login.conf.5
+++ b/lib/libutil/login.conf.5
@@ -199,6 +199,7 @@ notation may be used.
.It "stacksize size Maximum stack size limit."
.It "pseudoterminals number Maximum number of pseudo-terminals."
.It "swapuse size Maximum swap space size limit."
+.It "umtxp number Maximum number of process-shared pthread locks."
.El
.Pp
These resource limit entries actually specify both the maximum
diff --git a/lib/libutil/login_class.3 b/lib/libutil/login_class.3
index c87faae..ab2e8af 100644
--- a/lib/libutil/login_class.3
+++ b/lib/libutil/login_class.3
@@ -119,6 +119,7 @@ vmemoryuse RLIMIT_VMEM
pseudoterminals RLIMIT_NPTS
swapuse RLIMIT_SWAP
kqueues RLIMIT_KQUEUES
+umtxp RLIMIT_UMTXP
.Ed
.It LOGIN_SETPRIORITY
Set the scheduling priority for the current process based on the
diff --git a/lib/libutil/login_class.c b/lib/libutil/login_class.c
index 9ffca8e..ceee5c8 100644
--- a/lib/libutil/login_class.c
+++ b/lib/libutil/login_class.c
@@ -67,6 +67,7 @@ static struct login_res {
{ "pseudoterminals", login_getcapnum, RLIMIT_NPTS },
{ "swapuse", login_getcapsize, RLIMIT_SWAP },
{ "kqueues", login_getcapsize, RLIMIT_KQUEUES },
+ { "umtxp", login_getcapnum, RLIMIT_UMTXP },
{ NULL, 0, 0 }
};
diff --git a/usr.bin/limits/limits.1 b/usr.bin/limits/limits.1
index 3962fef..99136a4 100644
--- a/usr.bin/limits/limits.1
+++ b/usr.bin/limits/limits.1
@@ -30,11 +30,11 @@
.Op Fl C Ar class | Fl P Ar pid | Fl U Ar user
.Op Fl SHB
.Op Fl ea
-.Op Fl bcdfklmnstuvpw Op Ar val
+.Op Fl bcdfklmnopstuvw Op Ar val
.Nm
.Op Fl C Ar class | Fl U Ar user
.Op Fl SHB
-.Op Fl bcdfklmnstuvpw Op Ar val
+.Op Fl bcdfklmnopstuvw Op Ar val
.Op Fl E
.Oo
.Op Ar name Ns = Ns Ar value ...
@@ -233,6 +233,18 @@ system is limited to the value displayed by the
.Va kern.maxfiles
.Xr sysctl 8
variable.
+.It Fl o Op Ar val
+Select or set the
+.Va umtxp
+resource limit.
+The limit determines the maximal number of the process-shared locks
+which may be simultaneously created by the processes owned by the
+user, see
+.Xr pthread 3 .
+.It Fl p Op Ar val
+Select or set the
+.Va pseudoterminals
+resource limit.
.It Fl s Op Ar val
Select or set the
.Va stacksize
@@ -266,10 +278,6 @@ and is inclusive of text, data, bss, stack,
and
.Xr mmap 2 Ns 'd
space.
-.It Fl p Op Ar val
-Select or set the
-.Va pseudoterminals
-resource limit.
.It Fl w Op Ar val
Select or set the
.Va swapuse
diff --git a/usr.bin/limits/limits.c b/usr.bin/limits/limits.c
index 093a367..3dd7a71 100644
--- a/usr.bin/limits/limits.c
+++ b/usr.bin/limits/limits.c
@@ -254,7 +254,7 @@ static struct {
* to be modified accordingly!
*/
-#define RCS_STRING "tfdscmlunbvpwk"
+#define RCS_STRING "tfdscmlunbvpwko"
static rlim_t resource_num(int which, int ch, const char *str);
static void usage(void);
@@ -551,7 +551,7 @@ usage(void)
{
(void)fprintf(stderr,
"usage: limits [-C class|-P pid|-U user] [-eaSHBE] "
- "[-bcdflmnstuvpwk [val]] [[name=val ...] cmd]\n");
+ "[-bcdfklmnostuvpw [val]] [[name=val ...] cmd]\n");
exit(EXIT_FAILURE);
}
@@ -660,6 +660,7 @@ resource_num(int which, int ch, const char *str)
case RLIMIT_NOFILE:
case RLIMIT_NPTS:
case RLIMIT_KQUEUES:
+ case RLIMIT_UMTXP:
res = strtoq(s, &e, 0);
s = e;
break;
OpenPOWER on IntegriCloud