summaryrefslogtreecommitdiffstats
path: root/runtime/staprun/staprun.c
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/staprun/staprun.c')
-rw-r--r--runtime/staprun/staprun.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/runtime/staprun/staprun.c b/runtime/staprun/staprun.c
index b568c867..42b72ff1 100644
--- a/runtime/staprun/staprun.c
+++ b/runtime/staprun/staprun.c
@@ -102,6 +102,7 @@ static int enable_uprobes(void)
{
int i;
char *argv[10];
+ char runtimeko[2048];
uid_t uid = getuid();
gid_t gid = getgid();
@@ -128,9 +129,12 @@ static int enable_uprobes(void)
if (run_as(0, 0, 0, argv[0], argv) == 0)
return 0;
- dbug(2, "Inserting uprobes module from SystemTap runtime.\n");
+ snprintf (runtimeko, sizeof(runtimeko), "%s/uprobes/uprobes.ko",
+ (getenv("SYSTEMTAP_RUNTIME") ?: PKGDATADIR "/runtime"));
+ dbug(2, "Inserting uprobes module from SystemTap runtime %s.\n", runtimeko);
argv[0] = NULL;
- return insert_module(PKGDATADIR "/runtime/uprobes/uprobes.ko", NULL, argv);
+
+ return insert_module(runtimeko, NULL, argv);
}
static int insert_stap_module(void)
@@ -242,9 +246,11 @@ int main(int argc, char **argv)
exit(-1);
}
- if (getuid() != 0) {
+ if (getuid() != geteuid()) { /* setuid? */
rc = unsetenv("SYSTEMTAP_STAPRUN") ||
- unsetenv("SYSTEMTAP_STAPIO");
+ unsetenv("SYSTEMTAP_STAPIO") ||
+ unsetenv("SYSTEMTAP_RUNTIME");
+
if (rc) {
_perr("unsetenv failed");
exit(-1);