Module Name: src Committed By: martin Date: Tue Aug 1 17:03:54 UTC 2023
Modified Files: src/distrib/sets/lists/debug [netbsd-10]: mi src/distrib/sets/lists/tests [netbsd-10]: mi src/libexec/ld.elf_so [netbsd-10]: Makefile reloc.c rtld.c rtld.h symbol.c src/tests/libexec/ld.elf_so [netbsd-10]: Makefile Added Files: src/libexec/ld.elf_so [netbsd-10]: hash.c hash.h src/tests/libexec/ld.elf_so [netbsd-10]: t_hash.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #300): libexec/ld.elf_so/rtld.h: revision 1.145 libexec/ld.elf_so/symbol.c: revision 1.74 libexec/ld.elf_so/rtld.h: revision 1.147 libexec/ld.elf_so/symbol.c: revision 1.75 libexec/ld.elf_so/symbol.c: revision 1.76 tests/libexec/ld.elf_so/t_hash.c: revision 1.1 libexec/ld.elf_so/Makefile: revision 1.145 libexec/ld.elf_so/Makefile: revision 1.146 libexec/ld.elf_so/Makefile: revision 1.147 libexec/ld.elf_so/reloc.c: revision 1.118 distrib/sets/lists/tests/mi: revision 1.1280 libexec/ld.elf_so/rtld.c: revision 1.215 tests/libexec/ld.elf_so/Makefile: revision 1.21 libexec/ld.elf_so/hash.c: revision 1.1 libexec/ld.elf_so/hash.h: revision 1.1 distrib/sets/lists/debug/mi: revision 1.409 The SysV ABI specifies that the symbol hash function should return only 32 bits of hash. Unfortunately due to an implementation bug and the fact that the return type is unsigned long which is 64 bits in LP64, this can fail in some cases: "\xff\x0f\x0f\x0f\x0f\x0f\x12". See: "https://maskray.me/blog/2023-04-12-elf-hash-function >From Ed Maste @ FreeBSD: https://cgit.freebsd.org/src/commit/?id=29e3a06510823edbb91667d21f530d3ec778116d Need to write Unit Tests for this. Oops wrong mask. ld.elf_so: Split SRCS onto multiple lines. Makes updates easier. No functional change intended. ld.elf_so: Sort SRCS. No functional change intended. ld.elf_so: Split hash functions into a separate file. This way we can test them in isolation. No functional change intended. ld.elf_so: Add some known-answer tests for hash functions. Make sure the testing mechanism detects the traditional overflow bug. To generate a diff of this commit: cvs rdiff -u -r1.394.2.1 -r1.394.2.2 src/distrib/sets/lists/debug/mi cvs rdiff -u -r1.1238.2.1 -r1.1238.2.2 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.144 -r1.144.2.1 src/libexec/ld.elf_so/Makefile cvs rdiff -u -r0 -r1.1.2.2 src/libexec/ld.elf_so/hash.c \ src/libexec/ld.elf_so/hash.h cvs rdiff -u -r1.117 -r1.117.2.1 src/libexec/ld.elf_so/reloc.c cvs rdiff -u -r1.212.2.2 -r1.212.2.3 src/libexec/ld.elf_so/rtld.c cvs rdiff -u -r1.144.2.1 -r1.144.2.2 src/libexec/ld.elf_so/rtld.h cvs rdiff -u -r1.73 -r1.73.8.1 src/libexec/ld.elf_so/symbol.c cvs rdiff -u -r1.12.4.1 -r1.12.4.2 src/tests/libexec/ld.elf_so/Makefile cvs rdiff -u -r0 -r1.1.2.2 src/tests/libexec/ld.elf_so/t_hash.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.