David Frascone <dave@frascone.com> noticed two problems. First, modprobe was

trying to call 'insmod -q', which wasn't supported.  Secondly, when modprobe
was fed blank lines from modules.dep, we ended up calling xstrndup(ptr, -1),
which with suitably bad results.  David provided a patch to catch the blank
lines, and I have added insmod -q support.  So modprobe should work again.
 -Erik
This commit is contained in:
Eric Andersen 2002-07-02 19:14:23 +00:00
parent 69d4178708
commit b493dec91e
2 changed files with 40 additions and 29 deletions

View File

@ -233,7 +233,7 @@
#ifndef MODUTILS_MODULE_H #ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1; static const int MODUTILS_MODULE_H = 1;
#ident "$Id: insmod.c,v 1.86 2002/06/22 17:15:42 andersen Exp $" #ident "$Id: insmod.c,v 1.87 2002/07/02 19:14:23 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels. /* 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 We do not use the kernel headers directly because we do not wish
@ -454,7 +454,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H #ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1; static const int MODUTILS_OBJ_H = 1;
#ident "$Id: insmod.c,v 1.86 2002/06/22 17:15:42 andersen Exp $" #ident "$Id: insmod.c,v 1.87 2002/07/02 19:14:23 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */ /* The relocatable object is manipulated using elfin types. */
@ -657,6 +657,7 @@ static const int STRVERSIONLEN = 32;
static int flag_force_load = 0; static int flag_force_load = 0;
static int flag_autoclean = 0; static int flag_autoclean = 0;
static int flag_verbose = 0; static int flag_verbose = 0;
static int flag_quiet = 0;
static int flag_export = 1; static int flag_export = 1;
@ -2877,7 +2878,9 @@ static int obj_check_undefineds(struct obj_file *f)
sym->secidx = SHN_ABS; sym->secidx = SHN_ABS;
sym->value = 0; sym->value = 0;
} else { } else {
error_msg("unresolved symbol %s", sym->name); if (!flag_quiet) {
error_msg("unresolved symbol %s", sym->name);
}
ret = 0; ret = 0;
} }
} }
@ -3447,7 +3450,7 @@ extern int insmod_main( int argc, char **argv)
#endif #endif
/* Parse any options */ /* Parse any options */
while ((opt = getopt(argc, argv, "fksvxLo:")) > 0) { while ((opt = getopt(argc, argv, "fkqsvxLo:")) > 0) {
switch (opt) { switch (opt) {
case 'f': /* force loading */ case 'f': /* force loading */
flag_force_load = 1; flag_force_load = 1;
@ -3464,6 +3467,9 @@ extern int insmod_main( int argc, char **argv)
case 'v': /* verbose output */ case 'v': /* verbose output */
flag_verbose = 1; flag_verbose = 1;
break; break;
case 'q': /* silent */
flag_quiet = 1;
break;
case 'x': /* do not export externs */ case 'x': /* do not export externs */
flag_export = 0; flag_export = 0;
break; break;
@ -3566,32 +3572,33 @@ extern int insmod_main( int argc, char **argv)
#ifdef CONFIG_FEATURE_INSMOD_VERSION_CHECKING #ifdef CONFIG_FEATURE_INSMOD_VERSION_CHECKING
/* Version correspondence? */ /* Version correspondence? */
if (!flag_quiet) {
if (uname(&uts_info) < 0) if (uname(&uts_info) < 0)
uts_info.release[0] = '\0'; uts_info.release[0] = '\0';
if (m_has_modinfo) { if (m_has_modinfo) {
m_version = new_get_module_version(f, m_strversion); m_version = new_get_module_version(f, m_strversion);
} else {
m_version = old_get_module_version(f, m_strversion);
if (m_version == -1) {
error_msg("couldn't find the kernel version the module was "
"compiled for");
goto out;
}
}
if (strncmp(uts_info.release, m_strversion, STRVERSIONLEN) != 0) {
if (flag_force_load) {
error_msg("Warning: kernel-module version mismatch\n"
"\t%s was compiled for kernel version %s\n"
"\twhile this kernel is version %s",
m_filename, m_strversion, uts_info.release);
} else { } else {
error_msg("kernel-module version mismatch\n" m_version = old_get_module_version(f, m_strversion);
"\t%s was compiled for kernel version %s\n" if (m_version == -1) {
"\twhile this kernel is version %s.", error_msg("couldn't find the kernel version the module was "
m_filename, m_strversion, uts_info.release); "compiled for");
goto out; goto out;
}
}
if (strncmp(uts_info.release, m_strversion, STRVERSIONLEN) != 0) {
if (flag_force_load) {
error_msg("Warning: kernel-module version mismatch\n"
"\t%s was compiled for kernel version %s\n"
"\twhile this kernel is version %s",
m_filename, m_strversion, uts_info.release);
} else {
error_msg("kernel-module version mismatch\n"
"\t%s was compiled for kernel version %s\n"
"\twhile this kernel is version %s.",
m_filename, m_strversion, uts_info.release);
goto out;
}
} }
} }
k_crcs = 0; k_crcs = 0;

View File

@ -178,6 +178,10 @@ static struct dep_t *build_dep ( void )
if (( *(end-1) == '.' ) && ( *end == 'o' )) if (( *(end-1) == '.' ) && ( *end == 'o' ))
ext = 2; ext = 2;
/* Cope with blank lines */
if ((end-deps-ext+1) <= 0)
continue;
dep = xstrndup ( deps, end - deps - ext + 1 ); dep = xstrndup ( deps, end - deps - ext + 1 );