From patchwork Tue Jul 4 19:16:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mahesh Bandewar X-Patchwork-Id: 784232 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 3x2DJH4Pskz9s0m for ; Wed, 5 Jul 2017 05:16:31 +1000 (AEST) 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="SAcVqTuj"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752180AbdGDTQZ (ORCPT ); Tue, 4 Jul 2017 15:16:25 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:34017 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751960AbdGDTQX (ORCPT ); Tue, 4 Jul 2017 15:16:23 -0400 Received: by mail-pg0-f67.google.com with SMTP id j186so28406886pge.1 for ; Tue, 04 Jul 2017 12:16:23 -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=pDZWrkH5xexisvbGlWQ8CVKKAOgGv5FMWpexj5C3vAU=; b=SAcVqTujBfSzhhSqdVF6i2nOFyOuQSbVWXAUnxd70JB9jSOkCjwEyKqTdCcdLGa3Xg eMa2HVLPramXggrfvO/Ao/NJhqW6eEO5kG4F0rhiyNbtr98frsCru84y5uRJKLadHVi9 hCUYpQVEt6qrzq4n6uRbWQVue+b0dRV7q0uDpXIq3NBCGfdfQhXVuqCFFbv3NQNDJqmF 1zHQPGmcIwggtDbm5i4sw+dGgqDkcmJ4kKKyd5fVBgSHjv7Ugk37pPBFWMuxedReD6yk 8jG3gvGt7wxDuezHONwJ97iIU4sLXzrxdNYkFlKaOKzQyxCiQFdwjfFoLVHVHckK7Qd7 Zjgg== 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=pDZWrkH5xexisvbGlWQ8CVKKAOgGv5FMWpexj5C3vAU=; b=Eeiu1WL5cZCpPBllSVMCt5yZSXh5azRuKfiJJCcy+dIU/xeN845bC9XBiUCp47Y9qz 8N1QN3U9edC39m8GKpg1YZj5aOQq+q3MUNG26HiaLPytbiomsrZbRShQot0e8CTwFAob AKfSSXJaUDqR9fAROcLqx3WTHspAUpd2s7zMJS87tGHAxVO4m2rCsCsaf6MLdsujUJMn /zDHvBMAiPDmd10sirlvNbHj5pkUc1FPNzZ1Bj67Ot+KfH/y0M3SzNUZ39H7SzZZUOdn jnKSNnT+3THMaAIsTbqkW74CvO7sGPZuXBEpt8c9IY6KoxO8wXy3Rni+PcZxxqQPIXz3 lDiA== X-Gm-Message-State: AIVw110M3j4WJdv7A77yn7wRjRA3sjK8PBOrGTNf5XwAxjgrnPsakxyX NYdqDUEH+MfSughq X-Received: by 10.101.83.135 with SMTP id x7mr17495330pgq.63.1499195782802; Tue, 04 Jul 2017 12:16:22 -0700 (PDT) Received: from localhost ([2620:15c:2cb:201:7058:d186:e0ac:c77e]) by smtp.gmail.com with ESMTPSA id p11sm38388740pfk.128.2017.07.04.12.16.22 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 04 Jul 2017 12:16:22 -0700 (PDT) From: Mahesh Bandewar To: James Morris , Hideaki YOSHIFUJI , Patrick McHardy , David Miller , Eric Dumazet , Eric Biederman Cc: netdev , Mahesh Bandewar , Mahesh Bandewar Subject: [PATCH 1/2] ipv4: initialize fib_trie prior to register_netdev_notifier call. Date: Tue, 4 Jul 2017 12:16:20 -0700 Message-Id: <20170704191620.6503-1-mahesh@bandewar.net> X-Mailer: git-send-email 2.13.2.725.g09c95d1e9-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. 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. However changing order solves the issue. Fixes following crash [ 8.647095] BUG: unable to handle kernel NULL pointer dereference at 0000000000000014 [ 8.654836] IP: kmem_cache_alloc+0xcf/0x1c0 [ 8.658966] PGD 0 [ 8.658967] P4D 0 [ 8.660953] [ 8.664406] Oops: 0000 [#1] SMP [ 8.667505] Modules linked in: [ 8.670519] CPU: 4 PID: 1 Comm: swapper/0 Not tainted 4.12.0-smp-DEV #34 [ 8.677138] Hardware name: Intel Grantley,Wellsburg/Ixion_IT_15, BIOS 2.60.0 06/03/2016 [ 8.685043] task: ffff8f26b2b00dc0 task.stack: ffff9b1500014000 [ 8.690891] RIP: 0010:kmem_cache_alloc+0xcf/0x1c0 [ 8.695535] RSP: 0000:ffff9b1500017c28 EFLAGS: 00010246 [ 8.700696] RAX: ffffffff96ed4f47 RBX: 0000000000000000 RCX: 0000000000000200 [ 8.707743] RDX: 0000000000000400 RSI: 00000000014000c0 RDI: 0000000000000000 [ 8.714791] RBP: ffff9b1500017c58 R08: 0000000000000001 R09: 0000000000000000 [ 8.721837] R10: 0000000000000000 R11: 0000000000000000 R12: 00000000014000c0 [ 8.728886] R13: 00000000014000c0 R14: 0000000000000000 R15: 0000000000000000 [ 8.735932] FS: 0000000000000000(0000) GS:ffff8f26bf500000(0000) knlGS:0000000000000000 [ 8.743925] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 8.749599] CR2: 0000000000000014 CR3: 0000001d05609000 CR4: 00000000001406e0 [ 8.756648] Call Trace: [ 8.759061] ? alternate_node_alloc+0x76/0xa0 [ 8.763364] fib_table_insert+0x1b7/0x4b0 [ 8.767323] fib_magic.isra.17+0xea/0x120 [ 8.771283] fib_add_ifaddr+0x7b/0x190 [ 8.774983] fib_netdev_event+0xc0/0x130 [ 8.778857] register_netdevice_notifier+0x1c1/0x1d0 [ 8.783761] ip_fib_init+0x72/0x85 [ 8.787120] ip_rt_init+0x187/0x1e9 [ 8.790564] ip_init+0xe/0x1a [ 8.793494] inet_init+0x171/0x26c [ 8.796851] ? ipv4_offload_init+0x66/0x66 [ 8.800896] do_one_initcall+0x43/0x160 [ 8.804685] kernel_init_freeable+0x191/0x219 [ 8.808987] ? rest_init+0x80/0x80 [ 8.812343] kernel_init+0xe/0x150 [ 8.815702] ret_from_fork+0x22/0x30 [ 8.819229] 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 [ 8.837882] RIP: kmem_cache_alloc+0xcf/0x1c0 RSP: ffff9b1500017c28 [ 8.843986] CR2: 0000000000000014 [ 8.847288] ---[ end trace 8fc60994c8a367cb ]--- [ 8.851847] Kernel panic - not syncing: Fatal exception [ 8.857035] Rebooting in 10 seconds.. Signed-off-by: Mahesh Bandewar --- net/ipv4/fib_frontend.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 4e678fa892dd..ca22ca47019a 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -1338,9 +1338,9 @@ void __init ip_fib_init(void) 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(); }