• Petr Mladek's avatar
    taint/module: Clean up global and module taint flags handling · 7fd8329b
    Petr Mladek authored
    The commit 66cc69e3 ("Fix: module signature vs tracepoints:
    add new TAINT_UNSIGNED_MODULE") updated module_taint_flags() to
    potentially print one more character. But it did not increase the
    size of the corresponding buffers in m_show() and print_modules().
    
    We have recently done the same mistake when adding a taint flag
    for livepatching, see
    https://lkml.kernel.org/r/cfba2c823bb984690b73572aaae1db596b54a082.1472137475.git.jpoimboe@redhat.com
    
    Also struct module uses an incompatible type for mod-taints flags.
    It survived from the commit 2bc2d61a ("[PATCH] list module
    taint flags in Oops/panic"). There was used "int" for the global taint
    flags at these times. But only the global tain flags was later changed
    to "unsigned long" by the commit 25ddbb18 ("Make the taint
    flags reliable").
    
    This patch defines TAINT_FLAGS_COUNT that can be used to create
    arrays and buffers of the right size. Note that we could not use
    enum because the taint flag indexes are used also in assembly code.
    
    Then it reworks the table that describes the taint flags. The TAINT_*
    numbers can be used as the index. Instead, we add information
    if the taint flag is also shown per-module.
    
    Finally, it uses "unsigned long", bit operations, and the updated
    taint_flags table also for mod->taints.
    
    It is not optimal because only few taint flags can be printed by
    module_taint_flags(). But better be on the safe side. IMHO, it is
    not worth the optimization and this is a good compromise.
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: http://lkml.kernel.org/r/1474458442-21581-1-git-send-email-pmladek@suse.com
    [jeyu@redhat.com: fix broken lkml link in changelog]
    Signed-off-by: default avatarJessica Yu <jeyu@redhat.com>
    7fd8329b
module.c 109 KB