From owner-freebsd-bugs@FreeBSD.ORG Wed Mar 2 11:40:12 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 444811065672 for ; Wed, 2 Mar 2011 11:40:12 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id D8C7C8FC1A for ; Wed, 2 Mar 2011 11:40:11 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p22BeBQw074091 for ; Wed, 2 Mar 2011 11:40:11 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p22BeBv9074090; Wed, 2 Mar 2011 11:40:11 GMT (envelope-from gnats) Resent-Date: Wed, 2 Mar 2011 11:40:11 GMT Resent-Message-Id: <201103021140.p22BeBv9074090@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Alex Hayward Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5A0041065677 for ; Wed, 2 Mar 2011 11:34:53 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id 4920D8FC1A for ; Wed, 2 Mar 2011 11:34:53 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p22BYqIf079923 for ; Wed, 2 Mar 2011 11:34:52 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p22BYqFL079922; Wed, 2 Mar 2011 11:34:52 GMT (envelope-from nobody) Message-Id: <201103021134.p22BYqFL079922@red.freebsd.org> Date: Wed, 2 Mar 2011 11:34:52 GMT From: Alex Hayward To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: misc/155186: False exception throw by NetworkInterface.isUp() (and probably others) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Mar 2011 11:40:12 -0000 >Number: 155186 >Category: misc >Synopsis: False exception throw by NetworkInterface.isUp() (and probably others) >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Mar 02 11:40:11 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Alex Hayward >Release: 8.2-PRERELEASE >Organization: Ticketable Ltd >Environment: FreeBSD magnus.xelah.com 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #38: Thu Jan 27 12:11:49 GMT 2011 alex@magnus.xelah.com:/usr/obj/usr/src/sys/MAGNUS amd64 >Description: NetworkInterface.isUp() can throw a SocketException when there was in fact no error. This breaks, for example, JGroups. getFlags in /usr/ports/java/openjdk7/work/openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c returns if2.ifr_flags where if2 is a struct ifreq. Callers expect a negative (int) result on error, a positive one otherwise. ifr_flags is a short and the top bit can be set of multi-cast capable interfaces. This remains negative when cast to an int and the caller believes an error occurred. An exception is thrown based on whatever errno happens to be. My JDK port version is openjdk-7.0.122 >How-To-Repeat: Run this (from JGroups): import java.net.*; import java.util.*; public class test { public static void main(String[] argv) throws SocketException { InetAddress address=null ; try { Enumeration intfs=NetworkInterface.getNetworkInterfaces(); while(intfs.hasMoreElements()) { NetworkInterface intf=(NetworkInterface)intfs.nextElement(); if(intf.isUp()) { //address=getAddress(intf, AddressScope.NON_LOOPBACK) ; //System.err.println(address); } } } catch (SocketException e) { e.printStackTrace(); } } } >Fix: Change the last statement of getFlags to 'return ((int) if2.ifr_flags) & 0xffff;' >Release-Note: >Audit-Trail: >Unformatted: