From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7218FC43381 for ; Wed, 27 Mar 2019 08:34:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 395FB2075C for ; Wed, 27 Mar 2019 08:34:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="DZM3e+RY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726312AbfC0IeR (ORCPT ); Wed, 27 Mar 2019 04:34:17 -0400 Received: from mail-eopbgr30060.outbound.protection.outlook.com ([40.107.3.60]:60130 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726241AbfC0IeR (ORCPT ); Wed, 27 Mar 2019 04:34:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oD3SwdthipJjf/N3Lz5wmhqdxHw4m2Fs+NCyEtOWjfA=; b=DZM3e+RY6a0g00jz5pljII+pB6If+XoZIfkpbqsQJb3n1bE9L0Ofqytjv9wiOXJDTREvW0lt37ydyIS9pNDWtcDmubVGnYYSXpCLtYUBxHm/EXbaRohsOBkIP22L6vYhhZfEFzJEO4gJ5lRTSHnjxQMZQBiKTLFMoM7wJY4+RYw= Received: from AM0PR05MB6100.eurprd05.prod.outlook.com (20.178.119.209) by AM0PR05MB4306.eurprd05.prod.outlook.com (52.134.91.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Wed, 27 Mar 2019 08:34:12 +0000 Received: from AM0PR05MB6100.eurprd05.prod.outlook.com ([fe80::85ee:723:721e:51f9]) by AM0PR05MB6100.eurprd05.prod.outlook.com ([fe80::85ee:723:721e:51f9%4]) with mapi id 15.20.1730.019; Wed, 27 Mar 2019 08:34:12 +0000 From: Ido Schimmel To: David Ahern CC: "davem@davemloft.net" , "netdev@vger.kernel.org" , Jiri Pirko , Saeed Mahameed , David Ahern Subject: Re: [PATCH net-next 05/13] ipv6: Create init helper for fib6_nh Thread-Topic: [PATCH net-next 05/13] ipv6: Create init helper for fib6_nh Thread-Index: AQHU5E1apJraceSEHEWnyDALR8jKTaYfJxaA Date: Wed, 27 Mar 2019 08:34:12 +0000 Message-ID: <20190327083409.GA14334@splinter> References: <20190327032942.20473-1-dsahern@kernel.org> <20190327032942.20473-6-dsahern@kernel.org> In-Reply-To: <20190327032942.20473-6-dsahern@kernel.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR0601CA0045.eurprd06.prod.outlook.com (2603:10a6:203:68::31) To AM0PR05MB6100.eurprd05.prod.outlook.com (2603:10a6:208:12e::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5d570222-381d-4d44-f267-08d6b28efce4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:AM0PR05MB4306; x-ms-traffictypediagnostic: AM0PR05MB4306: x-microsoft-antispam-prvs: x-forefront-prvs: 0989A7979C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(7916004)(396003)(136003)(39860400002)(346002)(376002)(366004)(189003)(199004)(43544003)(2906002)(6116002)(54906003)(66066001)(6486002)(6436002)(4326008)(68736007)(478600001)(5660300002)(33716001)(229853002)(6246003)(25786009)(316002)(86362001)(14454004)(6512007)(81156014)(99286004)(81166006)(33656002)(106356001)(26005)(7736002)(105586002)(8676002)(305945005)(53936002)(256004)(1076003)(486006)(6916009)(476003)(446003)(102836004)(71190400001)(76176011)(71200400001)(9686003)(97736004)(6506007)(386003)(11346002)(3846002)(14444005)(186003)(52116002)(8936002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR05MB4306;H:AM0PR05MB6100.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IUj3F3VSrkEmNENT7hF55Kt0COzthEVW1gZnBQotvbSqvZ/Ov6V29TZm/cCKQcqX0nyylWlbljDDsIbHY5Qh/67JmFB/el5tSUqmrRUFwO1rdRw8OfppUejzqFWk3l9VABr2Tz/vdqARjZ5gxmlcfHbpkEVgQy48HdNcVx3WRc0XqbfspJg9p6XXQPkQMusxu+LU7sGJTYtfcW/RHQLrTaiSgU8oGPm8BXiuWKC1eq0zRqdUodUTBgzedDxo8/PirbIVZik0f14Y5Cl+PhZ2eZ0bKZhBbfWD2vlS6nhTTDvrd72ZoXurBZE2X0MLSyytMdP9XNUGLXs1LTxUJsfaugM7opx4D/5ksmB2zdULsUw8OI0LE2MY0DX7qtcYF16QFx5s+1GQOIFDEEH91oku5EWjrds8h1z2O/Ymsti/9lE= Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d570222-381d-4d44-f267-08d6b28efce4 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Mar 2019 08:34:12.0388 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4306 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, Mar 26, 2019 at 08:29:34PM -0700, David Ahern wrote: > +int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh, > + struct fib6_config *cfg, gfp_t gfp_flags, > + struct netlink_ext_ack *extack) > +{ > + struct net_device *dev =3D NULL; > + struct inet6_dev *idev =3D NULL; > + int addr_type; > + int err; > + > + err =3D -ENODEV; > + if (cfg->fc_ifindex) { > + dev =3D dev_get_by_index(net, cfg->fc_ifindex); > + if (!dev) > + goto out; > + idev =3D in6_dev_get(dev); > + if (!idev) > + goto out; > + } > + > + if (cfg->fc_flags & RTNH_F_ONLINK) { > + if (!dev) { > + NL_SET_ERR_MSG(extack, > + "Nexthop device required for onlink"); > + goto out; > + } > + > + if (!(dev->flags & IFF_UP)) { > + NL_SET_ERR_MSG(extack, "Nexthop device is not up"); > + err =3D -ENETDOWN; > + goto out; > + } > + > + fib6_nh->nh_flags |=3D RTNH_F_ONLINK; > + } > + > + if (cfg->fc_encap) { > + struct lwtunnel_state *lwtstate; > + > + err =3D lwtunnel_build_state(cfg->fc_encap_type, > + cfg->fc_encap, AF_INET6, cfg, > + &lwtstate, extack); > + if (err) > + goto out; > + > + fib6_nh->nh_lwtstate =3D lwtstate_get(lwtstate); > + } > + > + fib6_nh->nh_weight =3D 1; > + > + /* We cannot add true routes via loopback here, > + * they would result in kernel looping; promote them to reject routes > + */ > + addr_type =3D ipv6_addr_type(&cfg->fc_dst); > + if ((cfg->fc_flags & RTF_REJECT) || > + (dev && (dev->flags & IFF_LOOPBACK) && > + !(addr_type & IPV6_ADDR_LOOPBACK) && > + !(cfg->fc_flags & RTF_LOCAL))) { > + /* hold loopback dev/idev if we haven't done so. */ > + if (dev !=3D net->loopback_dev) { > + if (dev) { > + dev_put(dev); > + in6_dev_put(idev); > + } > + dev =3D net->loopback_dev; > + dev_hold(dev); > + idev =3D in6_dev_get(dev); > + if (!idev) { > + err =3D -ENODEV; > + goto out; Same comment as previous patch. Earlier in the function you take a reference on the LWT object, but don't drop it in error path and instead rely on the error path of ip6_route_info_create() to take care of that. > + } > + } > + cfg->fc_flags =3D RTF_REJECT | RTF_NONEXTHOP; > + goto set_dev; > + } > + > + if (cfg->fc_flags & RTF_GATEWAY) { > + err =3D ip6_validate_gw(net, cfg, &dev, &idev, extack); > + if (err) > + goto out; > + > + fib6_nh->nh_gw =3D cfg->fc_gateway; > + } > + > + err =3D -ENODEV; > + if (!dev) > + goto out; > + > + if (idev->cnf.disable_ipv6) { > + NL_SET_ERR_MSG(extack, "IPv6 is disabled on nexthop device"); > + err =3D -EACCES; > + goto out; > + } > + > + if (!(dev->flags & IFF_UP) && !cfg->fc_ignore_dev_down) { > + NL_SET_ERR_MSG(extack, "Nexthop device is not up"); > + err =3D -ENETDOWN; > + goto out; > + } > + > + if (!(cfg->fc_flags & (RTF_LOCAL | RTF_ANYCAST)) && > + !netif_carrier_ok(dev)) > + fib6_nh->nh_flags |=3D RTNH_F_LINKDOWN; > + > +set_dev: > + fib6_nh->nh_dev =3D dev; > + err =3D 0; > +out: > + if (idev) > + in6_dev_put(idev); > + > + if (err && dev) > + dev_put(dev); > + > + return err; > +}