From owner-freebsd-bugs@FreeBSD.ORG Mon Aug 8 13:00:29 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 0B6E31065679 for ; Mon, 8 Aug 2011 13:00:29 +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 C2FBC8FC15 for ; Mon, 8 Aug 2011 13:00:28 +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 p78D0SfD087171 for ; Mon, 8 Aug 2011 13:00:28 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p78D0SM4087168; Mon, 8 Aug 2011 13:00:28 GMT (envelope-from gnats) Resent-Date: Mon, 8 Aug 2011 13:00:28 GMT Resent-Message-Id: <201108081300.p78D0SM4087168@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, Svatopluk Kraus Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 64BC4106566B for ; Mon, 8 Aug 2011 12:54:44 +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 543728FC14 for ; Mon, 8 Aug 2011 12:54:44 +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 p78CsiqE078860 for ; Mon, 8 Aug 2011 12:54:44 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p78CsiNh078859; Mon, 8 Aug 2011 12:54:44 GMT (envelope-from nobody) Message-Id: <201108081254.p78CsiNh078859@red.freebsd.org> Date: Mon, 8 Aug 2011 12:54:44 GMT From: Svatopluk Kraus To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: misc/159601: [patch] in_scrubprefix() - loopback route refcount malfunction 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: Mon, 08 Aug 2011 13:00:29 -0000 >Number: 159601 >Category: misc >Synopsis: [patch] in_scrubprefix() - loopback route refcount malfunction >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Aug 08 13:00:28 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Svatopluk Kraus >Release: current >Organization: >Environment: >Description: Loopback route for same source address (two NIC with same source address) is refcounted in in_ifinit(). In in_ifscrubprefix(), a loopback route is deleted only if LLE_STATIC flag is given but refcount always is process. It leads to inconsistency as during interface up and down cycle in_ifscrubprefix() is called without LLE_STATIC flag. I.e., loopback route should persist in routing table even if an interface is down. When same address is set on two interfaces, then if first one goes down and second one deletes the address, then loopback route is vanishing from routing table. >How-To-Repeat: >Fix: Index: sys/netinet/in.c =================================================================== --- sys/netinet/in.c (revision 224705) +++ sys/netinet/in.c (working copy) @@ -1126,7 +1126,7 @@ RT_LOCK(ia_ro.ro_rt); if (ia_ro.ro_rt->rt_refcnt <= 1) freeit = 1; - else + else if (flags & LLE_STATIC) RT_REMREF(ia_ro.ro_rt); RTFREE_LOCKED(ia_ro.ro_rt); } >Release-Note: >Audit-Trail: >Unformatted: