From patchwork Thu Apr 5 03:00:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 10323727 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4F16A600CB for ; Thu, 5 Apr 2018 03:00:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 393EE28FD4 for ; Thu, 5 Apr 2018 03:00:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2ABAA28FD3; Thu, 5 Apr 2018 03:00:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6BF5B28FD3 for ; Thu, 5 Apr 2018 03:00:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751306AbeDEDAU (ORCPT ); Wed, 4 Apr 2018 23:00:20 -0400 Received: from mail-eopbgr50059.outbound.protection.outlook.com ([40.107.5.59]:15088 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750890AbeDEDAT (ORCPT ); Wed, 4 Apr 2018 23:00:19 -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; bh=GjRkXlOqWd5Jt7JWJOuytSJ0pPXx5e5/gdNKH8yk/+k=; b=fMEoBaoWGw8CGyijxmFwWhJ/3bKGyIhJ8blUDivQZBvLkRmoRWYJI98THX237xpAblCSJ0gm1V9VbryUikli3YcvjwQuXAPL4KfKG3S5VICrYDb01FeOb/dA8ieN8ThXwvIre9Uy7wFBnlcRSA3oq7Z0ete6mom7B2zo6VCsNp4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; Received: from mlx.ziepe.ca (174.3.196.123) by VI1PR05MB4461.eurprd05.prod.outlook.com (2603:10a6:803:43::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Thu, 5 Apr 2018 03:00:15 +0000 Received: from jgg by mlx.ziepe.ca with local (Exim 4.86_2) (envelope-from ) id 1f3v85-000622-MM; Wed, 04 Apr 2018 21:00:01 -0600 Date: Wed, 4 Apr 2018 21:00:01 -0600 From: Jason Gunthorpe To: linux-rdma@vger.kernel.org Cc: Leon Romanovsky Subject: [PATCH v3] RDMA/ucma: Check for a cm_id->device in all user calls that need it Message-ID: <20180405030001.GA23127@ziepe.ca> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [174.3.196.123] X-ClientProxiedBy: MWHPR20CA0046.namprd20.prod.outlook.com (2603:10b6:300:ed::32) To VI1PR05MB4461.eurprd05.prod.outlook.com (2603:10a6:803:43::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7aabe00f-a2cd-47fc-c0ba-08d59aa15b4c X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR05MB4461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4461; 3:StT6lNJ7/FAOtNt3TmZQc4Mp1XuMJFKgBN5mv8bYSJPzWKed4Y7f79SkKAXi8SDjElJupPuJcCs6dOjnf4dcMUEMiJANVT7YKATf19pcJlULlopt3+MKRettIZwRhyGfJPJoQMil46rqBHUopxHkwpIBl85JSZ2M02TOSw9wHxAFWzgRbhFR0LPkutLjW1O7Il6mjKu+VQjkFwyD9jNVBkLl8taPn5KNTHfkGVGC0stm5FV8y1muJoEX1gBn9Ibn; 25:GOiNonk2iADkd3VvLrPpmWBSQq0lpVlUimJoJmyNOuscjXM8EAjugD3hogUFuwt7QYhjyNipgh8uGDQTJCls/lM1sLGvqOjeGAwwUZ6bVMSK5TX6zk8U7gS4UA+L5BpJSGZ/L+AyPHr85q+msyXyzVV7/fJuddKfoY2XyuLiseK8CCbdLCpXlx+ChZ02l7M12vkChASnDl/Jj/iXjp3+PiRMPfSk5ArGgZS6+hzpeCOZKyI7bDkzD9JgVk1n0V4r/h92a82Vb0POyqX4+Rd8vWahul3+Lqn0Y16DByV/htg63Yy7YuT+YILe8aKNQeAvb9Rx/Hxkw0IILoOt+5okhA==; 31:IJfSzaZwipg2fahCUrCKA2iMhgjJvFNL+AGRuxWuXqRbtJdtuUbRdxJj1MJXhycOztJ0SO5gJR8BvagoZN8isjnmsg9DZpj05acWRMTYp12ECvl4XwjGaJUfQRcwXb/PqW6siqbaDkYVItdwN8AOot6y+RoQgA6aqAUsHvYdnu4cncpBPsFDeG6AePqjxkdPPooqzj02Wls5dsqZpEN0dAQKDJNbfD7v1dXfajj6eOo= X-MS-TrafficTypeDiagnostic: VI1PR05MB4461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4461; 20:YNhmBI2zBKHLILX+aN3nIqEkJ0zqsiPbN4WXO+ke8kVDUD8GxpkGcwGnYfMoOjE+GqmErTh9SPssKl9tBVJxDleWWlVXtDRbRXtwgcxkhEx5yaG6UKST82vF61BKhxLnns+g4ddrS7Tv1gZ3zrvyb3TgQxYvaQL4/CNZl/A8IrSPlBKEguiLe2QYFMGjJ04r1/xvigROJsHipektUExVSSkOG19H+6ilAwhqV9atJ7hBgn23CT6vdUVVtTNUgeOHVReFwvrs2gfM39UU2mYgvtbS9M9il8VrMGOdAhDLfwB53blh6ELk1jt3ExHE5Pq4UmlTky+b5GDCuYtdcCp1KlCwSxESQAgysYrDXaB8lOW3Qfawp8on02Om5VSmmdPZqos2+3M9alsSoMYm06Gdn7qF7HUFyyiYESDvVdMhT/jwvjRTDxZhrcChWza5/26e48UljREw45WP/uDMPCrrU0N0RBH5PUMxC+j/AS4JChzllxcyBdhgyMswCcHqo7NV; 4:lXtB8oRqAIi17uqZkHo/xYZiUDAoc8hODqkfHpH6KwS4rfweQkf9p5Up2kt/kZEp/N8M6K+p5emQuOkwmBr3owftnsAI3pIJ/JXG8Uss5b9ZSlD9Qsg2ddXfzXQ+l/fYAyoFR3BZkKfM497ccYYxR52wTx/kEd3Csbt1z4rZMt/QeQdfdiWlxN3y8fncpBRN+uTIPhpW1cOM0Aqixtszz6WpZUJJAqXtJyMzHEfRqUIcRW9PmyxKoBh5sKT/adOCHn5vDR7Qy1L6+0ymIEPTMRP5pK/9/51ffcuqfjoX98wurWUIVk7nS+3Gv4jQR7+P X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:VI1PR05MB4461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR05MB4461; X-Forefront-PRVS: 06339BAE63 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(366004)(396003)(39380400002)(39860400002)(346002)(376002)(189003)(199004)(6916009)(81166006)(81156014)(107886003)(8936002)(478600001)(122856001)(2351001)(2361001)(1076002)(26005)(105586002)(8676002)(57986006)(83796002)(68736007)(316002)(486006)(58126008)(53936002)(9686003)(97736004)(16586007)(46656002)(47776003)(4326008)(33656002)(66066001)(69596002)(7736002)(86362001)(50466002)(5660300001)(305945005)(6116002)(3846002)(23726003)(59450400001)(36756003)(386003)(9746002)(476003)(186003)(9786002)(52116002)(106356001)(33896004)(2906002)(18370500001)(24400500001)(42262002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB4461; H:mlx.ziepe.ca; 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-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR05MB4461; 23:qCrQzS71gsofn3Cm8FoIFAHgVWaATQFANHxU8BSrW?= =?us-ascii?Q?3HA41EaoaZE98i6odvuzs+Hw+8gcZkv+15nkoZZnnGT3MJ7j3eSgYwO3ZMbd?= =?us-ascii?Q?ZfGosjdxUsosTHF85BuTdwWRQRLJzEgpwALh8yWkg70Ji+dun5ocZHLkP+sG?= =?us-ascii?Q?/gnzKKgmX1e67hbpVZnU666kOWXKYv1Lu56SkdOHtkiV2RH+9grHs4afzS9e?= =?us-ascii?Q?CEK/jL0firmXgX0Fc7SNOW5+kSK42tl2P7tqBO5gs/ggJ9sqITKSZ68+zLEW?= =?us-ascii?Q?pwOZF0gYUeHvqREJpIXi6CVgUWDSSlShBKpTErln9aJVf++Dus/ABAm0bog5?= =?us-ascii?Q?KC16u+NCdqhHLdftx92Ub/kFGgRE2FMOHXzol9Hc8/1oFxb3MNHctyw5vB07?= =?us-ascii?Q?JOCaVbnTWWUV48MzqoF9xZ6KNVJDMvG82bYdQNULMUMouRT/cS9cMnRdIrSY?= =?us-ascii?Q?PbDImYFh1rPWkAT0DdcvExbF8xUAcgP5718WS4oZBjyx2TP+732e+yZLEdb1?= =?us-ascii?Q?6DykbanAXd1i2J/6Ohq1js1bsZXOfpWYOBDZ05I+GtYYPaOIxUHXJhHnTFGR?= =?us-ascii?Q?BJrIxxpb405Ql9o0SolWnsQuzeNpWFCs0/vAmE9e93fADrBimiGIUDwil9xx?= =?us-ascii?Q?6aVFQlbNZcFxG7NQTZ2fxQc/xK4UZ/RAut9g9Ly4nOKi+s1FNYvIklFwSvqU?= =?us-ascii?Q?0rmrHDlzm+m6UV37Rg2bTo3iV1QbekOGkkekCSp4P1YyKg1eWN2zmjw2HSfg?= =?us-ascii?Q?AhE0GLA3Nx5EKxd3k2KUVwA3RgPjo6ppfDCa1+WAm/x3QaG2otwwzgIWcaVK?= =?us-ascii?Q?A4KtX1gyZBrSs0R4ld6tNe7ELslTkgG4hVHi/rafzgyoty8Ofpw7MMxlSrZE?= =?us-ascii?Q?po6cUoAD7Ydhufa1aikicBfJwHkLElLPRwjRAHqZQk+bAqBa6n/85Qbu+Dkb?= =?us-ascii?Q?c+p7mi6q2sG+hwSwyrtddvI/29gV3d/3QMp4fa17Lww/6gjjzJmfvAJ8Y2IN?= =?us-ascii?Q?QrZtnNIhJBIkNg5DfpfT//Qnvxbj/kdnrUIbQZGzsyYHzeQl//kPBOTQ2Mjd?= =?us-ascii?Q?aFX/AweN79NPFRrOIDLClssorPgwLith+8JSoUIpD5ur8oXlcZMl0RC5XNaK?= =?us-ascii?Q?p7zeiWusPM8GpIyKm+8DbG9Gv0m5UMA6C3lU2QjrCGNPK4DwV5qLNSGcEp6H?= =?us-ascii?Q?ElxleBy0Rj6fuvu/7DwwwrQQb5DvPn0aZ1AECpkEH8IsSRG6BjELA/zdluX7?= =?us-ascii?Q?ZIbtZ4rl0qZX8074G8UMl/0RVsh1Rq/7Af68L68zsjP+slGxGea7EVtaxBxz?= =?us-ascii?Q?PkrBFj6FojVBEXhgBt20YpLVy6S8zpla4xdtnjpcXy1RUXicsasjCFQobu+q?= =?us-ascii?Q?y8bg2CPZ5eQSYOgvvvkUA7nqyRBaGYpMMdnGH75q12taaZ7UutGau7AzX06t?= =?us-ascii?Q?ivaUdigS29yUpLCW3NcmCWW4hTFMgM=3D?= X-Microsoft-Antispam-Message-Info: fbrQ1Pa+uEihczobcCsG49uZZsjXYZ+X2eaBdPDj8f2zxqA3sukDCg9qySy6KM8yPJ/5Je6BnPw/cJGgs9hc8FVWNqfuRJm3/fGHfjtfzTY/ea/uRAsRTTts6QLB/VVaHomq9xuI3x0U1KlDl9jn6EXi+Nwnh2CAROt1twx2h2vQEzox7JoLSOoRxSmX3kyN X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4461; 6:qzJdgoMuBCQNvgH9zx6Bvc7S+c1yDGiAUpAHIwE8o2jaZ4HPxPIz7LepZ2uFvaEKvJEzWELEXVsPfKcLgBcGD88jd7HvBZxxJ40M6sCO4W1GGvp7i766kU3AcUYy2mJTb4oXg0ZMhx1+QEcyUqaiy5rOPwVSTQ+C8CMZlMD/ez9UPO/Dips/LLwUXDsWDIKfyHTCqQPckSbU0TeSqt9mHHwuVH/Sz7UtsViBJaTERLHvfZ/OgiOmkeJHu6nFEbc/xwA+PcL/jJQMWqOcTZLf1SJM5+S71TppeQZF1XcHlmCQ55jbOgjy3K1M+jQENSWMpHzWvKA4THgri7rQ5e19BJNhXoUTN3ODkJZLzbQHxHmdwA9uJkuMPjFwN4q81EehpJMQH9qR0+yQNu2Et2RpiDOTMZic3tLrlcgqdpK1AJzbzVdmcnpYDUAp80697Wt64hjpauvRuXITBjmxXo4bXA==; 5:mP0j/90LuZdwAprL5o6xF8hB9qvYoqA5J0CTTXBqiN0KM7f+othGuAMrf2ueI2idiJLA5pHQz05erSt6twGexuEOdlDx+SbWHj5aHx6iRX/uxbSe1aPExqvN6gU8jNw8kgOenVSPkvuEGZBtkHqLdqgUV+qTB8OwcD7LlRT7dho=; 24:n4gh+NTMWgnIPB+YZUc8AfIDIvwCrIIr0vzASRu0HqhxQHlHveGfZVkF2KLjUim8Gyrl1NWs7TQKzM7w7BdS46g+iVp3ONRc1qM0eK16PWA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4461; 7:oMOs0/R7A9Z1M7Owhoba69WBe9KSjRK5wWZb7FakjLkPErhEf7bcyzpN5Ah0lE8BVgkn2vuVQY60dZ+nMx5psn/4jlIbSiKzKZ7hZTdf836pm86C2slws52xKeBlnEcDuIsOdOMtCshfCCNe+02Mb4dGjeY0MmIHrK+zNbw/lmE0GwoW60Ua7FdtItE4aM25BjCi9EM9ake3+rHnwL4XBt0OVNH/x6B9nKXvV7ZCdl+pTx2quarXmNPLoBIa/EBK X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2018 03:00:15.2930 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7aabe00f-a2cd-47fc-c0ba-08d59aa15b4c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB4461 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This is done by auditing all callers of ucma_get_ctx and switching the ones that unconditionally touch ->device to ucma_get_ctx_dev. This covers a little less than half of the call sites. The 11 remaining call sites to ucma_get_ctx() were manually audited. It looks like none of these cases cause bugs due to the FSM system inside the CMA, but documenting the requirement and the result of this audit is still productive. Signed-off-by: Jason Gunthorpe Reviewed-by: Leon Romanovsky --- drivers/infiniband/core/ucma.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) v3: - Reorder the function after put_ctx so it compiles warning free I really shouldn't rush so much :( diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c index e74c82ee38a9f7..c838b291bbb72a 100644 --- a/drivers/infiniband/core/ucma.c +++ b/drivers/infiniband/core/ucma.c @@ -159,6 +159,23 @@ static void ucma_put_ctx(struct ucma_context *ctx) complete(&ctx->comp); } +/* + * Same as ucm_get_ctx but requires that ->cm_id->device is valid, eg that the + * CM_ID is bound. + */ +static struct ucma_context *ucma_get_ctx_dev(struct ucma_file *file, int id) +{ + struct ucma_context *ctx = ucma_get_ctx(file, id); + + if (IS_ERR(ctx)) + return ctx; + if (!ctx->cm_id->device) { + ucma_put_ctx(ctx); + return ERR_PTR(-EINVAL); + } + return ctx; +} + static void ucma_close_event_id(struct work_struct *work) { struct ucma_event *uevent_close = container_of(work, struct ucma_event, close_work); @@ -734,7 +751,7 @@ static ssize_t ucma_resolve_route(struct ucma_file *file, if (copy_from_user(&cmd, inbuf, sizeof(cmd))) return -EFAULT; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); @@ -1050,7 +1067,7 @@ static ssize_t ucma_connect(struct ucma_file *file, const char __user *inbuf, if (!cmd.conn_param.valid) return -EINVAL; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); @@ -1092,7 +1109,7 @@ static ssize_t ucma_accept(struct ucma_file *file, const char __user *inbuf, if (copy_from_user(&cmd, inbuf, sizeof(cmd))) return -EFAULT; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); @@ -1120,7 +1137,7 @@ static ssize_t ucma_reject(struct ucma_file *file, const char __user *inbuf, if (copy_from_user(&cmd, inbuf, sizeof(cmd))) return -EFAULT; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); @@ -1139,7 +1156,7 @@ static ssize_t ucma_disconnect(struct ucma_file *file, const char __user *inbuf, if (copy_from_user(&cmd, inbuf, sizeof(cmd))) return -EFAULT; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); @@ -1167,15 +1184,10 @@ static ssize_t ucma_init_qp_attr(struct ucma_file *file, if (cmd.qp_state > IB_QPS_ERR) return -EINVAL; - ctx = ucma_get_ctx(file, cmd.id); + ctx = ucma_get_ctx_dev(file, cmd.id); if (IS_ERR(ctx)) return PTR_ERR(ctx); - if (!ctx->cm_id->device) { - ret = -EINVAL; - goto out; - } - resp.qp_attr_mask = 0; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = cmd.qp_state; @@ -1381,7 +1393,7 @@ static ssize_t ucma_process_join(struct ucma_file *file, else return -EINVAL; - ctx = ucma_get_ctx(file, cmd->id); + ctx = ucma_get_ctx_dev(file, cmd->id); if (IS_ERR(ctx)) return PTR_ERR(ctx);