[Pkg-openmpi-maintainers] Bug#818909: Segfaults caused by new DT_MIPS_RLD_MAP_REL tag and RPATH removers

Aurelien Jarno aurelien at aurel32.net
Fri Apr 8 16:44:30 UTC 2016


On 2016-04-08 10:45, Aurelien Jarno wrote:
> Hi,
> 
> On 2016-04-07 11:51, James Cowgill wrote:
> > 
> > Based only on chrpath and cmake reverse dependencies, there is an upper
> > bound of about 1500 binNMUs (after the tools after fixed). Hopefully
> > that can be reduced!
> >
> > I really don't have any time to fix all this. Please can someone else
> > have a look!
> 
> I'll try to do an archive scan asap to really get an idea on how many
> packages are affected. After I'll look at how to fix chrpath, but help
> would be welcome as I also don't have a lot of time.

Please find below a small quick and dirty python script to check that.
There is probably a way to do it better and cleaner, but it does its
job.

I will start an archive scan and will start working on a chrpath fix.

Aurelien



#!/usr/bin/python3

from sys import argv, exit
from elftools.elf.elffile import ELFFile, DynamicSection

# MIPS specific constants
DT_MIPS_BASE_ADDRESS=0x70000006
DT_MIPS_RLD_MAP=0x70000016
DT_MIPS_RLD_MAP_REL=0x70000035

good = True
filename = argv[1]

with open(filename, 'rb') as f:
    for section in ELFFile(f).iter_sections():
        if not isinstance(section, DynamicSection):
            continue
    
        base = None
        rld_map = None
        rld_map_rel = None
        rld_map_rel_offset = None
        for index, tag in enumerate(section.iter_tags()):
            if tag.entry.d_tag == DT_MIPS_BASE_ADDRESS:
                base = tag.entry.d_val
            elif tag.entry.d_tag == DT_MIPS_RLD_MAP:
                rld_map = tag.entry.d_val
            elif tag.entry.d_tag == DT_MIPS_RLD_MAP_REL:
                rld_map_rel = tag.entry.d_val
                rld_map_rel_offset = section.header.sh_offset + index * section.header.sh_entsize
    
        if base and rld_map and rld_map_rel:
            if rld_map != base + rld_map_rel + rld_map_rel_offset:
                good = False

print('%s: %s' % (filename, 'ok' if good else 'bad'))
exit(0 if good else 1)

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien at aurel32.net                 http://www.aurel32.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-openmpi-maintainers/attachments/20160408/9a3e2438/attachment.sig>


More information about the Pkg-openmpi-maintainers mailing list