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=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 B40E5C43381 for ; Sun, 3 Mar 2019 07:35:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 77F0E20857 for ; Sun, 3 Mar 2019 07:35:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="Xu6xDYrT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725985AbfCCHf4 (ORCPT ); Sun, 3 Mar 2019 02:35:56 -0500 Received: from mail-eopbgr20051.outbound.protection.outlook.com ([40.107.2.51]:45729 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725877AbfCCHfz (ORCPT ); Sun, 3 Mar 2019 02:35:55 -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=5JiEda6vk88XvUnVz+YCAJ8MKVgntUDCdB3zcHUo5p4=; b=Xu6xDYrTyrLHUm5XyOXp7vbKciIdCSO099SUBAQKFQuha7hegsW4DVkODarc1np/DStiDWyDiptzoNzkNTf6o7rNgtZmZ759NMxU8OsxlUOZQzROhcS0+G4+lnzX/JsNduollLh52WJX9AcSwCKmcQAw22HU/5YdiGuWKGjudP0= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB5604.eurprd05.prod.outlook.com (20.177.188.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.15; Sun, 3 Mar 2019 07:35:51 +0000 Received: from AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::458c:8deb:ca54:1327]) by AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::458c:8deb:ca54:1327%2]) with mapi id 15.20.1665.019; Sun, 3 Mar 2019 07:35:51 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , mlxsw , Ido Schimmel Subject: [PATCH net] team: Free BPF filter when unregistering netdev Thread-Topic: [PATCH net] team: Free BPF filter when unregistering netdev Thread-Index: AQHU0ZO5vmY+dL2pIU26yjApCtyU+A== Date: Sun, 3 Mar 2019 07:35:51 +0000 Message-ID: <20190303073516.10798-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR0502CA0066.eurprd05.prod.outlook.com (2603:10a6:20b:56::43) To AM6PR05MB5240.eurprd05.prod.outlook.com (2603:10a6:20b:64::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0a4d6b59-b492-4de6-389f-08d69faadc4a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR05MB5604; x-ms-traffictypediagnostic: AM6PR05MB5604: x-microsoft-exchange-diagnostics: =?iso-8859-1?Q?1;AM6PR05MB5604;23:kD96qQQpmMdA7kHeaHjMA8SVfPN1rOLvFz/Rns+?= =?iso-8859-1?Q?Dy9QEjOLu5+UuY4+guZtp3ecFW/qM3rjPRhEfQVgRAqf+KU/k5zygslmX2?= =?iso-8859-1?Q?412HTUAjV2ilE4S9QqT45N7LZ0fwn+Vl0Ey/eccU7/C9Zc4FB7t0xHWGeR?= =?iso-8859-1?Q?dRSNaBmNggchWfCBkHREv3WJK75kZ5J8R/wmZe2oEFqSBUCw5+WtWilNa6?= =?iso-8859-1?Q?pskgr6DZJJI08D9UJ+YW86N9a19g38KPDEYu4RWvtbKncLXFVU2TtNErh5?= =?iso-8859-1?Q?CXTuxIbA+t2X0tBm7UXQIxGAwStwEUnTuFVtAGpaRQbbRQTxA/h61o7gwZ?= =?iso-8859-1?Q?0KBctNMzDgxqkaPUpTX8OiG9zzcSqaYGPpYNsIpmLy0jpsGozhi6jHilB7?= =?iso-8859-1?Q?S+FhR7lhdT7B5ihMByHJBmqN660T1rBi4+SBENKeXylSESinWn1B+nPNxz?= =?iso-8859-1?Q?rIpwGfh2Pc5D5KGvKEpunPGhu40Rub87ZE47YwXRdc5/7t2YUkvH0XSU7m?= =?iso-8859-1?Q?KliJtWrIx+MW5zEk6XZ182oTSZ1xUWcwrXfOosk2NvUS2pmLLAoy8nS1OR?= =?iso-8859-1?Q?WKff02+1earVKb7XGco1ObOkgmyA2tnXhQuIE1QIzIUvxfjGygP43Dt8fV?= =?iso-8859-1?Q?TvSVglxeZ0YA/ElfClYXO+ct71BZN6PeD7qmHwDND3i/AUjp/xlDX2zL27?= =?iso-8859-1?Q?wsvkwDIbq9EYgFNwR9oyZzX+tnjQzjACcpeyTZMujqgDCH/xlkgyP76REh?= =?iso-8859-1?Q?C37DYqCAz1f1Kz2DvL797LT0qI6a4sSgB+Vr0SNFAZSBUoTbVeu9ALRVgR?= =?iso-8859-1?Q?B3cQDD+w7+fYK89iVx8OQOk+4yxzuZ4h62LOhP2wf0zjtuTAwmHtWXGZBy?= =?iso-8859-1?Q?H5vtc7Ffx4/zYdDl02aM6iJS+/TEdwXmEmrZ2uBwXF52pwfipvRH2gmTRC?= =?iso-8859-1?Q?pbXFaJ6g4ggtXKKAwk3WKLTAzfiwpUgQuHauKMLCpBcyvQkQmJAxPC+HHP?= =?iso-8859-1?Q?eBeLjEfs3eULpeuzB4P27wLPQipzU+ELwWsMeX+kycjbuP6neUFHxxcv+m?= =?iso-8859-1?Q?fN6xqYMSjLB0Dz5UulXy0QzxegF0de8BWQZhoDmNd1xNvFYnNKwU9ozYTo?= =?iso-8859-1?Q?MeYrpdk5FOrAKZe+X27JYvGqHCeLwyr4GfoBmjsiU90/xgH6Nsiq4et56L?= =?iso-8859-1?Q?bWBUs+Lyk35LmfFybnQXK42A6eT9N2Mnw8Q129ZcwCqQ2gNxIMcclau2f7?= =?iso-8859-1?Q?LVpKCkBaPOeLMscKr0eW1ERsMfaVNQRyN/ng9Sm7yPB0E5cMJMAKW7OW4q?= =?iso-8859-1?Q?uSyWRuxqJg0+c/NrSqHl/ZA?= x-microsoft-antispam-prvs: x-forefront-prvs: 096507C068 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(396003)(346002)(136003)(366004)(39850400004)(189003)(199004)(107886003)(4326008)(6506007)(386003)(102836004)(54906003)(26005)(2501003)(3846002)(6116002)(316002)(6436002)(53936002)(105586002)(86362001)(66066001)(71200400001)(71190400001)(52116002)(6512007)(1076003)(6486002)(5640700003)(2351001)(106356001)(2906002)(478600001)(7736002)(305945005)(186003)(50226002)(97736004)(8936002)(6916009)(2616005)(476003)(68736007)(25786009)(486006)(1730700003)(36756003)(14454004)(81156014)(8676002)(81166006)(14444005)(256004)(99286004)(5660300002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB5604;H:AM6PR05MB5240.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: mJLkyQ6j0v95Yj/D8WmEo1EoAxzTomkXDRPTvE+c8ZA+ZqTr3o8UN12WghTuDm8KV9ZavJpuzcnkKQAQY12myDd4y9pFErLYPBRrLC4ykW8Q6FwPfuuTlOR3eI7nxknbR/64X+1OF5dw38KpBLGxq+hwegEePitu4P5cNiu7GAR2ULz4IpMBhlSV5STbiLCfM18o0EF4nP9bJCb9+JEoo+6RgIPfSG/rPKul+nsGe730Qk9xEbsIZ90qlfSW9u8l9w32n56eIfS6YpOgwELjSfDk8CWoC5SfLXRfOeC46pf8yo/CGxb0drB7DsBEMCjTD5gFYDp90eTEbpxTQ7+g+EjPhXIyvcp5vFSVMA/4TvtdKe+8gzP0bd2OZ+UuZDlOxqvgQ1v7KQC1HiPWSsBGvPbp0YdtCWCuWhxNVUSt82k= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a4d6b59-b492-4de6-389f-08d69faadc4a X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Mar 2019 07:35:51.1464 (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: AM6PR05MB5604 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When team is used in loadbalance mode a BPF filter can be used to provide a hash which will determine the Tx port. When the netdev is later unregistered the filter is not freed which results in memory leaks [1]. Fix by freeing the program and the corresponding filter when unregistering the netdev. [1] unreferenced object 0xffff8881dbc47cc8 (size 16): comm "teamd", pid 3068, jiffies 4294997779 (age 438.247s) hex dump (first 16 bytes): a3 00 6b 6b 6b 6b 6b 6b 88 a5 82 e1 81 88 ff ff ..kkkkkk........ backtrace: [<000000008a3b47e3>] team_nl_cmd_options_set+0x88f/0x11b0 [<00000000c4f4f27e>] genl_family_rcv_msg+0x78f/0x1080 [<00000000610ef838>] genl_rcv_msg+0xca/0x170 [<00000000a281df93>] netlink_rcv_skb+0x132/0x380 [<000000004d9448a2>] genl_rcv+0x29/0x40 [<000000000321b2f4>] netlink_unicast+0x4c0/0x690 [<000000008c25dffb>] netlink_sendmsg+0x929/0xe10 [<00000000068298c5>] sock_sendmsg+0xc8/0x110 [<0000000082a61ff0>] ___sys_sendmsg+0x77a/0x8f0 [<00000000663ae29d>] __sys_sendmsg+0xf7/0x250 [<0000000027c5f11a>] do_syscall_64+0x14d/0x610 [<000000006cfbc8d3>] entry_SYSCALL_64_after_hwframe+0x49/0xbe [<00000000e23197e2>] 0xffffffffffffffff unreferenced object 0xffff8881e182a588 (size 2048): comm "teamd", pid 3068, jiffies 4294997780 (age 438.247s) hex dump (first 32 bytes): 20 00 00 00 02 00 00 00 30 00 00 00 28 f0 ff ff .......0...(... 07 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 ........(....... backtrace: [<000000002daf01fb>] lb_bpf_func_set+0x45c/0x6d0 [<000000008a3b47e3>] team_nl_cmd_options_set+0x88f/0x11b0 [<00000000c4f4f27e>] genl_family_rcv_msg+0x78f/0x1080 [<00000000610ef838>] genl_rcv_msg+0xca/0x170 [<00000000a281df93>] netlink_rcv_skb+0x132/0x380 [<000000004d9448a2>] genl_rcv+0x29/0x40 [<000000000321b2f4>] netlink_unicast+0x4c0/0x690 [<000000008c25dffb>] netlink_sendmsg+0x929/0xe10 [<00000000068298c5>] sock_sendmsg+0xc8/0x110 [<0000000082a61ff0>] ___sys_sendmsg+0x77a/0x8f0 [<00000000663ae29d>] __sys_sendmsg+0xf7/0x250 [<0000000027c5f11a>] do_syscall_64+0x14d/0x610 [<000000006cfbc8d3>] entry_SYSCALL_64_after_hwframe+0x49/0xbe [<00000000e23197e2>] 0xffffffffffffffff Fixes: 01d7f30a9f96 ("team: add loadbalance mode") Signed-off-by: Ido Schimmel Reported-by: Amit Cohen --- drivers/net/team/team_mode_loadbalance.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/te= am_mode_loadbalance.c index a5ef97010eb3..5541e1c19936 100644 --- a/drivers/net/team/team_mode_loadbalance.c +++ b/drivers/net/team/team_mode_loadbalance.c @@ -325,6 +325,20 @@ static int lb_bpf_func_set(struct team *team, struct t= eam_gsetter_ctx *ctx) return 0; } =20 +static void lb_bpf_func_free(struct team *team) +{ + struct lb_priv *lb_priv =3D get_lb_priv(team); + struct bpf_prog *fp; + + if (!lb_priv->ex->orig_fprog) + return; + + __fprog_destroy(lb_priv->ex->orig_fprog); + fp =3D rcu_dereference_protected(lb_priv->fp, + lockdep_is_held(&team->lock)); + bpf_prog_destroy(fp); +} + static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ct= x) { struct lb_priv *lb_priv =3D get_lb_priv(team); @@ -639,6 +653,7 @@ static void lb_exit(struct team *team) =20 team_options_unregister(team, lb_options, ARRAY_SIZE(lb_options)); + lb_bpf_func_free(team); cancel_delayed_work_sync(&lb_priv->ex->stats.refresh_dw); free_percpu(lb_priv->pcpu_stats); kfree(lb_priv->ex); --=20 2.20.1