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
|