From owner-freebsd-bugs@FreeBSD.ORG Sun Sep 10 20:20:36 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DFF9116A415 for ; Sun, 10 Sep 2006 20:20:36 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3D9AB43D7B for ; Sun, 10 Sep 2006 20:20:27 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k8AKKQTV073372 for ; Sun, 10 Sep 2006 20:20:26 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k8AKKQVB073371; Sun, 10 Sep 2006 20:20:26 GMT (envelope-from gnats) Date: Sun, 10 Sep 2006 20:20:26 GMT Message-Id: <200609102020.k8AKKQVB073371@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Marcin Cieslak Cc: Subject: Re: kern/99068: [linux] Linux emulator crashed by java, when calling ioctl(fd,SIOCGIFINDEX,...) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Marcin Cieslak List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Sep 2006 20:20:37 -0000 The following reply was made to PR kern/99068; it has been noted by GNATS. From: Marcin Cieslak To: bug-followup@FreeBSD.org, esepecesito@gmail.com Cc: emulation@FreeBSD.org Subject: Re: kern/99068: [linux] Linux emulator crashed by java, when calling ioctl(fd,SIOCGIFINDEX,...) Date: Sun, 10 Sep 2006 22:18:13 +0200 A quick patch for this as below (linux.h needs to patched for all architectures). --- linux.h Sun Sep 10 22:03:28 2006 +++ linux.h_new Sun Sep 10 22:02:53 2006 @@ -657,6 +657,7 @@ struct l_sockaddr ifru_hwaddr; l_short ifru_flags[1]; l_int ifru_metric; + l_int ifru_ivalue; l_int ifru_mtu; struct l_ifmap ifru_map; char ifru_slave[LINUX_IFNAMSIZ]; @@ -666,6 +667,7 @@ #define ifr_name ifr_ifrn.ifrn_name /* interface name */ #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ +#define ifr_ifindex ifr_ifru.ifru_ivalue /* Interface index */ /* * poll() --- linux_ioctl.h Sun Sep 10 22:05:48 2006 +++ linux_ioctl.h_new Sun Sep 10 22:05:32 2006 @@ -196,9 +196,10 @@ #define LINUX_SIOCGIFHWADDR 0x8927 #define LINUX_SIOCADDMULTI 0x8931 #define LINUX_SIOCDELMULTI 0x8932 +#define LINUX_SIOCGIFINDEX 0x8933 #define LINUX_IOCTL_SOCKET_MIN LINUX_FIOSETOWN -#define LINUX_IOCTL_SOCKET_MAX LINUX_SIOCDELMULTI +#define LINUX_IOCTL_SOCKET_MAX LINUX_SIOCGIFINDEX /* * Device private ioctl calls --- linux_ioctl.c Sun Sep 10 22:05:48 2006 +++ linux_ioctl.c_new Sun Sep 10 22:08:24 2006 @@ -2239,6 +2239,17 @@ return (copyout(&flags, &ifr->ifr_flags, sizeof(flags))); } +static int +linux_ifindex(struct thread *td, struct ifnet *ifp, struct l_ifreq *ifr) +{ +#if DEBUG + printf("Interface index: %d\n", ifp->if_index); +#endif + l_int index; + index = ifp->if_index; + return (copyout(&index, &ifr->ifr_ifindex, sizeof(index))); +} + #define ARPHRD_ETHER 1 #define ARPHRD_LOOPBACK 772 @@ -2325,6 +2336,7 @@ case LINUX_SIOCSIFADDR: case LINUX_SIOCGIFDSTADDR: case LINUX_SIOCGIFBRDADDR: + case LINUX_SIOCGIFINDEX: case LINUX_SIOCGIFNETMASK: case LINUX_SIOCSIFNETMASK: case LINUX_SIOCGIFMTU: @@ -2421,6 +2433,11 @@ case LINUX_SIOCGIFBRDADDR: args->cmd = OSIOCGIFBRDADDR; error = ioctl(td, (struct ioctl_args *)args); + break; + + case LINUX_SIOCGIFINDEX: + args->cmd = SIOCGIFINDEX; + error = linux_ifindex(td, ifp, (struct l_ifreq *)args->arg); break; case LINUX_SIOCGIFNETMASK: -- << Marcin Cieslak // saper@system.pl >>