From patchwork Fri Jun 26 23:37:11 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Gospodarek X-Patchwork-Id: 489001 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 349A1140318 for ; Sat, 27 Jun 2015 09:37:54 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b=CzWdUDu3; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755182AbbFZXhs (ORCPT ); Fri, 26 Jun 2015 19:37:48 -0400 Received: from mail-qk0-f178.google.com ([209.85.220.178]:35353 "EHLO mail-qk0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755127AbbFZXho (ORCPT ); Fri, 26 Jun 2015 19:37:44 -0400 Received: by qkbp125 with SMTP id p125so63002317qkb.2 for ; Fri, 26 Jun 2015 16:37:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:cc:subject:date:message-id; bh=JgpBjCQRKrvNVbKYM3jth53Zg6XAtnhq89d+6hgIjaA=; b=CzWdUDu3ykYqTwxCMy6CxHqyObof6JwTPuOY60wBrWveTMFVEeCTh8c1TXa2jGAMUN L695t4RSI001jhVxKujwdqngAggwYZmVtYUwqTLjH1fFRBLj/UGWIDh3tGp9sB+M4A/h Gb6PbbUbZ+L96S/nqYaWioN1sWJwttAWnHXww= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=JgpBjCQRKrvNVbKYM3jth53Zg6XAtnhq89d+6hgIjaA=; b=k2G7wsTNQRV4+ybEwhRKxUB4tatdvlyIUN4g8tEgRJWhWDJuAkNfDDG2nXROSBNUBP nQEwHsfIfpyinUXQEy51yn/T5/5aK2At7R5KzlxpzD9lCuUsX90KY1nE2iCWgMxSMmGG k2+xL1QF06M+EiTJ34bjta02ZKVVWaxhYzQzc1kRjME9+Y4EQN/86DcCLNECKFF3WOY3 NicCKvo9NL2Q8i1yfGtYq9+t6ueTeNoRbDaThDOUPKZ7b3zrYgrOrFCbT38+mqARIGLY MmlKnr0Oq7puIG2kvSmX99rMC+p9vfnvpLdpIAD3OlnUX/AK2sjuLr2m2uCJM1IIRK7b FnwA== X-Gm-Message-State: ALoCoQkMBFSjpHvO8jx1pWYHLYZjzfXgt5xUU2DkfTgZDC6b2qLE5GtR/uJIb/RuROnv6FLUoggf X-Received: by 10.55.24.94 with SMTP id j91mr9626078qkh.54.1435361863566; Fri, 26 Jun 2015 16:37:43 -0700 (PDT) Received: from fedora-devel.home.greyhouse.net (cpe-24-211-243-155.nc.res.rr.com. [24.211.243.155]) by mx.google.com with ESMTPSA id o130sm7671916qhb.25.2015.06.26.16.37.42 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Jun 2015 16:37:43 -0700 (PDT) From: Andy Gospodarek To: netdev@vger.kernel.org Cc: sergey.senozhatsky.work@gmail.com, Andy Gospodarek Subject: [PATCH net] ipv4: fix RCU lockdep warning from linkdown changes Date: Fri, 26 Jun 2015 19:37:11 -0400 Message-Id: <1435361831-1104-1-git-send-email-gospo@cumulusnetworks.com> X-Mailer: git-send-email 1.9.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The following lockdep splat was seen due to the wrong context for grabbing in_dev. =============================== [ INFO: suspicious RCU usage. ] 4.1.0-next-20150626-dbg-00020-g54a6d91-dirty #244 Not tainted ------------------------------- include/linux/inetdevice.h:205 suspicious rcu_dereference_check() usage! other info that might help us debug this: rcu_scheduler_active = 1, debug_locks = 0 2 locks held by ip/403: #0: (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0x17/0x19 #1: ((inetaddr_chain).rwsem){.+.+.+}, at: [] __blocking_notifier_call_chain+0x35/0x6a stack backtrace: CPU: 2 PID: 403 Comm: ip Not tainted 4.1.0-next-20150626-dbg-00020-g54a6d91-dirty #244 0000000000000001 ffff8800b189b728 ffffffff8150a542 ffffffff8107a8b3 ffff880037bbea40 ffff8800b189b758 ffffffff8107cb74 ffff8800379dbd00 ffff8800bec85800 ffff8800bf9e13c0 00000000000000ff ffff8800b189b7d8 Call Trace: [] dump_stack+0x4c/0x6e [] ? up+0x39/0x3e [] lockdep_rcu_suspicious+0xf7/0x100 [] fib_dump_info+0x227/0x3e2 [] rtmsg_fib+0xa6/0x116 [] fib_table_insert+0x316/0x355 [] fib_magic+0xb7/0xc7 [] fib_add_ifaddr+0xb1/0x13b [] fib_inetaddr_event+0x36/0x90 [] notifier_call_chain+0x4c/0x71 [] __blocking_notifier_call_chain+0x4e/0x6a [] blocking_notifier_call_chain+0x14/0x16 [] __inet_insert_ifa+0x1a5/0x1b3 [] inet_rtm_newaddr+0x350/0x35f [] rtnetlink_rcv_msg+0x17b/0x18a [] ? trace_hardirqs_on+0xd/0xf [] ? netlink_deliver_tap+0x1cb/0x1f7 [] ? rtnl_newlink+0x72a/0x72a ... This patch resolves that splat. Signed-off-by: Andy Gospodarek Reported-by: Sergey Senozhatsky --- net/ipv4/fib_semantics.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 3bfccd8..c7358ea 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -1045,7 +1045,7 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event, nla_put_u32(skb, RTA_OIF, fi->fib_nh->nh_oif)) goto nla_put_failure; if (fi->fib_nh->nh_flags & RTNH_F_LINKDOWN) { - in_dev = __in_dev_get_rcu(fi->fib_nh->nh_dev); + in_dev = __in_dev_get_rtnl(fi->fib_nh->nh_dev); if (in_dev && IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN(in_dev)) rtm->rtm_flags |= RTNH_F_DEAD; @@ -1074,7 +1074,7 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event, rtnh->rtnh_flags = nh->nh_flags & 0xFF; if (nh->nh_flags & RTNH_F_LINKDOWN) { - in_dev = __in_dev_get_rcu(nh->nh_dev); + in_dev = __in_dev_get_rtnl(nh->nh_dev); if (in_dev && IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN(in_dev)) rtnh->rtnh_flags |= RTNH_F_DEAD;