• Masahiro Yamada's avatar
    module: swap the order of symbol.namespace · bf70b050
    Masahiro Yamada authored
    Currently, EXPORT_SYMBOL_NS(_GPL) constructs the kernel symbol as
    follows:
    
      __ksymtab_SYMBOL.NAMESPACE
    
    The sym_extract_namespace() in modpost allocates memory for the part
    SYMBOL.NAMESPACE when '.' is contained. One problem is that the pointer
    returned by strdup() is lost because the symbol name will be copied to
    malloc'ed memory by alloc_symbol(). No one will keep track of the
    pointer of strdup'ed memory.
    
    sym->namespace still points to the NAMESPACE part. So, you can free it
    with complicated code like this:
    
       free(sym->namespace - strlen(sym->name) - 1);
    
    It complicates memory free.
    
    To fix it elegantly, I swapped the order of the symbol and the
    namespace as follows:
    
      __ksymtab_NAMESPACE.SYMBOL
    
    then, simplified sym_extract_namespace() so that it allocates memory
    only for the NAMESPACE part.
    
    I prefer this order because it is intuitive and also matches to major
    languages. For example, NAMESPACE::NAME in C++, MODULE.NAME in Python.
    Reviewed-by: default avatarMatthias Maennich <maennich@google.com>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Signed-off-by: default avatarJessica Yu <jeyu@kernel.org>
    bf70b050
modpost.c 68.9 KB