From patchwork Wed Jul 19 22:41:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mahesh Bandewar X-Patchwork-Id: 791252 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bandewar-net.20150623.gappssmtp.com header.i=@bandewar-net.20150623.gappssmtp.com header.b="UWON2iNA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xCX862Btwz9rxm for ; Thu, 20 Jul 2017 08:41:42 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755663AbdGSWlj (ORCPT ); Wed, 19 Jul 2017 18:41:39 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:37904 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755655AbdGSWli (ORCPT ); Wed, 19 Jul 2017 18:41:38 -0400 Received: by mail-pg0-f68.google.com with SMTP id s4so1094585pgr.5 for ; Wed, 19 Jul 2017 15:41:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bandewar-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=sMhASsqP3LRZGm5cEu2jozbc567cikV+uNnl7AL8328=; b=UWON2iNAdUgEsi+Sg9jgpUuLG3ExBg2OaHmepCNlLVy8CfD5dVw/t4NFKwjQ5BizI2 pMIJbsW7mNNHtLKJndgPEwQkPdGa2n0U2O0c2alwze2sn4EBJjPD/ETaxXfxJQtR//bn uV5lj0A5ysU1snMZmdmiKY/XDofDgLtk5EZ/kULyTBC46GhD3yryIkXiLzJm5XQby3CK 2ERtcsm9Kfr7Qvr79H1LQ+dV4QVhq/IgVdmND97glO+YYiKzikEzmx//kp9Kuk1NFUHb DiWwM0f9koWdC/S4W8Rmr0rzzCUr4dH1BtxVFzK16op2iWbE21GFuFXLnGSsveikFZyK e4QQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=sMhASsqP3LRZGm5cEu2jozbc567cikV+uNnl7AL8328=; b=ieLCS49Nmdn4H0pVfzFVNymTVhxdDegU2mlztAnWevspavY4U6JpYQIUgRSisDJ+ME V9R81FTQYVKtfPxGBrouO8HUeUdhM7D0R+gZYqMN/wGCYLPzKYzaleJ57Qm4TyJfqKST mDPOs5WuyZ6dTtfFBalz4r5/vzypNMUjae4211xO0seCSYE4f9xS7DbVFKQdMO1v3duU wfMgpofktAqb+4GTwkuRYZdgt0ijfz1koXbXFkedWKi1wyoMMEDGOeyX/s2dUMALISmG Avkib059zQ2CkyfAFtBzYH+DBL3TsGE4yCGWC32ALnJ5TtZeXseiVE7I8WjlJ3hYtuJX U+kg== X-Gm-Message-State: AIVw112DbjLI2krRVPKvFDGm4160wSJn8RHD2wFSq13DKV/tWGXkois4 idMY1Nevi7TUz8pk X-Received: by 10.98.211.93 with SMTP id q90mr1649402pfg.107.1500504098045; Wed, 19 Jul 2017 15:41:38 -0700 (PDT) Received: from localhost ([2620:15c:2cb:201:934:f2ff:aefa:93a4]) by smtp.gmail.com with ESMTPSA id x14sm1481317pfe.83.2017.07.19.15.41.37 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 19 Jul 2017 15:41:37 -0700 (PDT) From: Mahesh Bandewar To: David Miller , Eric Biederman Cc: Eric Dumazet , netdev , Mahesh Bandewar , Mahesh Bandewar Subject: [PATCH 1/3] ipv4: initialize fib_trie prior to register_netdev_notifier call. Date: Wed, 19 Jul 2017 15:41:33 -0700 Message-Id: <20170719224133.34666-1-mahesh@bandewar.net> X-Mailer: git-send-email 2.14.0.rc0.284.gd933b75aa4-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Mahesh Bandewar Net stack initialization currently initializes fib-trie after the first call to netdevice_notifier() call. In fact fib_trie initialization needs to happen before first rtnl_register(). It does not cause any problem since there are no devices UP at this moment, but trying to bring 'lo' UP at initialization would make this assumption wrong and exposes the issue. Fixes following crash Call Trace: ? alternate_node_alloc+0x76/0xa0 fib_table_insert+0x1b7/0x4b0 fib_magic.isra.17+0xea/0x120 fib_add_ifaddr+0x7b/0x190 fib_netdev_event+0xc0/0x130 register_netdevice_notifier+0x1c1/0x1d0 ip_fib_init+0x72/0x85 ip_rt_init+0x187/0x1e9 ip_init+0xe/0x1a inet_init+0x171/0x26c ? ipv4_offload_init+0x66/0x66 do_one_initcall+0x43/0x160 kernel_init_freeable+0x191/0x219 ? rest_init+0x80/0x80 kernel_init+0xe/0x150 ret_from_fork+0x22/0x30 Code: f6 46 23 04 74 86 4c 89 f7 e8 ae 45 01 00 49 89 c7 4d 85 ff 0f 85 7b ff ff ff 31 db eb 08 4c 89 ff e8 16 47 01 00 48 8b 44 24 38 <45> 8b 6e 14 4d 63 76 74 48 89 04 24 0f 1f 44 00 00 48 83 c4 08 RIP: kmem_cache_alloc+0xcf/0x1c0 RSP: ffff9b1500017c28 CR2: 0000000000000014 Fixes: 7b1a74fdbb9e ("[NETNS]: Refactor fib initialization so it can handle multiple namespaces.") Fixes: 7f9b80529b8a ("[IPV4]: fib hash|trie initialization") Signed-off-by: Mahesh Bandewar Acked-by: "Eric W. Biederman" --- net/ipv4/fib_frontend.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 4e678fa892dd..044d2a159a3c 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -1334,13 +1334,14 @@ static struct pernet_operations fib_net_ops = { void __init ip_fib_init(void) { - rtnl_register(PF_INET, RTM_NEWROUTE, inet_rtm_newroute, NULL, NULL); - rtnl_register(PF_INET, RTM_DELROUTE, inet_rtm_delroute, NULL, NULL); - rtnl_register(PF_INET, RTM_GETROUTE, NULL, inet_dump_fib, NULL); + fib_trie_init(); register_pernet_subsys(&fib_net_ops); + register_netdevice_notifier(&fib_netdev_notifier); register_inetaddr_notifier(&fib_inetaddr_notifier); - fib_trie_init(); + rtnl_register(PF_INET, RTM_NEWROUTE, inet_rtm_newroute, NULL, NULL); + rtnl_register(PF_INET, RTM_DELROUTE, inet_rtm_delroute, NULL, NULL); + rtnl_register(PF_INET, RTM_GETROUTE, NULL, inet_dump_fib, NULL); }