Use DEEPBIND flag when loading external modules using dlopen#1703
Merged
zuiderkwast merged 4 commits intovalkey-io:unstablefrom Feb 10, 2025
Merged
Use DEEPBIND flag when loading external modules using dlopen#1703zuiderkwast merged 4 commits intovalkey-io:unstablefrom
DEEPBIND flag when loading external modules using dlopen#1703zuiderkwast merged 4 commits intovalkey-io:unstablefrom
Conversation
The current flags used in `dlopen` to load external modules don't allow modules to define symbols that are already defined by the valkey server binary because the symbol resolution first looks in the server memory and only if it does not find anything, it looks in the module (shared library) memory. This might become a problem if, for instance, we try to implement a new scripting engine based on a newer version of Lua. The Lua interpreter library shares many symbol names with the Lua interpreter included in the Valkey server binary. To fix the above problem, this PR adds the flag `RTLD_DEEPBIND` to the flags used in `dlopen`, which changes the symbol resolution strategy to look for the symbol in the module memory first, if the code executing is from the module. Signed-off-by: Ricardo Dias <[email protected]>
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## unstable #1703 +/- ##
=========================================
Coverage 71.10% 71.11%
=========================================
Files 123 123
Lines 65523 65532 +9
=========================================
+ Hits 46590 46600 +10
+ Misses 18933 18932 -1
|
Signed-off-by: Ricardo Dias <[email protected]>
Signed-off-by: Ricardo Dias <[email protected]>
zuiderkwast
approved these changes
Feb 10, 2025
zuiderkwast
reviewed
Feb 10, 2025
Signed-off-by: Ricardo Dias <[email protected]>
Contributor
|
@rjd15372 Daily job failed: ==89691==You are trying to dlopen a /home/runner/work/valkey/valkey/tests/modules/reply.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/reply.so library under sanitizers please remove RTLD_DEEPBIND from dlopen flags. |
Member
|
I see we did skip it, is there anything missing in the condition? |
Contributor
|
@enjoy-binbin see this: #1707 |
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#1703) The current flags used in `dlopen` to load external modules don't allow modules to define symbols that are already defined by the valkey server binary because the symbol resolution first looks in the server memory and only if it does not find anything, it looks in the module (shared library) memory. This might become a problem if, for instance, we try to implement a new scripting engine based on a newer version of Lua. The Lua interpreter library shares many symbol names with the Lua interpreter included in the Valkey server binary. To fix the above problem, this PR adds the flag `RTLD_DEEPBIND` to the flags used in `dlopen` on systems that support it, which changes the symbol resolution strategy to look for the symbol in the module memory first, if the code executing is from the module. --------- Signed-off-by: Ricardo Dias <[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#1703) The current flags used in `dlopen` to load external modules don't allow modules to define symbols that are already defined by the valkey server binary because the symbol resolution first looks in the server memory and only if it does not find anything, it looks in the module (shared library) memory. This might become a problem if, for instance, we try to implement a new scripting engine based on a newer version of Lua. The Lua interpreter library shares many symbol names with the Lua interpreter included in the Valkey server binary. To fix the above problem, this PR adds the flag `RTLD_DEEPBIND` to the flags used in `dlopen` on systems that support it, which changes the symbol resolution strategy to look for the symbol in the module memory first, if the code executing is from the module. --------- Signed-off-by: Ricardo Dias <[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#1703) The current flags used in `dlopen` to load external modules don't allow modules to define symbols that are already defined by the valkey server binary because the symbol resolution first looks in the server memory and only if it does not find anything, it looks in the module (shared library) memory. This might become a problem if, for instance, we try to implement a new scripting engine based on a newer version of Lua. The Lua interpreter library shares many symbol names with the Lua interpreter included in the Valkey server binary. To fix the above problem, this PR adds the flag `RTLD_DEEPBIND` to the flags used in `dlopen` on systems that support it, which changes the symbol resolution strategy to look for the symbol in the module memory first, if the code executing is from the module. --------- Signed-off-by: Ricardo Dias <[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.
The current flags used in
dlopento load external modules don't allow modules to define symbols that are already defined by the valkey server binary because the symbol resolution first looks in the server memory and only if it does not find anything, it looks in the module (shared library) memory.This might become a problem if, for instance, we try to implement a new scripting engine based on a newer version of Lua. The Lua interpreter library shares many symbol names with the Lua interpreter included in the Valkey server binary.
To fix the above problem, this PR adds the flag
RTLD_DEEPBINDto the flags used indlopenon systems that support it, which changes the symbol resolution strategy to look for the symbol in the module memory first, if the code executing is from the module.