summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.demarchi@intel.com>2018-01-03 14:14:06 -0800
committerLucas De Marchi <lucas.demarchi@intel.com>2018-01-03 14:23:31 -0800
commit77d7bd9eca764d6870398b9c2e47345d6f0e4552 (patch)
tree035d739ad443bef2dc18912547c447e6b712a891
parent568b1c86cc4873c03c2df1c14cdf6dc4acfdc896 (diff)
downloadkmod-77d7bd9eca764d6870398b9c2e47345d6f0e4552.tar.gz
kmod-77d7bd9eca764d6870398b9c2e47345d6f0e4552.zip
testsuite: explain why overriding function may fail
On my computer `testsuite/test-modprobe modprobe_install_cmd_loop` was failing because when it forks off the shell the child process ends up calling syscall() which are are supposed to wrap. Here's the backtrace: #0 0x00007ffff6fdb66b in raise () from /lib64/libc.so.6 #1 0x00007ffff6fdd381 in abort () from /lib64/libc.so.6 #2 0x00007ffff77bac97 in syscall (__sysno=<optimized out>) at testsuite/init_module.c:362 #3 0x00007fffef92d4e7 in hashmap_base_new.lto_priv () from /lib64/libnss_systemd.so.2 #4 0x00007fffef953f50 in sd_bus_open_system () from /lib64/libnss_systemd.so.2 #5 0x00007fffef943123 in _nss_systemd_getpwuid_r () from /lib64/libnss_systemd.so.2 #6 0x00007ffff707eea5 in getpwuid_r@@GLIBC_2.2.5 () from /lib64/libc.so.6 #7 0x00007ffff707e608 in getpwuid () from /lib64/libc.so.6 #8 0x00005555555859e1 in get_current_user_info.part () #9 0x00005555555a375a in initialize_shell_variables () #10 0x0000555555580fde in shell_initialize () #11 0x00005555555846ff in main ()<Paste> The reason it fails on my system and not on, for e.g., a new one set up with mkosi is that the call to getpwuid() depends on the contents /etc/nsswitch.conf. The systemd module calls syscall() to implement gettid() which we can't forward due to being a variadic function. No fix is provided here, but at least it's explained why this happens.
-rw-r--r--testsuite/init_module.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/testsuite/init_module.c b/testsuite/init_module.c
index b7d220b..199186b 100644
--- a/testsuite/init_module.c
+++ b/testsuite/init_module.c
@@ -356,9 +356,14 @@ TS_EXPORT long int syscall(long int __sysno, ...)
}
/*
- * FIXME: no way to call the libc function - let's hope there are no
- * other users.
+ * FIXME: no way to call the libc function due since this is a
+ * variadic argument function and we don't have a vsyscall() variant
+ * this may fail if a library or process is trying to call syscall()
+ * directly, for example to implement gettid().
*/
+ fprintf(stderr, "FIXME FIXME FIXME: could not wrap call to syscall(%ld), this should not happen\n",
+ __sysno);
+
abort();
}