From efa7936e4c91b1c260d03614bb26858fbb8a0204 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 27 May 2022 12:34:49 -0700 Subject: dlsym: Make RTLD_NEXT prefer default version definition [BZ #14932] When the first object providing foo defines both foo@v1 and foo@@v2, dlsym(RTLD_NEXT, "foo") returns foo@v1 while dlsym(RTLD_DEFAULT, "foo") returns foo@@v2. The issue is that RTLD_DEFAULT uses the DL_LOOKUP_RETURN_NEWEST flag while RTLD_NEXT doesn't. Fix the RTLD_NEXT branch to use DL_LOOKUP_RETURN_NEWEST. Note: the new behavior matches FreeBSD rtld. Future sanitizers will not need to add versioned interceptors like https://reviews.llvm.org/D96348 Reviewed-by: Adhemerval Zanella --- elf/nextmod3.map | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 elf/nextmod3.map (limited to 'elf/nextmod3.map') diff --git a/elf/nextmod3.map b/elf/nextmod3.map new file mode 100644 index 0000000..eb0e7d7 --- /dev/null +++ b/elf/nextmod3.map @@ -0,0 +1,3 @@ +v1 { }; +v2 { } v1; +v3 { foo; } v2; -- cgit v1.1