lkcd
[Top] [All Lists]

Re: Patch to prevent double free in lcrash

To: "Monty Vanderbilt" <mvb@xxxxxxxxxx>
Subject: Re: Patch to prevent double free in lcrash
From: "Michael Holzheu" <HOLZHEU@xxxxxxxxxx>
Date: Fri, 5 Oct 2001 09:08:36 +0200
Cc: lkcd@xxxxxxxxxxx
Importance: Normal
Sender: owner-lkcd@xxxxxxxxxxx

Thanks Monty,

I checked in the following, since free_ptr_module is always 0 in
kl_get_module():


--- kl_util.c   2001/09/12 19:21:21     1.5
+++ kl_util.c   2001/10/05 07:03:55
@@ -426,7 +426,7 @@
 {
        syment_t *sym_module_list = NULL;
        void *dump_page = NULL;
-       int  free_ptr_module = 0, mod_found = 0;
+       int mod_found = 0;
        kaddr_t dump_modname = 0;
        kaddr_t addr_mod = 0;
        size_t size=0;
@@ -465,9 +465,6 @@
                        if(kl_get_structure(addr_mod, "module",
                                            &size, ptr_module)){
                                kl_free_block(dump_page);
-                               if(free_ptr_module){
-                                       kl_free_block(*ptr_module);
-                               }
                                return(1);
                        }
                        *vaddr= addr_mod;
@@ -483,9 +480,6 @@
                if(kl_get_structure(addr_mod, "module",
                                    &size, ptr_module)){
                        kl_free_block(dump_page);
-                       if(free_ptr_module){
-                               kl_free_block(*ptr_module);
-                       }
                        return(1);
                }
                mod_found = 1;
@@ -494,9 +488,6 @@

        kl_free_block(dump_page);
        if(!mod_found){
-               if(free_ptr_module){
-                       kl_free_block(*ptr_module);
-               }
                return(1);
        }
        return(0);
@@ -535,6 +526,7 @@
                if (KL_ERROR) {
                        if(free_ptr){
                                kl_free_block(*ptr);
+                               *ptr = NULL;
                        }
                        return(1);
                }


Regards

       Michael

------------------------------------------------------------------------
Linux/390 Development
Phone: +49-7031-16-2360,  Bld 71032-06-109
Email: holzheu@xxxxxxxxxx


"Monty Vanderbilt" <mvb@xxxxxxxxxx>@oss.sgi.com on 10/04/2001 09:52:10 PM

Please respond to "Monty Vanderbilt" <mvb@xxxxxxxxxx>

Sent by:  owner-lkcd@xxxxxxxxxxx


To:   <lkcd@xxxxxxxxxxx>
cc:
Subject:  Patch to prevent double free in lcrash



This patch prevents a segment violation from a double free when lcrash
can't
read data from /dev/mem.

--- libklib/kl_util.c    Wed Sep 12 12:21:21 2001
+++ libklib/kl_util.c    Tue Oct  2 12:54:10 2001
@@ -466,8 +466,9 @@
                             &size, ptr_module)){
                    kl_free_block(dump_page);
                    if(free_ptr_module){
                         kl_free_block(*ptr_module);
+                        *ptr_module = 0;
                    }
                    return(1);
               }
               *vaddr= addr_mod;
@@ -484,8 +485,9 @@
                        &size, ptr_module)){
               kl_free_block(dump_page);
               if(free_ptr_module){
                    kl_free_block(*ptr_module);
+                   *ptr_module = 0;
               }
               return(1);
          }
          mod_found = 1;
@@ -495,8 +497,9 @@
     kl_free_block(dump_page);
     if(!mod_found){
          if(free_ptr_module){
               kl_free_block(*ptr_module);
+              *ptr_module = 0;
          }
          return(1);
     }
     return(0);
@@ -534,8 +537,9 @@
          GET_BLOCK(vaddr, *size, *ptr);
          if (KL_ERROR) {
               if(free_ptr){
                    kl_free_block(*ptr);
+                   *ptr = 0;
               }
               return(1);
          }
     } else {

Monty VanderBilt





<Prev in Thread] Current Thread [Next in Thread>