diff options
Diffstat (limited to 'src/lib/libcrypto/dso/dso_dlfcn.c')
-rw-r--r-- | src/lib/libcrypto/dso/dso_dlfcn.c | 42 |
1 files changed, 5 insertions, 37 deletions
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c index 0422a4859a..2e72969431 100644 --- a/src/lib/libcrypto/dso/dso_dlfcn.c +++ b/src/lib/libcrypto/dso/dso_dlfcn.c | |||
@@ -56,10 +56,6 @@ | |||
56 | * | 56 | * |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #ifdef __linux | ||
60 | #define _GNU_SOURCE | ||
61 | #endif | ||
62 | |||
63 | #include <stdio.h> | 59 | #include <stdio.h> |
64 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
65 | #include <openssl/dso.h> | 61 | #include <openssl/dso.h> |
@@ -232,7 +228,7 @@ static void *dlfcn_bind_var(DSO *dso, const char *symname) | |||
232 | static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) | 228 | static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) |
233 | { | 229 | { |
234 | void *ptr; | 230 | void *ptr; |
235 | DSO_FUNC_TYPE sym, *tsym = &sym; | 231 | DSO_FUNC_TYPE sym; |
236 | 232 | ||
237 | if((dso == NULL) || (symname == NULL)) | 233 | if((dso == NULL) || (symname == NULL)) |
238 | { | 234 | { |
@@ -250,7 +246,7 @@ static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) | |||
250 | DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE); | 246 | DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE); |
251 | return(NULL); | 247 | return(NULL); |
252 | } | 248 | } |
253 | *(void**)(tsym) = dlsym(ptr, symname); | 249 | sym = (DSO_FUNC_TYPE)dlsym(ptr, symname); |
254 | if(sym == NULL) | 250 | if(sym == NULL) |
255 | { | 251 | { |
256 | DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE); | 252 | DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE); |
@@ -285,41 +281,13 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename) | |||
285 | if(transform) | 281 | if(transform) |
286 | { | 282 | { |
287 | if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) | 283 | if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) |
288 | sprintf(translated, "lib%s.so", filename); | 284 | snprintf(translated, rsize, "lib%s.so", filename); |
289 | else | 285 | else |
290 | sprintf(translated, "%s.so", filename); | 286 | snprintf(translated, rsize, "%s.so", filename); |
291 | } | 287 | } |
292 | else | 288 | else |
293 | sprintf(translated, "%s", filename); | 289 | snprintf(translated, rsize, "%s", filename); |
294 | return(translated); | 290 | return(translated); |
295 | } | 291 | } |
296 | 292 | ||
297 | #ifdef OPENSSL_FIPS | ||
298 | static void dlfcn_ref_point(){} | ||
299 | |||
300 | int DSO_pathbyaddr(void *addr,char *path,int sz) | ||
301 | { | ||
302 | Dl_info dli; | ||
303 | int len; | ||
304 | |||
305 | if (addr == NULL) | ||
306 | { | ||
307 | union { void(*f)(void); void *p; } t = { dlfcn_ref_point }; | ||
308 | addr = t.p; | ||
309 | } | ||
310 | |||
311 | if (dladdr(addr,&dli)) | ||
312 | { | ||
313 | len = (int)strlen(dli.dli_fname); | ||
314 | if (sz <= 0) return len+1; | ||
315 | if (len >= sz) len=sz-1; | ||
316 | memcpy(path,dli.dli_fname,len); | ||
317 | path[len++]=0; | ||
318 | return len; | ||
319 | } | ||
320 | |||
321 | ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror()); | ||
322 | return -1; | ||
323 | } | ||
324 | #endif | ||
325 | #endif /* DSO_DLFCN */ | 293 | #endif /* DSO_DLFCN */ |