diff --git a/modutils/insmod.c b/modutils/insmod.c index f7e9a6672..30d471b78 100644 --- a/modutils/insmod.c +++ b/modutils/insmod.c @@ -4184,8 +4184,14 @@ int insmod_main(int argc, char **argv) #if ENABLE_FEATURE_2_6_MODULES #include + +#ifdef __UCLIBC__ +extern int init_module(void *module, unsigned long len, const char *options); +#else #include #include +#define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts) +#endif /* We use error numbers in a loose translation... */ static const char *moderror(int err) @@ -4257,10 +4263,9 @@ static int insmod_ng_main(int argc ATTRIBUTE_UNUSED, char **argv) map = xmalloc_open_read_close(filename, &len); #endif - if (syscall(__NR_init_module, map, len, options) != 0) + if (init_module(map, len, options) != 0) bb_error_msg_and_die("cannot insert '%s': %s", filename, moderror(errno)); - return 0; } diff --git a/modutils/rmmod.c b/modutils/rmmod.c index 61cfbd147..a96a27457 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c @@ -8,7 +8,13 @@ */ #include "libbb.h" -#include + +#ifdef __UCLIBC__ +extern int delete_module(const char *module, unsigned int flags); +#else +# include +# define delete_module(mod, flags) syscall(__NR_delete_module, mod, flags) +#endif #if ENABLE_FEATURE_2_6_MODULES static inline void filename2modname(char *modname, const char *afterslash) @@ -59,7 +65,7 @@ int rmmod_main(int argc, char **argv) size_t pnmod = -1; /* previous number of modules */ while (nmod != pnmod) { - if (syscall(__NR_delete_module, NULL, flags) != 0) { + if (delete_module(NULL, flags) != 0) { if (errno == EFAULT) return ret; bb_perror_msg_and_die("rmmod"); @@ -84,7 +90,7 @@ int rmmod_main(int argc, char **argv) filename2modname(misc_buf, bb_basename(argv[n])); } - if (syscall(__NR_delete_module, ENABLE_FEATURE_2_6_MODULES ? misc_buf : argv[n], flags)) { + if (delete_module(ENABLE_FEATURE_2_6_MODULES ? misc_buf : argv[n], flags)) { bb_simple_perror_msg(argv[n]); ret = EXIT_FAILURE; }