Build error with GCC 10 in NetworkInterface.c and k_standard.c

Koichi Sakata sakatakui at oss.nttdata.com
Wed Jun 24 07:48:48 UTC 2020


Hi all,

(I've sent a similar e-mail before to this ML, but I extract the part 
only related to core-libs-dev ML from the previous one.)

I tried to build OpenJDK fastdebug with GCC 10.1 on Ubuntu 18.04, but I 
saw some compiler warnings as follows:

/home/jyukutyo/code/jdk/src/java.base/share/native/libfdlibm/: In 
function '__j__kernel_standard':
/home/jyukutyo/code/jdk/src/java.base/share/native/libfdlibm/k_standard.c:743:19: 
error: 'exc.retval' may be used uninitialized in this function 
[-Werror=maybe-uninitialized]
   743 |         return exc.retval;
       |                ~~~^~~~~~~

In file included from /usr/include/string.h:494,
                  from 
/home/jyukutyo/code/jdk/src/java.base/unix/native/libnet/NetworkInterface.c:30:
In function 'strncpy',
     inlined from 'getFlags' at 
/home/jyukutyo/code/jdk/src/java.base/unix/native/libnet/NetworkInterface.c:1362:5,
     inlined from 'addif' at 
/home/jyukutyo/code/jdk/src/java.base/unix/native/libnet/NetworkInterface.c:974:13:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: 
'__builtin_strncpy' output may be truncated copying 15 bytes from a 
string of length 15 [-Werror=stringop-truncation]
   106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos 
(__dest));
       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I can resolve them with the following patch. I believe it fixes those 
potential bugs, so I'd like to contribute it.
(Our company has signed OCA.)

Thanks,
Koichi

===== PATCH =====
diff -r 20d92fe3ac52 src/java.base/share/native/libfdlibm/k_standard.c
--- a/src/java.base/share/native/libfdlibm/k_standard.c Tue Jun 16 
03:16:41 2020 +0000
+++ b/src/java.base/share/native/libfdlibm/k_standard.c Thu Jun 18 
07:08:50 2020 +0900
@@ -739,6 +739,10 @@
                          errno = EDOM;
                  }
                  break;
+            default:
+                exc.retval = zero;
+                errno = EINVAL;
+                break;
          }
          return exc.retval;
  }
diff -r 20d92fe3ac52 src/java.base/unix/native/libnet/NetworkInterface.c
--- a/src/java.base/unix/native/libnet/NetworkInterface.c       Tue Jun 
16 03:16:41 2020 +0000
+++ b/src/java.base/unix/native/libnet/NetworkInterface.c       Thu Jun 
18 07:08:50 2020 +0900
@@ -1296,7 +1296,10 @@
  static int getIndex(int sock, const char *name) {
      struct ifreq if2;
      memset((char *)&if2, 0, sizeof(if2));
-    strncpy(if2.ifr_name, name, sizeof(if2.ifr_name) - 1);
+    if (sizeof(if2.ifr_name) < sizeof(name)) {
+        return -1;
+    }
+    strcpy(if2.ifr_name, name);

      if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
          return -1;
@@ -1359,7 +1362,10 @@
  static int getFlags(int sock, const char *ifname, int *flags) {
      struct ifreq if2;
      memset((char *)&if2, 0, sizeof(if2));
-    strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
+    if (sizeof(if2.ifr_name) < sizeof(ifname)) {
+        return -1;
+    }
+    strcpy(if2.ifr_name, ifname);

      if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
          return -1;


More information about the core-libs-dev mailing list