Fix: module signature vs tracepoints: add new TAINT_UNSIGNED_MODULE
Users have reported being unable to trace non-signed modules loaded within a kernel supporting module signature. This is caused by tracepoint.c:tracepoint_module_coming() refusing to take into account tracepoints sitting within force-loaded modules (TAINT_FORCED_MODULE). The reason for this check, in the first place, is that a force-loaded module may have a struct module incompatible with the layout expected by the kernel, and can thus cause a kernel crash upon forced load of that module on a kernel with CONFIG_TRACEPOINTS=y. Tracepoints, however, specifically accept TAINT_OOT_MODULE and TAINT_CRAP, since those modules do not lead to the "very likely system crash" issue cited above for force-loaded modules. With kernels having CONFIG_MODULE_SIG=y (signed modules), a non-signed module is tainted re-using the TAINT_FORCED_MODULE taint flag. Unfortunately, this means that Tracepoints treat that module as a force-loaded module, and thus silently refuse to consider any tracepoint within this module. Since an unsigned module does not fit within the "very likely system crash" category of tainting, add a new TAINT_UNSIGNED_MODULE taint flag to specifically address this taint behavior, and accept those modules within Tracepoints. We use the letter 'X' as a taint flag character for a module being loaded that doesn't know how to sign its name (proposed by Steven Rostedt). Also add the missing 'O' entry to trace event show_module_flags() list for the sake of completeness. Signed-off-by:Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by:
Steven Rostedt <rostedt@goodmis.org> NAKed-by:
Ingo Molnar <mingo@redhat.com> CC: Thomas Gleixner <tglx@linutronix.de> CC: David Howells <dhowells@redhat.com> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by:
Rusty Russell <rusty@rustcorp.com.au>
Showing
- Documentation/ABI/testing/sysfs-module 1 addition, 0 deletionsDocumentation/ABI/testing/sysfs-module
- Documentation/module-signing.txt 2 additions, 1 deletionDocumentation/module-signing.txt
- Documentation/oops-tracing.txt 3 additions, 0 deletionsDocumentation/oops-tracing.txt
- Documentation/sysctl/kernel.txt 2 additions, 0 deletionsDocumentation/sysctl/kernel.txt
- include/linux/kernel.h 1 addition, 0 deletionsinclude/linux/kernel.h
- include/trace/events/module.h 3 additions, 1 deletioninclude/trace/events/module.h
- kernel/module.c 3 additions, 1 deletionkernel/module.c
- kernel/panic.c 2 additions, 0 deletionskernel/panic.c
- kernel/tracepoint.c 3 additions, 2 deletionskernel/tracepoint.c
Loading
Please register or sign in to comment