Message ID | 20190723165935.300f58e8@gandalf.local.home (mailing list archive) |
---|---|
State | Accepted |
Commit | 0cc751d1d7a5b922b2288dcd6c86a694a2e42eb3 |
Headers | show |
Series | kernel-shark: Suppress "Root privileges are required" if already root | expand |
On 23.07.19 г. 23:59 ч., Steven Rostedt wrote: > > From: Steven Rostedt (VMware) <rostedt@goodmis.org> > > If the tracefs directory is configured into the kernel, and > kshark-record fails to find the tracing directory, it should test if > it already has root privileges (geteuid() returns zero), before posting > a message "Root privileges are required" as that can confuse users. > Yes, the message can be misleading without this check. Thanks! > Reported-by: howaboutsynergy@pm.me > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > --- > diff --git a/kernel-shark/src/KsCaptureDialog.cpp b/kernel-shark/src/KsCaptureDialog.cpp > index 2e6e8f9c..dbf73302 100644 > --- a/kernel-shark/src/KsCaptureDialog.cpp > +++ b/kernel-shark/src/KsCaptureDialog.cpp > @@ -18,6 +18,12 @@ > #include "KsCmakeDef.hpp" > #include "KsCaptureDialog.hpp" > > +extern "C" { > + // To get access to geteuid() > + #include <unistd.h> > + #include <sys/types.h> > +} > + > static inline tep_handle *local_events() > { > return tracecmd_local_events(tracecmd_get_tracing_dir()); > @@ -65,7 +71,9 @@ KsCaptureControl::KsCaptureControl(QWidget *parent) > > if (!_localTEP) > message += "Cannot find or mount tracing directory.\n"; > - if (!pluginList.count()) > + > + // geteuid() returns 0 if running as effective id of root > + if (!pluginList.count() && geteuid()) > message += "Root privileges are required.\n"; > > QLabel *errorLabel = new QLabel(message); > Reviewed-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
diff --git a/kernel-shark/src/KsCaptureDialog.cpp b/kernel-shark/src/KsCaptureDialog.cpp index 2e6e8f9c..dbf73302 100644 --- a/kernel-shark/src/KsCaptureDialog.cpp +++ b/kernel-shark/src/KsCaptureDialog.cpp @@ -18,6 +18,12 @@ #include "KsCmakeDef.hpp" #include "KsCaptureDialog.hpp" +extern "C" { + // To get access to geteuid() + #include <unistd.h> + #include <sys/types.h> +} + static inline tep_handle *local_events() { return tracecmd_local_events(tracecmd_get_tracing_dir()); @@ -65,7 +71,9 @@ KsCaptureControl::KsCaptureControl(QWidget *parent) if (!_localTEP) message += "Cannot find or mount tracing directory.\n"; - if (!pluginList.count()) + + // geteuid() returns 0 if running as effective id of root + if (!pluginList.count() && geteuid()) message += "Root privileges are required.\n"; QLabel *errorLabel = new QLabel(message);