From patchwork Thu Feb 7 12:18:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1038032 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="Z1ZS3Cib"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43wHRD6DJcz9s7h for ; Thu, 7 Feb 2019 23:18:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727057AbfBGMSq (ORCPT ); Thu, 7 Feb 2019 07:18:46 -0500 Received: from mail-eopbgr50067.outbound.protection.outlook.com ([40.107.5.67]:50592 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726880AbfBGMSq (ORCPT ); Thu, 7 Feb 2019 07:18:46 -0500 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=6ba9ikMLdf1g59Ur3JuFPK2T3IBH7yGPzIYsIs74v2A=; b=Z1ZS3CibBR8evkOb2I0E4G6kRea8eOXbaAq40FjdL3l1vuB3+dxKUecDbMVaFo4kGeI1vaUgvrcOFW5oRkMrRV55BtheJUQmWPWEWXOFlrg1YTV/oYm4RxAYUbQ5KH42cx21EqY+IdqmWVWKKImKZ29VwV/V5FaWv8NQGpBuLl0= Received: from HE1PR05MB3243.eurprd05.prod.outlook.com (10.170.243.17) by HE1PR05MB3323.eurprd05.prod.outlook.com (10.170.243.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.17; Thu, 7 Feb 2019 12:18:02 +0000 Received: from HE1PR05MB3243.eurprd05.prod.outlook.com ([fe80::bd64:ac29:9386:795]) by HE1PR05MB3243.eurprd05.prod.outlook.com ([fe80::bd64:ac29:9386:795%2]) with mapi id 15.20.1601.016; Thu, 7 Feb 2019 12:18:02 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko Subject: [PATCH net-next] net: vxlan: Free a leaked vetoed multicast rdst Thread-Topic: [PATCH net-next] net: vxlan: Free a leaked vetoed multicast rdst Thread-Index: AQHUvt8rfOBYuHBhSEiEh1kp2BamvA== Date: Thu, 7 Feb 2019 12:18:02 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P192CA0069.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::46) To HE1PR05MB3243.eurprd05.prod.outlook.com (2603:10a6:7:35::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR05MB3323; 6:Y/7go/Ohme2moZ/NVAKZ+FGdk9drMkMuvhyOzc2YJinSsQCFXVXRfCrYm8H6odWSfYhh4lRjJf838NaFvolz1+Td1vTHhhapjKuMjHhlvmF1vKeE5SHucd6lZkVUkDA4fK/Nt9Ium5j7DtkzgKtNAXUUJSzgIMMvUAyVgNrfzDudw1M4Q0Ozujtze/wK2d0jlk7sZ3hpRLy/qq79HO1rz25W+fT0yK7gtUmOygckNn6cxRJBLhG+ErxiE0InCbHISsGYzv1Bit0kVZHQhzeHRCY3+8IlUUwVnG1lgXj+nlXRG9uso7v5kVJ6YG4EGMYsBy7uebE7fxzbSB3s5NaVYqkf5Qx/TPczmJ17RkWJ+THcsgjRSGRYTDLpZWq1+1wm4fbgPnRvJtkw5Bmcnojpp6v+EjI++BS+bD6mtXXdK20/QXneAOLpVixiUZ9JJ+g7Ul2zrrqdzLGoZF2c9TOBtw==; 5:iH1gXVpmg22Oyj2tCsciXW4xGR9OLu2jxqMW1s/kbbDxT9yzOf3Zg0Obi7nFtSwm94a403m/PVBitOD0XpFMK/u39HH3VG+BYTjqzCOlu9eeUQWOrRF7HMHfrr+cwfYOzx09m0hYrZ4QNYS9Yc6ijLffEHWdEP10DvZwm2056myQCDmRjc5ddjvBXkPHrSqv2jXXvXlgFR4KG8/8FuZpsQ==; 7:f369SP/PotZSm3okddKYZLrjzGchCf7EcCO3k+dEmHyJqYDOKGzRDS+H8h+REmTF88C0ZQzNgpA4pPQPiIn0vHP4LJlVJ6myPvVUmKZmY92DZBPz7GxQ4UlEQEiLJ+ErRxM53oh2oeFw5ITuKae5XQ== x-ms-office365-filtering-correlation-id: fe4aa385-01c4-48b8-f366-08d68cf64e1d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR05MB3323; x-ms-traffictypediagnostic: HE1PR05MB3323: x-microsoft-antispam-prvs: x-forefront-prvs: 0941B96580 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(366004)(346002)(136003)(376002)(396003)(199004)(189003)(2616005)(99286004)(66066001)(6116002)(3846002)(26005)(486006)(14454004)(25786009)(476003)(107886003)(71200400001)(71190400001)(36756003)(14444005)(256004)(102836004)(2501003)(478600001)(6916009)(2906002)(118296001)(4326008)(8676002)(186003)(2351001)(52116002)(8936002)(6436002)(5640700003)(6506007)(316002)(386003)(81166006)(106356001)(81156014)(1730700003)(6512007)(53936002)(54906003)(97736004)(305945005)(86362001)(105586002)(7736002)(68736007)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR05MB3323; H:HE1PR05MB3243.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX: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: bXnRs8qtoe/TG8W+9hsREQrjUVNFC5q7H3+sho20mIdFTd5IBtkRZ0rxGkqoLUWe7/i5dy/9A1Z7x/5WRva9UViwOkr7QaJAkGqEfigqiuVebBGechW2LzMqcXX9YjNZrwQ9q6fIyJsgwvrc6hv49VSlQrT37HrrDe6Qs+DFzea96T9pvp5Bzt6S6VsIzgFJmt5L0iA2DobKNhsbayn0u1PQA4aJSp89LiXtoUFIaezDELHaHU3gCQGnOgVfO5gw+LF89nyDvq3+U2tnmKhHpuQR1clflY8HriXf4h4Fn1T2pWdW4XDhxvyjDdDtEyRHci+G6yyGpbBzyJkjo+08meRALxu58YO5V833W/hCyDMgrdj1Y9e8CiacXG3pKE13S93ZbyvUt53gm4IDqkW7a+FNVf9f90Gn6cAgb+1j63g= MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe4aa385-01c4-48b8-f366-08d68cf64e1d X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2019 12:18:01.6830 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB3323 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When an rdst is rejected by a driver, the current code removes it from the remote list, but neglects to free it. This is triggered by tools/testing/selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh and shows as the following kmemleak trace: unreferenced object 0xffff88817fa3d888 (size 96): comm "softirq", pid 0, jiffies 4372702718 (age 165.252s) hex dump (first 32 bytes): 02 00 00 00 c6 33 64 03 80 f5 a2 61 81 88 ff ff .....3d....a.... 06 df 71 ae ff ff ff ff 0c 00 00 00 04 d2 6a 6b ..q...........jk backtrace: [<00000000296b27ac>] kmem_cache_alloc_trace+0x1ae/0x370 [<0000000075c86dc6>] vxlan_fdb_append.part.12+0x62/0x3b0 [vxlan] [<00000000e0414b63>] vxlan_fdb_update+0xc61/0x1020 [vxlan] [<00000000f330c4bd>] vxlan_fdb_add+0x2e8/0x3d0 [vxlan] [<0000000008f81c2c>] rtnl_fdb_add+0x4c2/0xa10 [<00000000bdc4b270>] rtnetlink_rcv_msg+0x6dd/0x970 [<000000006701f2ce>] netlink_rcv_skb+0x290/0x410 [<00000000c08a5487>] rtnetlink_rcv+0x15/0x20 [<00000000d5f54b1e>] netlink_unicast+0x43f/0x5e0 [<00000000db4336bb>] netlink_sendmsg+0x789/0xcd0 [<00000000e1ee26b6>] sock_sendmsg+0xba/0x100 [<00000000ba409802>] ___sys_sendmsg+0x631/0x960 [<000000003c332113>] __sys_sendmsg+0xea/0x180 [<00000000f4139144>] __x64_sys_sendmsg+0x78/0xb0 [<000000006d1ddc59>] do_syscall_64+0x94/0x410 [<00000000c8defa9a>] entry_SYSCALL_64_after_hwframe+0x49/0xbe Move vxlan_dst_free() up and schedule a call thereof to plug this leak. Fixes: 61f46fe8c646 ("vxlan: Allow vetoing of FDB notifications") Signed-off-by: Petr Machata Acked-by: Jiri Pirko --- drivers/net/vxlan.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index ef45c3c925be..c0cd1c022e77 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -869,6 +869,14 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, call_rcu(&f->rcu, vxlan_fdb_free); } +static void vxlan_dst_free(struct rcu_head *head) +{ + struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu); + + dst_cache_destroy(&rd->dst_cache); + kfree(rd); +} + static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, union vxlan_addr *ip, __u16 state, __u16 flags, @@ -941,8 +949,10 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, err_notify: if ((flags & NLM_F_REPLACE) && rc) *rd = oldrd; - else if ((flags & NLM_F_APPEND) && rc) + else if ((flags & NLM_F_APPEND) && rc) { list_del_rcu(&rd->list); + call_rcu(&rd->rcu, vxlan_dst_free); + } return err; } @@ -1013,14 +1023,6 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan, } } -static void vxlan_dst_free(struct rcu_head *head) -{ - struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu); - - dst_cache_destroy(&rd->dst_cache); - kfree(rd); -} - static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, struct vxlan_rdst *rd, bool swdev_notify) {