Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8165665

Method NetworkInterface.getNetworkInterfaces() might fail

XMLWordPrintable

    • generic
    • windows

      FULL PRODUCT VERSION :
      java version "1.7.0_75"
      Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
      Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      The bug was found on Windows 7 64-bit, but can occur on all supported Windows versions.

      A DESCRIPTION OF THE PROBLEM :
      Method NetworkInterface.getNetworkInterfaces() might throw java.lang.Error with error message "IP Helper Library GetIfTable function failed", if it is called at the same time as a new network interface shows up in Windows.

      The reason is a subtle race condition. Function enumInterfaces in NetworkInterface.c first calls GetIfTable(...) with a NULL buffer to retrieve the buffer size. Then it allocates a buffer of this size and calls GetIfTable(...) again. If a new network interface has appeared between these two calls, the buffer will be too small and the last GetIfTable(...) call will fail (that is, return ERROR_INSUFFICIENT_BUFFER instead of 0). Then the function throws a java.lang.Error with the above error message.

      The solution is to call GetIfEntry again with a new buffer if it returns ERROR_INSUFFICIENT_BUFFER, and give up first after a reasonable number of reattempts.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Start a Java application that calls NetworkInterface.getNetworkInterfaces() in a loop. Plug out and in a USB wi-fi adapter until the error occurs.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      No NetworkInterface.getNetworkInterfaces() calls should throw java.lang.Error.
      ACTUAL -
      java.lang.Error: IP Helper Library GetIfTable function failed
              at java.net.NetworkInterface.getAll(Native Method)
              at java.net.NetworkInterface.getNetworkInterfaces(NetworkInterface.java:334)
              ...

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      The bug was found when a client connected to an RMI server, at the same time as a mobile broadband dongle was plugged in to the PC:

      Exception in thread "RMI TCP Accept-0" java.lang.Error: IP Helper Library GetIfTable function failed
              at java.net.NetworkInterface.getAll(Native Method)
              at java.net.NetworkInterface.getNetworkInterfaces(NetworkInterface.java:334)
              at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:86)
              at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:399)
              at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:371)
              at java.lang.Thread.run(Thread.java:745)

      REPRODUCIBILITY :
      This bug can be reproduced rarely.

            Unassigned Unassigned
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: