Message ID | 1475588159-30598-13-git-send-email-berrange@redhat.com |
---|---|
State | New |
Headers | show |
On 10/04/2016 08:35 AM, Daniel P. Berrange wrote: > If the ftrace backend is compiled into QEMU, any attempt > to start QEMU while non-root will fail due to the > inability to open /sys/kernel/debug/tracing/tracing_on. > > Add a fallback into the code so that it connects up the > trace_marker_fd variable to /dev/null when setting s/setting/getting/ ? > EACCESS on the 'trace_on' file. This allows QEMU to s/EACCESS/EACCES/ > run, with ftrace turned into a no-op. > > Signed-off-by: Daniel P. Berrange <berrange@redhat.com> > --- > trace/ftrace.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/trace/ftrace.c b/trace/ftrace.c > index e953922..3588bb0 100644 > --- a/trace/ftrace.c > +++ b/trace/ftrace.c > @@ -51,6 +51,12 @@ bool ftrace_init(void) > snprintf(path, PATH_MAX, "%s/tracing/tracing_on", debugfs); Unrelated, but it would be nice to get rid of the PATH_MAX stack allocation, and instead use g_strdup_printf() or similar in a followup patch. > trace_fd = open(path, O_WRONLY); > if (trace_fd < 0) { > + if (errno == EACCES) { > + trace_marker_fd = open("/dev/null", O_WRONLY); > + if (trace_marker_fd != -1) { > + return true; > + } > + } > perror("Could not open ftrace 'tracing_on' file"); > return false; > } else { >
On Tue, Oct 04, 2016 at 03:12:31PM -0500, Eric Blake wrote: > On 10/04/2016 08:35 AM, Daniel P. Berrange wrote: > > If the ftrace backend is compiled into QEMU, any attempt > > to start QEMU while non-root will fail due to the > > inability to open /sys/kernel/debug/tracing/tracing_on. > > > > Add a fallback into the code so that it connects up the > > trace_marker_fd variable to /dev/null when setting > > s/setting/getting/ ? > > > EACCESS on the 'trace_on' file. This allows QEMU to > > s/EACCESS/EACCES/ Thanks, I've applied these changes while merging. Stefan
diff --git a/trace/ftrace.c b/trace/ftrace.c index e953922..3588bb0 100644 --- a/trace/ftrace.c +++ b/trace/ftrace.c @@ -51,6 +51,12 @@ bool ftrace_init(void) snprintf(path, PATH_MAX, "%s/tracing/tracing_on", debugfs); trace_fd = open(path, O_WRONLY); if (trace_fd < 0) { + if (errno == EACCES) { + trace_marker_fd = open("/dev/null", O_WRONLY); + if (trace_marker_fd != -1) { + return true; + } + } perror("Could not open ftrace 'tracing_on' file"); return false; } else {
If the ftrace backend is compiled into QEMU, any attempt to start QEMU while non-root will fail due to the inability to open /sys/kernel/debug/tracing/tracing_on. Add a fallback into the code so that it connects up the trace_marker_fd variable to /dev/null when setting EACCESS on the 'trace_on' file. This allows QEMU to run, with ftrace turned into a no-op. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- trace/ftrace.c | 6 ++++++ 1 file changed, 6 insertions(+)