93 lines
2.6 KiB
Text
93 lines
2.6 KiB
Text
$NetBSD: patch-cd,v 1.1 2010/05/04 20:46:31 tez Exp $
|
|
CVE-2009-3736 fix for embedded libltdl
|
|
|
|
--- libjava/libltdl/ltdl.c.orig 2010-04-30 10:49:19.822297200 -0500
|
|
+++ libjava/libltdl/ltdl.c 2010-04-30 10:49:34.600872700 -0500
|
|
@@ -2159,7 +2159,8 @@
|
|
static int try_dlopen LT_PARAMS((lt_dlhandle *handle,
|
|
const char *filename));
|
|
static int tryall_dlopen LT_PARAMS((lt_dlhandle *handle,
|
|
- const char *filename));
|
|
+ const char *filename,
|
|
+ const char * useloader));
|
|
static int unload_deplibs LT_PARAMS((lt_dlhandle handle));
|
|
static int lt_argz_insert LT_PARAMS((char **pargz,
|
|
size_t *pargz_len,
|
|
@@ -2345,9 +2346,10 @@
|
|
}
|
|
|
|
static int
|
|
-tryall_dlopen (handle, filename)
|
|
+tryall_dlopen (handle, filename, useloader)
|
|
lt_dlhandle *handle;
|
|
const char *filename;
|
|
+ const char *useloader;
|
|
{
|
|
lt_dlhandle cur;
|
|
lt_dlloader *loader;
|
|
@@ -2414,6 +2416,11 @@
|
|
|
|
while (loader)
|
|
{
|
|
+ if (useloader && strcmp(loader->loader_name, useloader))
|
|
+ {
|
|
+ loader = loader->next;
|
|
+ continue;
|
|
+ }
|
|
lt_user_data data = loader->dlloader_data;
|
|
|
|
cur->module = loader->module_open (data, filename);
|
|
@@ -2483,7 +2490,7 @@
|
|
error += tryall_dlopen_module (handle,
|
|
(const char *) 0, prefix, filename);
|
|
}
|
|
- else if (tryall_dlopen (handle, filename) != 0)
|
|
+ else if (tryall_dlopen (handle, filename, NULL) != 0)
|
|
{
|
|
++error;
|
|
}
|
|
@@ -2504,7 +2511,7 @@
|
|
/* Try to open the old library first; if it was dlpreopened,
|
|
we want the preopened version of it, even if a dlopenable
|
|
module is available. */
|
|
- if (old_name && tryall_dlopen (handle, old_name) == 0)
|
|
+ if (old_name && tryall_dlopen (handle, old_name, "dlpreload") == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
@@ -2768,7 +2775,7 @@
|
|
|
|
/* Try to dlopen the file, but do not continue searching in any
|
|
case. */
|
|
- if (tryall_dlopen (handle, filename) != 0)
|
|
+ if (tryall_dlopen (handle, filename,NULL) != 0)
|
|
*handle = 0;
|
|
|
|
return 1;
|
|
@@ -3053,7 +3060,7 @@
|
|
/* lt_dlclose()ing yourself is very bad! Disallow it. */
|
|
LT_DLSET_FLAG (*phandle, LT_DLRESIDENT_FLAG);
|
|
|
|
- if (tryall_dlopen (&newhandle, 0) != 0)
|
|
+ if (tryall_dlopen (&newhandle, 0, NULL) != 0)
|
|
{
|
|
LT_DLFREE (*phandle);
|
|
return 1;
|
|
@@ -3175,7 +3182,7 @@
|
|
}
|
|
#endif
|
|
}
|
|
- if (!file)
|
|
+ else
|
|
{
|
|
file = fopen (filename, LT_READTEXT_MODE);
|
|
}
|
|
@@ -3359,7 +3366,7 @@
|
|
#endif
|
|
)))
|
|
{
|
|
- if (tryall_dlopen (&newhandle, filename) != 0)
|
|
+ if (tryall_dlopen (&newhandle, filename, NULL) != 0)
|
|
{
|
|
newhandle = NULL;
|
|
}
|