summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen2001-04-26 19:29:58 +0000
committerEric Andersen2001-04-26 19:29:58 +0000
commit7f3b86e7bf64a7ad787fdcf71cb7b8ba88865f6c (patch)
treecedb68994122d2d8666a871f73401f72d9ec0d8d
parent6aabfd5e30087bb0ffdb6404aa6d650014de2dc0 (diff)
downloadbusybox-7f3b86e7bf64a7ad787fdcf71cb7b8ba88865f6c.zip
busybox-7f3b86e7bf64a7ad787fdcf71cb7b8ba88865f6c.tar.gz
A fix from Larry for a corner case where insmod could end up
doing an xrealloc(0).
-rw-r--r--insmod.c11
-rw-r--r--modutils/insmod.c11
2 files changed, 16 insertions, 6 deletions
diff --git a/insmod.c b/insmod.c
index 4dd14c6..27f4a50 100644
--- a/insmod.c
+++ b/insmod.c
@@ -124,7 +124,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.59 2001/04/25 17:22:32 andersen Exp $"
+#ident "$Id: insmod.c,v 1.60 2001/04/26 19:29:58 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -330,7 +330,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.59 2001/04/25 17:22:32 andersen Exp $"
+#ident "$Id: insmod.c,v 1.60 2001/04/26 19:29:58 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -1536,7 +1536,9 @@ struct obj_section *obj_create_alloced_section_first(struct obj_file *f,
void *obj_extend_section(struct obj_section *sec, unsigned long more)
{
unsigned long oldsize = sec->header.sh_size;
- sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ if (more) {
+ sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ }
return sec->contents + oldsize;
}
@@ -2474,6 +2476,9 @@ new_init_module(const char *m_name, struct obj_file *f,
tgt_long m_addr;
sec = obj_find_section(f, ".this");
+ if (!sec || !sec->contents) {
+ perror_msg_and_die("corrupt module %s?",m_name);
+ }
module = (struct new_module *) sec->contents;
m_addr = sec->header.sh_addr;
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 4dd14c6..27f4a50 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -124,7 +124,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.59 2001/04/25 17:22:32 andersen Exp $"
+#ident "$Id: insmod.c,v 1.60 2001/04/26 19:29:58 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -330,7 +330,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.59 2001/04/25 17:22:32 andersen Exp $"
+#ident "$Id: insmod.c,v 1.60 2001/04/26 19:29:58 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -1536,7 +1536,9 @@ struct obj_section *obj_create_alloced_section_first(struct obj_file *f,
void *obj_extend_section(struct obj_section *sec, unsigned long more)
{
unsigned long oldsize = sec->header.sh_size;
- sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ if (more) {
+ sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ }
return sec->contents + oldsize;
}
@@ -2474,6 +2476,9 @@ new_init_module(const char *m_name, struct obj_file *f,
tgt_long m_addr;
sec = obj_find_section(f, ".this");
+ if (!sec || !sec->contents) {
+ perror_msg_and_die("corrupt module %s?",m_name);
+ }
module = (struct new_module *) sec->contents;
m_addr = sec->header.sh_addr;