summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-12-09 09:08:02 -0500
committerFrank Ch. Eigler <fche@elastic.org>2008-12-09 09:08:28 -0500
commit73dc0c77745ee09db15542c14f7e048f91e121e6 (patch)
tree549746d02c27cdd4ddb63bcbea1016b43586beb6
parentf02d561e798f1c599c4c622983946a6e6fb53395 (diff)
downloadsystemtap-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/ChangeLog7
-rw-r--r--runtime/staprun/staprun.c14
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);