openssl#5668: corrections after compiling with -qinfo=all:als.
authorMatthias Kraft <Matthias.Kraft@softwareag.com>
Thu, 12 Apr 2018 10:25:27 +0000 (12:25 +0200)
committerRichard Levitte <levitte@openssl.org>
Sat, 14 Apr 2018 11:28:31 +0000 (13:28 +0200)
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)

crypto/dso/dso_dlfcn.c

index 7abfe66..21bfb3b 100644 (file)
@@ -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;
     }