summaryrefslogtreecommitdiff
path: root/dev-libs/libverto/files/libverto-load.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-12-24 14:11:38 +0000
committerV3n3RiX <venerix@redcorelinux.org>2018-12-24 14:11:38 +0000
commitde49812990871e1705b64051c35161d5e6400269 (patch)
tree5e1e8fcb0ff4579dbd22a1bfee28a6b97dc8aaeb /dev-libs/libverto/files/libverto-load.patch
parent536c3711867ec947c1738f2c4b96f22e4863322d (diff)
gentoo resync : 24.12.2018
Diffstat (limited to 'dev-libs/libverto/files/libverto-load.patch')
-rw-r--r--dev-libs/libverto/files/libverto-load.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/dev-libs/libverto/files/libverto-load.patch b/dev-libs/libverto/files/libverto-load.patch
new file mode 100644
index 000000000000..94dceac5d69c
--- /dev/null
+++ b/dev-libs/libverto/files/libverto-load.patch
@@ -0,0 +1,78 @@
+From 7989b3c6bdfdeb8770d17d8717b4a0cd48e79386 Mon Sep 17 00:00:00 2001
+From: Robbie Harwood <rharwood@redhat.com>
+Date: Wed, 24 Oct 2018 16:57:11 -0400
+Subject: [PATCH] Fix rare leak of DSO in module_load
+
+---
+ src/module.c | 31 +++++++++++++++----------------
+ 1 file changed, 15 insertions(+), 16 deletions(-)
+
+diff --git a/src/module.c b/src/module.c
+index 1f1b7c9..0b59034 100644
+--- a/src/module.c
++++ b/src/module.c
+@@ -182,7 +182,7 @@ module_load(const char *filename, const char *symbname,
+ intdll = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
+ #endif /* WIN32 */
+ if (!intdll)
+- return dllerror();
++ goto fail;
+
+ /* Get the module symbol */
+ #ifdef WIN32
+@@ -190,16 +190,12 @@ module_load(const char *filename, const char *symbname,
+ #else /* WIN32 */
+ intsym = dlsym(intdll, symbname);
+ #endif /* WIN32 */
+- if (!intsym) {
+- module_close(intdll);
+- return dllerror();
+- }
++ if (!intsym)
++ goto fail;
+
+ /* Figure out whether or not to load this module */
+- if (!shouldload(intsym, misc, &interr)) {
+- module_close(intdll);
+- return interr;
+- }
++ if (!shouldload(intsym, misc, &interr))
++ goto fail;
+
+ /* Re-open the module */
+ module_close(intdll);
+@@ -208,9 +204,8 @@ module_load(const char *filename, const char *symbname,
+ #else /* WIN32 */
+ intdll = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
+ #endif /* WIN32 */
+- if (!intdll) {
+- return dllerror();
+- }
++ if (!intdll)
++ goto fail;
+
+ /* Get the symbol again */
+ #ifdef WIN32
+@@ -218,14 +213,18 @@ module_load(const char *filename, const char *symbname,
+ #else /* WIN32 */
+ intsym = dlsym(intdll, symbname);
+ #endif /* WIN32 */
+- if (!intsym) {
+- module_close(intdll);
+- return dllerror();
+- }
++ if (!intsym)
++ goto fail;
+
+ if (dll)
+ *dll = intdll;
+ if (symb)
+ *symb = intsym;
+ return NULL;
++
++fail:
++ if (!interr)
++ interr = dllerror();
++ module_close(intdll);
++ return interr;
+ }