mbuf: Avoid kmalloc "limit" overflow
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 16 Jan 2012 03:51:54 +0000 (11:51 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 16 Jan 2012 03:51:54 +0000 (11:51 +0800)
Cast stack variable cl_limit and mb_limit to size_t when calculate
the kmalloc limit, so large kern.ipc.nmbclusters will not cause
the calculated value overflow.

sys/kern/uipc_mbuf.c

index 08c92bb..6a14919 100644 (file)
@@ -698,13 +698,14 @@ mbinit(void *dummy)
         */
        cl_limit += cl_limit / 8;
        kmalloc_raise_limit(mclmeta_malloc_args.mtype,
-                           mclmeta_malloc_args.objsize * cl_limit);
-       kmalloc_raise_limit(M_MBUFCL, MCLBYTES * cl_limit * 3/4 + MJUMPAGESIZE * cl_limit / 4);
-       /*kmalloc_raise_limit(M_MBUFCL, MCLBYTES * cl_limit);*/
+           mclmeta_malloc_args.objsize * (size_t)cl_limit);
+       kmalloc_raise_limit(M_MBUFCL,
+           ((MCLBYTES * (size_t)cl_limit * 3) / 4) +
+           ((MJUMPAGESIZE * (size_t)cl_limit) / 4));
 
        mb_limit += mb_limit / 8;
        kmalloc_raise_limit(mbuf_malloc_args.mtype,
-                           mbuf_malloc_args.objsize * mb_limit);
+           mbuf_malloc_args.objsize * (size_t)mb_limit);
 }
 
 /*