lkml.org 
[lkml]   [2008]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectChecking versions of the symbols in modules
    Date
    Hello,

    summary:
    In a kernel already compiled, we install new modules, some of that depend of
    the others. after charging the first module the next one can not find the
    symbols that uses from the first.

    Kernel version:
    Linux version 2.6.26.1-686-jp2 (root@pcjordi) (gcc version 4.3.1 (Debian
    4.3.1-2) ) #1 SMP PREEMPT Tue Aug 5 11:34:33 CEST 2008

    Full description:
    In a kernel already compiled, we install new modules, some of them depending
    from the others. In this case the modules are lzma and squashfs-lzma
    after charging the module lzma we verify in /proc/kallsyms that the symbols
    have been exported and correctly noted.
    When we charge the module squashfs that depends on the symbols of sqlzma, the
    kernel responds:
    no symbol version for sqlzma_init
    Unknown symbol sqlzma_init
    no symbol version for sqlzma_un
    Unknown symbol sqlzma_un
    no symbol version for sqlzma_fin
    Unknown symbol sqlzma_fin

    Keywords:
    modules, symbols

    workaround:
    my first solution was to compile a kernel with MODULE_FORCE_LOADING enabled,
    and forcing modprobe to do that. That works,

    the solution,
    inspecting the module.c source,
    can be appreciated differences with the version 2.6.25 in the routine
    check_version, so that previously has returned correct when the version for a
    symbol was not found, but in this routine, version 2.6.26 returns error.
    Works well after modifying some lines of module.c

    Attached is the patch to module.c

    P.D. if the source of that modules is needed, lzma is from the sid repository
    of Debian, and squashfs-lzma is my own develop, I can provide the Debian
    package for it,

    Thanks for that good kernel,

    Jordi Pujol
    --- linux-2.6.26.1-old/kernel/module.c 2008-08-02 00:58:24.000000000 +0200
    +++ linux-2.6.26.1/kernel/module.c 2008-08-05 14:48:13.000000000 +0200
    @@ -936,9 +936,11 @@
    goto bad_version;
    }

    + /* Not in module's version table. OK, but that taints the kernel. */
    printk(KERN_WARNING "%s: no symbol version for %s\n",
    mod->name, symname);
    - return 0;
    + add_taint_module(mod, TAINT_FORCED_MODULE);
    + return 1;

    bad_version:
    printk("%s: disagrees about version of symbol %s\n",
    \
     
     \ /
      Last update: 2008-08-05 16:27    [W:0.025 / U:182.280 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site