lkcd
[Top] [All Lists]

Re: Patch to prevent double free in lcrash

To: Michael Holzheu <HOLZHEU@xxxxxxxxxx>
Subject: Re: Patch to prevent double free in lcrash
From: "Matt D. Robinson" <yakker@xxxxxxxxxxx>
Date: Fri, 5 Oct 2001 00:21:32 -0700 (PDT)
Cc: Monty Vanderbilt <mvb@xxxxxxxxxx>, <lkcd@xxxxxxxxxxx>
In-reply-to: <OF48E0CF81.84D6E5AC-ONC1256ADC.0026C13D@de.ibm.com>
Sender: owner-lkcd@xxxxxxxxxxx
Thanks for catching this before me, Michael.  Want me to spin 4.0-2?

--Matt

On Fri, 5 Oct 2001, Michael Holzheu wrote:
|>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>