From 7f3b86e7bf64a7ad787fdcf71cb7b8ba88865f6c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 26 Apr 2001 19:29:58 +0000 Subject: [PATCH] A fix from Larry for a corner case where insmod could end up doing an xrealloc(0). --- insmod.c | 11 ++++++++--- modutils/insmod.c | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/insmod.c b/insmod.c index 4dd14c6bc..27f4a50e2 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 4dd14c6bc..27f4a50e2 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;