diff --git a/capsule/capsule-dlmopen.c b/capsule/capsule-dlmopen.c index dab375ed83ba903c178a1a5d6d5d306a19c2a435..49da62c897a1feece1d73925906d2bb81bec6dca 100644 --- a/capsule/capsule-dlmopen.c +++ b/capsule/capsule-dlmopen.c @@ -289,13 +289,16 @@ static int check_elf_constraints (ldlibs_t *ldlibs, int idx) { GElf_Ehdr ehdr = {}; + int eclass; // bogus ELF DSO - no ehdr available? if( !gelf_getehdr( ldlibs->needed[ 0 ].dso, &ehdr ) ) return 0; + eclass = gelf_getclass( ldlibs->needed[ idx ].dso ); + // check class (32 vs 64 bit) - if( ldlibs->elf_class != gelf_getclass( ldlibs->needed[ idx ].dso ) ) + if( ldlibs->elf_class != eclass ) return 0; // check target architecture (i386, x86-64) @@ -303,6 +306,11 @@ check_elf_constraints (ldlibs_t *ldlibs, int idx) if( ldlibs->elf_machine != ehdr.e_machine ) return 0; + DEBUG( DEBUG_ELF, "constraints: class %d; machine: %d;", + ldlibs->elf_class, ldlibs->elf_machine ); + DEBUG( DEBUG_ELF, "results : class %d; machine: %d;", + eclass, ehdr.e_machine ); + // both the class (word size) and machine (architecture) match return 1; }