Date: Tue, 16 Jan 2001 01:50:56 +0100 (CET) From: System Admin Account <admin%dyn@citylink.dinoex.sub.de> To: FreeBSD-gnats-submit@freebsd.org Subject: kern/24365: ifconfig inet6 delete -> kernelpanic Message-ID: <200101160050.f0G0ou735410@dyn.oper.dinoex.org>
next in thread | raw e-mail | index | archive | help
>Number: 24365
>Category: kern
>Synopsis: delete alias from ipv6 p-t-p iface will crash kernel
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Jan 15 17:10:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: System Admin Account
>Release: FreeBSD 4.2-RELEASE i386
>Organization:
>Environment:
kernel built with INET6
>Description:
this works with loopback and p-t-p ifaces.
$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
$ ifconfig lo0 inet6 delete ::1
-> this works as one would expect
$ ifconfig lo0 inet6 delete fe80::1%lo0
-> but this one panics!
Functions called:
rtalloc1 from
rtinit "
in6_ifscrub "
in6_purgeaddr "
in6_control "
ifioctl
>How-To-Repeat:
not applicable, see piece-of-code below for the failure-reason.
>Fix:
Thats what I have done, and what made it work here. As I have
configured IPv6 just out of curiousity and have no real usage
yet for it, I cannot say about side-effects, possibly with a
routing daemon or such.
The code obviousely considers _every_ immanent route on a loopback
or p-t-p iface as a _host_route (and afaik this is true for
classic IP), but the fe80::1%lo0 is some kind of cloneable route:
$ netstat -r
Destination Gateway Flags Netif Expire
fe80::%lo0 fe80::1%lo0 Uc lo0
*** sys/netinet6/in6.c.orig Sat Jul 15 09:14:33 2000
--- sys/netinet6/in6.c Sun Jan 14 04:03:37 2001
***************
*** 1219,1227 ****
{
if ((ia->ia_flags & IFA_ROUTE) == 0)
return;
! if (ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
rtinit(&(ia->ia_ifa), (int)RTM_DELETE, RTF_HOST);
! else
rtinit(&(ia->ia_ifa), (int)RTM_DELETE, 0);
ia->ia_flags &= ~IFA_ROUTE;
--- 1219,1227 ----
{
if ((ia->ia_flags & IFA_ROUTE) == 0)
return;
! /* if (ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
rtinit(&(ia->ia_ifa), (int)RTM_DELETE, RTF_HOST);
! else */
rtinit(&(ia->ia_ifa), (int)RTM_DELETE, 0);
ia->ia_flags &= ~IFA_ROUTE;
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101160050.f0G0ou735410>
