diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-12-09 09:08:02 -0500 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-12-09 09:08:28 -0500 |
commit | 73dc0c77745ee09db15542c14f7e048f91e121e6 (patch) | |
tree | 549746d02c27cdd4ddb63bcbea1016b43586beb6 | |
parent | f02d561e798f1c599c4c622983946a6e6fb53395 (diff) | |
download | systemtap-steved-73dc0c77745ee09db15542c14f7e048f91e121e6.tar.gz systemtap-steved-73dc0c77745ee09db15542c14f7e048f91e121e6.tar.xz systemtap-steved-73dc0c77745ee09db15542c14f7e048f91e121e6.zip |
PR7082: support non-setuid use of $SYSTEMTAP_RUNTIME to find uprobes.ko
-rw-r--r-- | runtime/staprun/ChangeLog | 7 | ||||
-rw-r--r-- | runtime/staprun/staprun.c | 14 |
2 files changed, 17 insertions, 4 deletions
diff --git a/runtime/staprun/ChangeLog b/runtime/staprun/ChangeLog index 42c25259..3611b55e 100644 --- a/runtime/staprun/ChangeLog +++ b/runtime/staprun/ChangeLog @@ -1,3 +1,10 @@ +2008-12-08 Frank Ch. Eigler <fche@elastic.org> + + PR7062 + * staprun.c (enable_uprobes): Find uprobes.ko based on + SYSTEMTAP_RUNTIME. + (main): Unset SYSTEMTAP_* environment vars if setuid. + 2008-12-03 Roland McGrath <roland@redhat.com> PR7063 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); |