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
|>
|>
|>
|>
|