Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 May 2002 10:20:19 -0700 (PDT)
From:      "Dorr H. Clark" <dclark@applmath.scu.edu>
To:        freebsd-bugs@FreeBSD.ORG
Cc:        Matthew Dillon <dillon@apollo.backplane.com>
Subject:   Re: kern/36504: crash/panic vm_object_allocate under file system code w/fix
Message-ID:  <Pine.GHP.4.21.0205021018001.26625-100000@hpux27.dc.engr.scu.edu>
In-Reply-To: <Pine.GHP.4.21.0204171024110.1958-100000@hpux38.dc.engr.scu.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

On Tue, 2 Apr 2002, Matt Dillon wrote:

> > Second problem: vm_object_allocate() assumes that 
> > the zalloc() will succeed. 

An audit of other references to vm_object_allocate() 
reveals that about half are null tolerant and half are not.

This set of changes cleans up most of the other unprotected
references.

-dhc


--- /usr/src/sys/vm/device_pager.c      Wed Aug  2 14:54:37 2000
+++ device_pager.c      Tue Apr 30 12:44:59 2002
@@ -147,9 +147,11 @@
                 */
                object = vm_object_allocate(OBJT_DEVICE,
                        OFF_TO_IDX(foff + size));
-               object->handle = handle;
-               TAILQ_INIT(&object->un_pager.devp.devp_pglist);
-               TAILQ_INSERT_TAIL(&dev_pager_object_list, object,
pager_object_list);
+               if (object) {
+                       object->handle = handle;
+                       TAILQ_INIT(&object->un_pager.devp.devp_pglist);
+                       TAILQ_INSERT_TAIL(&dev_pager_object_list,
object,
pager_object_list);
+               }
        } else {
                /*
                 * Gain a reference to the object.

--- /usr/src/sys/vm/phys_pager.c        Sat Dec 16 18:05:41 2000
+++ phys_pager.c        Tue Apr 30 12:44:59 2002
@@ -85,9 +85,11 @@
                         */
                        object = vm_object_allocate(OBJT_PHYS,
                                OFF_TO_IDX(foff + size));
-                       object->handle = handle;
-                       TAILQ_INSERT_TAIL(&phys_pager_object_list,
object,
-                           pager_object_list);
+                       if (object) {
+                               object->handle = handle;
+                              
TAILQ_INSERT_TAIL(&phys_pager_object_list, 
+                                       object, pager_object_list);
+                       }
                } else {
                        /*
                         * Gain a reference to the object.

--- /usr/src/sys/vm/swap_pager.c        Fri Aug 24 15:54:33 2001
+++ swap_pager.c        Tue Apr 30 13:13:23 2002
@@ -377,9 +409,10 @@
                } else {
                        object = vm_object_allocate(OBJT_DEFAULT,
                                OFF_TO_IDX(offset + PAGE_MASK + size));
-                       object->handle = handle;
-
-                       swp_pager_meta_build(object, 0, SWAPBLK_NONE);
+                       if (object) {
+                               object->handle = handle;
+                               swp_pager_meta_build(object, 0,
SWAPBLK_NONE);
+                       }
                }
 
                if (sw_alloc_interlock < 0)
@@ -389,8 +422,7 @@
        } else {
                object = vm_object_allocate(OBJT_DEFAULT,
                        OFF_TO_IDX(offset + PAGE_MASK + size));
-
-               swp_pager_meta_build(object, 0, SWAPBLK_NONE);
+               if (object) swp_pager_meta_build(object, 0,
SWAPBLK_NONE);
        }
 
        return (object);


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GHP.4.21.0205021018001.26625-100000>