mbuf: Don't allow mbuf thresholds be configured too low.
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 24 Jul 2015 13:00:09 +0000 (21:00 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 24 Jul 2015 15:43:16 +0000 (23:43 +0800)
They still could be configured to a low value through tunables though.

sys/kern/uipc_mbuf.c

index 3dbf163..df3daba 100644 (file)
@@ -420,6 +420,10 @@ static void m_mjclfree(void *arg);
 #define NMBUFS         (nmbclusters * 2 + maxfiles)
 #endif
 
+#define NMBCLUSTERS_MIN        (NMBCLUSTERS / 2)
+#define NMBJCLUSTERS_MIN (NMBJCLUSTERS / 2)
+#define NMBUFS_MIN     ((NMBCLUSTERS * 2 + maxfiles) / 2)
+
 /*
  * Perform sanity checks of tunables declared above.
  */
@@ -480,6 +484,9 @@ sysctl_nmbclusters(SYSCTL_HANDLER_ARGS)
        if (error || req->newptr == NULL)
                return error;
 
+       if (value < NMBCLUSTERS_MIN)
+               return EINVAL;
+
        lockmgr(&mbupdate_lk, LK_EXCLUSIVE);
        if (nmbclusters != value) {
                nmbclusters = value;
@@ -500,6 +507,9 @@ sysctl_nmbjclusters(SYSCTL_HANDLER_ARGS)
        if (error || req->newptr == NULL)
                return error;
 
+       if (value < NMBJCLUSTERS_MIN)
+               return EINVAL;
+
        lockmgr(&mbupdate_lk, LK_EXCLUSIVE);
        if (nmbjclusters != value) {
                nmbjclusters = value;
@@ -520,6 +530,9 @@ sysctl_nmbufs(SYSCTL_HANDLER_ARGS)
        if (error || req->newptr == NULL)
                return error;
 
+       if (value < NMBUFS_MIN)
+               return EINVAL;
+
        lockmgr(&mbupdate_lk, LK_EXCLUSIVE);
        if (nmbufs != value) {
                nmbufs = value;