libkmod-elf: Fix check by class in get_modversions()
authorLucas De Marchi <lucas.demarchi@intel.com>
Fri, 7 Mar 2014 04:17:10 +0000 (01:17 -0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 7 Mar 2014 04:24:39 +0000 (01:24 -0300)
Commit 51c409b ("Cache the offset of crc") unintentinally changed the
comparison "if (elf->class & KMOD_ELF_32)" to
"if (elf->class == KMOD_ELF_32)".

This has been reported by Serge Voilokov <serge0x76@gmail.com>:

On Raspberry PI elf->class equals KMOD_ELF_32|KMOD_ELF_LSB so
valid condition should be (elf->class & KMOD_ELF_32) instead of
(elf->class == KMOD_ELF_32).

This fixes "modprobe --dump-modversions" failing on 32b systems.

libkmod/libkmod-elf.c

index 1c11a24..53335f3 100644 (file)
@@ -516,7 +516,7 @@ int kmod_elf_get_modversions(const struct kmod_elf *elf, struct kmod_modversion
        assert_cc(sizeof(struct kmod_modversion64) ==
                                        sizeof(struct kmod_modversion32));
 
-       if (elf->class == KMOD_ELF_32)
+       if (elf->class & KMOD_ELF_32)
                offcrc = sizeof(uint32_t);
        else
                offcrc = sizeof(uint64_t);