Fix: Exclude RTLD_DEEPBIND for Alpine Linux (musl-based systems)#1707
Merged
ranshid merged 1 commit intovalkey-io:unstablefrom Feb 11, 2025
Merged
Fix: Exclude RTLD_DEEPBIND for Alpine Linux (musl-based systems)#1707ranshid merged 1 commit intovalkey-io:unstablefrom
ranshid merged 1 commit intovalkey-io:unstablefrom
Conversation
Signed-off-by: Roshan Khatri <[email protected]>
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## unstable #1707 +/- ##
============================================
+ Coverage 71.11% 71.12% +0.01%
============================================
Files 123 123
Lines 65535 65535
============================================
+ Hits 46605 46613 +8
+ Misses 18930 18922 -8
|
enjoy-binbin
approved these changes
Feb 11, 2025
zuiderkwast
reviewed
Feb 11, 2025
|
|
||
| int dlopen_flags = RTLD_NOW | RTLD_LOCAL; | ||
| #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) | ||
| #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && defined(__GLIBC__) && __has_include(<dlfcn.h>) |
Contributor
There was a problem hiding this comment.
FreeBSD doesn't have GLIBC. I think this change disables DEEPBIND on FreeBSD.
Contributor
There was a problem hiding this comment.
Maybe we should just check __GLIBC__ instead of __linux__? The libc implementation is what defines dlopen.
Suggested change
| #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && defined(__GLIBC__) && __has_include(<dlfcn.h>) | |
| #if (defined(__GLIBC__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && __has_include(<dlfcn.h>) |
zuiderkwast
added a commit
that referenced
this pull request
Feb 11, 2025
Fixes the failure trying to use dlopen with DEEPBIND with ASAN when compiling with Clang: ==90510==You are trying to dlopen a /home/runner/work/valkey/valkey/tests/modules/keyspecs.so shared library with RTLD_DEEPBIND flag which is incompatible with sanitizer runtime (see google/sanitizers#611 for details). If you want to run /home/runner/work/valkey/valkey/tests/modules/keyspecs.so library under sanitizers please remove RTLD_DEEPBIND from dlopen flags. https://github.com/valkey-io/valkey/actions/runs/13261241213/job/37018133361 The previous check only covers GCC. Additionally, don't require GLIBC when FreeBSD is used. FreeBSD has it's own libc which supports DEEPBIND according to its docs. Follow-up of #1703, #1707 Signed-off-by: Viktor Söderqvist <[email protected]>
xbasel
pushed a commit
to xbasel/valkey
that referenced
this pull request
Mar 27, 2025
…key-io#1707) Fixes valkey-io#1705 **Problem** Alpine Linux uses `musl libc`, which does not support `RTLD_DEEPBIND`. This causes compilation errors when building on Alpine: ``` module.c: In function 'moduleLoad': module.c:12295:21: error: 'RTLD_DEEPBIND' undeclared (first use in this function) 12295 | dlopen_flags |= RTLD_DEEPBIND; | ^~~~~~~~~~~~~ module.c:12295:21: note: each undeclared identifier is reported only once for each function it appears in CC expire.o make[1]: *** [Makefile:538: module.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: Leaving directory '/usr/src/valkey/src' make: *** [Makefile:6: all] Error 2 ``` Currently, `RTLD_DEEPBIND` is conditionally included for `Linux` and `FreeBSD`, but this assumption does not account for `musl-based` systems like `Alpine`. **Solution** Modify the preprocessor condition to ensure `RTLD_DEEPBIND` is only included when: 1. The system is Linux (glibc-based) or FreeBSD 2. Address Sanitizer (ASAN) is not enabled 3. `glibc` is used `(defined(__GLIBC__)` ensures `musl-based` systems like Alpine are excluded 4. `<dlfcn.h>` is available `(__has_include(<dlfcn.h>)` provides an additional safety check New Condition: ``` #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && defined(__GLIBC__) && __has_include(<dlfcn.h>) ``` Signed-off-by: Roshan Khatri <[email protected]>
xbasel
pushed a commit
to xbasel/valkey
that referenced
this pull request
Mar 27, 2025
Fixes the failure trying to use dlopen with DEEPBIND with ASAN when compiling with Clang: ==90510==You are trying to dlopen a /home/runner/work/valkey/valkey/tests/modules/keyspecs.so shared library with RTLD_DEEPBIND flag which is incompatible with sanitizer runtime (see google/sanitizers#611 for details). If you want to run /home/runner/work/valkey/valkey/tests/modules/keyspecs.so library under sanitizers please remove RTLD_DEEPBIND from dlopen flags. https://github.com/valkey-io/valkey/actions/runs/13261241213/job/37018133361 The previous check only covers GCC. Additionally, don't require GLIBC when FreeBSD is used. FreeBSD has it's own libc which supports DEEPBIND according to its docs. Follow-up of valkey-io#1703, valkey-io#1707 Signed-off-by: Viktor Söderqvist <[email protected]>
xbasel
pushed a commit
to xbasel/valkey
that referenced
this pull request
Mar 27, 2025
…key-io#1707) Fixes valkey-io#1705 **Problem** Alpine Linux uses `musl libc`, which does not support `RTLD_DEEPBIND`. This causes compilation errors when building on Alpine: ``` module.c: In function 'moduleLoad': module.c:12295:21: error: 'RTLD_DEEPBIND' undeclared (first use in this function) 12295 | dlopen_flags |= RTLD_DEEPBIND; | ^~~~~~~~~~~~~ module.c:12295:21: note: each undeclared identifier is reported only once for each function it appears in CC expire.o make[1]: *** [Makefile:538: module.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: Leaving directory '/usr/src/valkey/src' make: *** [Makefile:6: all] Error 2 ``` Currently, `RTLD_DEEPBIND` is conditionally included for `Linux` and `FreeBSD`, but this assumption does not account for `musl-based` systems like `Alpine`. **Solution** Modify the preprocessor condition to ensure `RTLD_DEEPBIND` is only included when: 1. The system is Linux (glibc-based) or FreeBSD 2. Address Sanitizer (ASAN) is not enabled 3. `glibc` is used `(defined(__GLIBC__)` ensures `musl-based` systems like Alpine are excluded 4. `<dlfcn.h>` is available `(__has_include(<dlfcn.h>)` provides an additional safety check New Condition: ``` #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && defined(__GLIBC__) && __has_include(<dlfcn.h>) ``` Signed-off-by: Roshan Khatri <[email protected]>
xbasel
pushed a commit
to xbasel/valkey
that referenced
this pull request
Mar 27, 2025
Fixes the failure trying to use dlopen with DEEPBIND with ASAN when compiling with Clang: ==90510==You are trying to dlopen a /home/runner/work/valkey/valkey/tests/modules/keyspecs.so shared library with RTLD_DEEPBIND flag which is incompatible with sanitizer runtime (see google/sanitizers#611 for details). If you want to run /home/runner/work/valkey/valkey/tests/modules/keyspecs.so library under sanitizers please remove RTLD_DEEPBIND from dlopen flags. https://github.com/valkey-io/valkey/actions/runs/13261241213/job/37018133361 The previous check only covers GCC. Additionally, don't require GLIBC when FreeBSD is used. FreeBSD has it's own libc which supports DEEPBIND according to its docs. Follow-up of valkey-io#1703, valkey-io#1707 Signed-off-by: Viktor Söderqvist <[email protected]>
murphyjacob4
pushed a commit
to enjoy-binbin/valkey
that referenced
this pull request
Apr 13, 2025
…key-io#1707) Fixes valkey-io#1705 **Problem** Alpine Linux uses `musl libc`, which does not support `RTLD_DEEPBIND`. This causes compilation errors when building on Alpine: ``` module.c: In function 'moduleLoad': module.c:12295:21: error: 'RTLD_DEEPBIND' undeclared (first use in this function) 12295 | dlopen_flags |= RTLD_DEEPBIND; | ^~~~~~~~~~~~~ module.c:12295:21: note: each undeclared identifier is reported only once for each function it appears in CC expire.o make[1]: *** [Makefile:538: module.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: Leaving directory '/usr/src/valkey/src' make: *** [Makefile:6: all] Error 2 ``` Currently, `RTLD_DEEPBIND` is conditionally included for `Linux` and `FreeBSD`, but this assumption does not account for `musl-based` systems like `Alpine`. **Solution** Modify the preprocessor condition to ensure `RTLD_DEEPBIND` is only included when: 1. The system is Linux (glibc-based) or FreeBSD 2. Address Sanitizer (ASAN) is not enabled 3. `glibc` is used `(defined(__GLIBC__)` ensures `musl-based` systems like Alpine are excluded 4. `<dlfcn.h>` is available `(__has_include(<dlfcn.h>)` provides an additional safety check New Condition: ``` #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__SANITIZE_ADDRESS__) && defined(__GLIBC__) && __has_include(<dlfcn.h>) ``` Signed-off-by: Roshan Khatri <[email protected]>
murphyjacob4
pushed a commit
to enjoy-binbin/valkey
that referenced
this pull request
Apr 13, 2025
Fixes the failure trying to use dlopen with DEEPBIND with ASAN when compiling with Clang: ==90510==You are trying to dlopen a /home/runner/work/valkey/valkey/tests/modules/keyspecs.so shared library with RTLD_DEEPBIND flag which is incompatible with sanitizer runtime (see google/sanitizers#611 for details). If you want to run /home/runner/work/valkey/valkey/tests/modules/keyspecs.so library under sanitizers please remove RTLD_DEEPBIND from dlopen flags. https://github.com/valkey-io/valkey/actions/runs/13261241213/job/37018133361 The previous check only covers GCC. Additionally, don't require GLIBC when FreeBSD is used. FreeBSD has it's own libc which supports DEEPBIND according to its docs. Follow-up of valkey-io#1703, valkey-io#1707 Signed-off-by: Viktor Söderqvist <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1705
Problem
Alpine Linux uses
musl libc, which does not supportRTLD_DEEPBIND. This causes compilation errors when building on Alpine:Currently,
RTLD_DEEPBINDis conditionally included forLinuxandFreeBSD, but this assumption does not account formusl-basedsystems likeAlpine.Solution
Modify the preprocessor condition to ensure
RTLD_DEEPBINDis only included when:glibcis used(defined(__GLIBC__)ensuresmusl-basedsystems like Alpine are excluded<dlfcn.h>is available(__has_include(<dlfcn.h>)provides an additional safety checkNew Condition: