Author: blueswirl
Date: 2007-06-27 22:16:01 +0200 (Wed, 27 Jun 2007)
New Revision: 155
Modified:
openbios-devel/arch/sparc32/boot.c
openbios-devel/drivers/esp.c
openbios-devel/drivers/obio.c
openbios-devel/modules/bindings.c
openbios-devel/modules/video.c
Log:
Fix pop_fstr_copy memory leaks
- console one prevented Debian 3.1r1 from installing in console=prom mode
- fixing this also needed the real malloc/free
Modified: openbios-devel/arch/sparc32/boot.c
===================================================================
--- openbios-devel/arch/sparc32/boot.c 2007-06-27 20:11:08 UTC (rev 154)
+++ openbios-devel/arch/sparc32/boot.c 2007-06-27 20:16:01 UTC (rev 155)
@@ -45,18 +45,18 @@
} else {
switch (boot_device) {
case 'a':
- path = "/obio/SUNW,fdtwo";
+ path = strdup("/obio/SUNW,fdtwo");
oldpath = "fd()";
unit = 0;
break;
case 'c':
- path = "disk";
+ path = strdup("disk");
oldpath = "sd(0,0,0):d";
unit = 0;
break;
default:
case 'd':
- path = "cdrom";
+ path = strdup("cdrom");
// FIXME: hardcoding this looks almost definitely wrong.
// With sd(0,2,0):b we get to see the solaris kernel though
//oldpath = "sd(0,2,0):d";
@@ -64,7 +64,7 @@
unit = 2;
break;
case 'n':
- path = "net";
+ path = strdup("net");
oldpath = "le()";
unit = 0;
break;
Modified: openbios-devel/drivers/esp.c
===================================================================
--- openbios-devel/drivers/esp.c 2007-06-27 20:11:08 UTC (rev 154)
+++ openbios-devel/drivers/esp.c 2007-06-27 20:16:01 UTC (rev 155)
@@ -279,8 +279,14 @@
*sd = &global_esp->sd[id];
#ifdef CONFIG_DEBUG_ESP
- fword("my-args");
- DPRINTF("opening drive %d args %s\n", id, pop_fstr_copy());
+ {
+ char *args;
+
+ fword("my-args");
+ args = pop_fstr_copy();
+ DPRINTF("opening drive %d args %s\n", id, args);
+ free(args);
+ }
#endif
selfword("open-deblocker");
Modified: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c 2007-06-27 20:11:08 UTC (rev 154)
+++ openbios-devel/drivers/obio.c 2007-06-27 20:16:01 UTC (rev 155)
@@ -223,10 +223,13 @@
*address = *prop;
fword("my-args");
args = pop_fstr_copy();
- if (args && args[0] == 'a')
- *address += 4;
+ if (args) {
+ if (args[0] == 'a')
+ *address += 4;
+ //printk("zs_open: address %lx, args %s\n", *address, args);
+ free(args);
+ }
- //printk("zs_open: address %lx, args %s\n", *address, args);
RET ( -1 );
}
Modified: openbios-devel/modules/bindings.c
===================================================================
--- openbios-devel/modules/bindings.c 2007-06-27 20:11:08 UTC (rev 154)
+++ openbios-devel/modules/bindings.c 2007-06-27 20:16:01 UTC (rev 155)
@@ -253,6 +253,8 @@
if( !len )
return NULL;
str = malloc( len + 1 );
+ if( !str )
+ return NULL;
memcpy( str, p, len );
str[len] = 0;
return str;
Modified: openbios-devel/modules/video.c
===================================================================
--- openbios-devel/modules/video.c 2007-06-27 20:11:08 UTC (rev 154)
+++ openbios-devel/modules/video.c 2007-06-27 20:16:01 UTC (rev 155)
@@ -253,6 +253,7 @@
addr = pop_fstr_copy();
console_draw_str(addr);
+ free(addr);
PUSH(len);
}