summaryrefslogtreecommitdiffstats
path: root/crypto/dso/dso_dlfcn.c
diff options
context:
space:
mode:
authorMatthias Kraft <Matthias.Kraft@softwareag.com>2018-04-12 12:25:27 +0200
committerRichard Levitte <levitte@openssl.org>2018-04-14 13:28:31 +0200
commitd47eb76cd5fef2495c23705733d7034370063556 (patch)
treef1523fc9c02fd8fb559721c2c0af424d5fb612b7 /crypto/dso/dso_dlfcn.c
parentmake update (diff)
downloadopenssl-d47eb76cd5fef2495c23705733d7034370063556.tar.xz
openssl-d47eb76cd5fef2495c23705733d7034370063556.zip
openssl#5668: corrections after compiling with -qinfo=all:als.
The ongoing discussion about casting or not in PR #5626 had me compiling again with above mentioned flags. Indeed the compiler had to say something about it and I did these changes to silence it again. Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de> Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5943)
Diffstat (limited to '')
-rw-r--r--crypto/dso/dso_dlfcn.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/crypto/dso/dso_dlfcn.c b/crypto/dso/dso_dlfcn.c
index 7abfe66284..21bfb3bbdd 100644
--- a/crypto/dso/dso_dlfcn.c
+++ b/crypto/dso/dso_dlfcn.c
@@ -326,8 +326,9 @@ typedef struct Dl_info {
* address of a function, which is just located in the DATA segment instead of
* the TEXT segment.
*/
-static int dladdr(void *addr, Dl_info *dl)
+static int dladdr(void *ptr, Dl_info *dl)
{
+ uintptr_t addr = (uintptr_t)ptr;
unsigned int found = 0;
struct ld_info *ldinfos, *next_ldi, *this_ldi;
@@ -352,11 +353,12 @@ static int dladdr(void *addr, Dl_info *dl)
do {
this_ldi = next_ldi;
- if (((addr >= this_ldi->ldinfo_textorg)
- && (addr < (this_ldi->ldinfo_textorg + this_ldi->ldinfo_textsize)))
- || ((addr >= this_ldi->ldinfo_dataorg)
- && (addr <
- (this_ldi->ldinfo_dataorg + this_ldi->ldinfo_datasize)))) {
+ if (((addr >= (uintptr_t)this_ldi->ldinfo_textorg)
+ && (addr < ((uintptr_t)this_ldi->ldinfo_textorg +
+ this_ldi->ldinfo_textsize)))
+ || ((addr >= (uintptr_t)this_ldi->ldinfo_dataorg)
+ && (addr < ((uintptr_t)this_ldi->ldinfo_dataorg +
+ this_ldi->ldinfo_datasize)))) {
found = 1;
/*
* Ignoring the possibility of a member name and just returning
@@ -367,7 +369,8 @@ static int dladdr(void *addr, Dl_info *dl)
OPENSSL_strdup(this_ldi->ldinfo_filename)) == NULL)
errno = ENOMEM;
} else {
- next_ldi = (char *)this_ldi + this_ldi->ldinfo_next;
+ next_ldi =
+ (struct ld_info *)((uintptr_t)this_ldi + this_ldi->ldinfo_next);
}
} while (this_ldi->ldinfo_next && !found);
OPENSSL_free((void *)ldinfos);
@@ -395,7 +398,7 @@ static int dlfcn_pathbyaddr(void *addr, char *path, int sz)
len = (int)strlen(dli.dli_fname);
if (sz <= 0) {
# ifdef _AIX
- OPENSSL_free(dli.dli_fname);
+ OPENSSL_free((void *)dli.dli_fname);
# endif
return len + 1;
}
@@ -404,7 +407,7 @@ static int dlfcn_pathbyaddr(void *addr, char *path, int sz)
memcpy(path, dli.dli_fname, len);
path[len++] = 0;
# ifdef _AIX
- OPENSSL_free(dli.dli_fname);
+ OPENSSL_free((void *)dli.dli_fname);
# endif
return len;
}