The branch main has been updated by des:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=53af2026f2139ae10ff9178cf2deca2de59fd780

commit 53af2026f2139ae10ff9178cf2deca2de59fd780
Author:     Dag-Erling Smørgrav <[email protected]>
AuthorDate: 2025-12-17 19:38:59 +0000
Commit:     Dag-Erling Smørgrav <[email protected]>
CommitDate: 2025-12-17 19:38:59 +0000

    limits: Unbreak after RLIMIT_VMM addition
    
    Update structures and add assertions to prevent a reoccurrence.
    
    Fixes:          1092ec8b3375 ("kern: Introduce RLIMIT_VMM")
    Reviewed by:    bnovkov, allanjude
    Differential Revision:  https://reviews.freebsd.org/D54273
---
 usr.bin/limits/limits.1 | 10 +++++++---
 usr.bin/limits/limits.c | 18 +++++++++++-------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/usr.bin/limits/limits.1 b/usr.bin/limits/limits.1
index 0e374acd991b..e05685942f60 100644
--- a/usr.bin/limits/limits.1
+++ b/usr.bin/limits/limits.1
@@ -17,7 +17,7 @@
 .\" 5. Modifications may be freely made to this file providing the above
 .\"    conditions are met.
 .\"
-.Dd June 25, 2020
+.Dd December 17, 2025
 .Dt LIMITS 1
 .Os
 .Sh NAME
@@ -28,11 +28,11 @@
 .Op Fl C Ar class | Fl P Ar pid | Fl U Ar user
 .Op Fl SHB
 .Op Fl ea
-.Op Fl bcdfklmnopstuvw Op Ar val
+.Op Fl bcdfklmnopstuVvwy Op Ar val
 .Nm
 .Op Fl C Ar class | Fl U Ar user
 .Op Fl SHB
-.Op Fl bcdfklmnopstuvwy Op Ar val
+.Op Fl bcdfklmnopstuVvwy Op Ar val
 .Op Fl E
 .Oo
 .Op Ar name Ns = Ns Ar value ...
@@ -265,6 +265,10 @@ in the entire system is limited to the value of the
 .Va kern.maxproc
 .Xr sysctl 8
 variable.
+.It Fl V Op Ar val
+Select or set the
+.Va vmms
+resource limit.
 .It Fl v Op Ar val
 Select or set the
 .Va virtualmem
diff --git a/usr.bin/limits/limits.c b/usr.bin/limits/limits.c
index c53066b52a9f..57551c556c25 100644
--- a/usr.bin/limits/limits.c
+++ b/usr.bin/limits/limits.c
@@ -228,7 +228,7 @@ static struct {
 static struct {
     const char * cap;
     rlim_t (*func)(login_cap_t *, const char *, rlim_t, rlim_t);
-} resources[RLIM_NLIMITS] = {
+} resources[] = {
     { "cputime",       login_getcaptime },
     { "filesize",      login_getcapsize },
     { "datasize",      login_getcapsize },
@@ -245,8 +245,12 @@ static struct {
     { "kqueues",       login_getcapnum  },
     { "umtxp",         login_getcapnum  },
     { "pipebuf",       login_getcapnum  },
+    { "vmms",          login_getcapnum  },
 };
 
+_Static_assert(nitems(resources) == RLIM_NLIMITS,
+    "Please add entries to resources[] for the new limits");
+
 /*
  * One letter for each resource levels.
  * NOTE: There is a dependency on the corresponding
@@ -254,8 +258,9 @@ static struct {
  * If sys/resource.h defines are changed, this needs
  * to be modified accordingly!
  */
-
-#define RCS_STRING  "tfdscmlunbvpwkoy"
+static const char rcs_string[] = "tfdscmlunbvpwkoyV";
+_Static_assert(sizeof(rcs_string) - 1 == RLIM_NLIMITS,
+    "Please add letters to rcs_string[] for the new limits");
 
 static rlim_t resource_num(int which, int ch, const char *str);
 static void usage(void) __dead2;
@@ -266,8 +271,6 @@ static void getrlimit_proc(pid_t pid, int resource, struct 
rlimit *rlp);
 static void setrlimit_proc(pid_t pid, int resource, const struct rlimit *rlp);
 extern char **environ;
 
-static const char rcs_string[] = RCS_STRING;
-
 int
 main(int argc, char *argv[])
 {
@@ -295,7 +298,7 @@ main(int argc, char *argv[])
     pid = -1;
     optarg = NULL;
     while ((ch = getopt(argc, argv,
-      ":EeC:U:BSHP:ab:c:d:f:l:m:n:s:t:u:v:p:w:k:o:y:")) != -1) {
+      ":ab:BC:c:d:Eef:Hk:l:m:n:o:P:p:Ss:t:U:u:V:v:w:y:")) != -1) {
        switch(ch) {
        case 'a':
            doall = 1;
@@ -552,7 +555,7 @@ usage(void)
 {
     (void)fprintf(stderr,
        "usage: limits [-C class|-P pid|-U user] [-eaSHBE] "
-       "[-bcdfklmnostuvpw [val]] [[name=val ...] cmd]\n");
+       "[-bcdfklmnostuVvpwy [val]] [[name=val ...] cmd]\n");
     exit(EXIT_FAILURE);
 }
 
@@ -664,6 +667,7 @@ resource_num(int which, int ch, const char *str)
        case RLIMIT_NPTS:
        case RLIMIT_KQUEUES:
        case RLIMIT_UMTXP:
+       case RLIMIT_VMM:
            res = strtoq(s, &e, 0);
            s = e;
            break;

Reply via email to