aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-02-15 19:07:43 +0000
committerEric Andersen <andersen@codepoet.org>2001-02-15 19:07:43 +0000
commit02b9f42a278c8ee4c9c215eb4addf2a985cc9668 (patch)
tree5b9a4d9676d603ce677ca3a170c692ecf4fa2b05
parent81bcc92c3222fe70116f010c7a8e3e578015022a (diff)
downloadbusybox-02b9f42a278c8ee4c9c215eb4addf2a985cc9668.tar.gz
Patch from Matt Kraai to fix bug #1103. I've tested it,
and it indeed seems to fix things. -Erik
-rw-r--r--insmod.c8
-rw-r--r--modutils/insmod.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/insmod.c b/insmod.c
index 0da0a3962..58273521f 100644
--- a/insmod.c
+++ b/insmod.c
@@ -81,7 +81,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.46 2001/02/14 21:23:06 andersen Exp $"
+#ident "$Id: insmod.c,v 1.47 2001/02/15 19:07:43 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
@@ -287,7 +287,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.46 2001/02/14 21:23:06 andersen Exp $"
+#ident "$Id: insmod.c,v 1.47 2001/02/15 19:07:43 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -2880,6 +2880,7 @@ extern int insmod_main( int argc, char **argv)
ElfW(Addr) m_addr;
FILE *fp;
struct obj_file *f;
+ struct stat st;
char m_name[BUFSIZ + 1] = "\0";
int exit_status = EXIT_FAILURE;
int m_has_modinfo;
@@ -2941,7 +2942,8 @@ extern int insmod_main( int argc, char **argv)
strcat(m_fullName, ".o");
/* Get a filedesc for the module */
- if ((fp = fopen(argv[optind], "r")) == NULL) {
+ if (stat(argv[optind], &st) < 0 || !S_ISREG(st.st_mode) ||
+ (fp = fopen(argv[optind], "r")) == NULL) {
/* Hmpf. Could not open it. Search through _PATH_MODULES to find a module named m_name */
if (recursive_action(_PATH_MODULES, TRUE, FALSE, FALSE,
findNamedModule, 0, m_fullName) == FALSE)
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 0da0a3962..58273521f 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -81,7 +81,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.46 2001/02/14 21:23:06 andersen Exp $"
+#ident "$Id: insmod.c,v 1.47 2001/02/15 19:07:43 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
@@ -287,7 +287,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.46 2001/02/14 21:23:06 andersen Exp $"
+#ident "$Id: insmod.c,v 1.47 2001/02/15 19:07:43 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -2880,6 +2880,7 @@ extern int insmod_main( int argc, char **argv)
ElfW(Addr) m_addr;
FILE *fp;
struct obj_file *f;
+ struct stat st;
char m_name[BUFSIZ + 1] = "\0";
int exit_status = EXIT_FAILURE;
int m_has_modinfo;
@@ -2941,7 +2942,8 @@ extern int insmod_main( int argc, char **argv)
strcat(m_fullName, ".o");
/* Get a filedesc for the module */
- if ((fp = fopen(argv[optind], "r")) == NULL) {
+ if (stat(argv[optind], &st) < 0 || !S_ISREG(st.st_mode) ||
+ (fp = fopen(argv[optind], "r")) == NULL) {
/* Hmpf. Could not open it. Search through _PATH_MODULES to find a module named m_name */
if (recursive_action(_PATH_MODULES, TRUE, FALSE, FALSE,
findNamedModule, 0, m_fullName) == FALSE)