Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp1060411pxb; Wed, 6 Apr 2022 07:49:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwwblHs+QrTjavJ42/Nyg1w8V/nvGPBqIOyFtMwN8ZX00oLPRUrzTOoUVocRaK8zsaJcTL4 X-Received: by 2002:a05:6a00:1acb:b0:4fb:358f:fe87 with SMTP id f11-20020a056a001acb00b004fb358ffe87mr9290012pfv.75.1649256559987; Wed, 06 Apr 2022 07:49:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649256559; cv=none; d=google.com; s=arc-20160816; b=dbvCrs79pDgWBo82PIvpWPR22PDojKKUudCFKMQy0mEFNLeO4IrlyVPbiQ4y2nnu7+ eBr+CvabvW0sgPyKSwowkqdZIqRUYm+5mrPZgFLFV7iCznTfNOvj1oegzrVhEfEQmkYh TJykRj0EVBkubSn1Ys8IlXI4fRYc7Amg7duNscpwhZCO2yDmRMmTbOCbXzR2f0D8HQmx VRxwwQaTMIK6kuZqI2koDhUoiO5NN8ZZ1jSg4sMTkfB7Tc2wKo66qUJDMl+Oh0cBA5lJ yh5UVXHYmqBR6ZensWC0GIAQMnc/H14wQYgtetP6DhM+7GXCILgJiJ/V1gKMBmO6vy+D woOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=YX2yfE8QHypzEkrw7uux1SPNpJd9aBEGNh7wGgv1dI4=; b=ccdsLeYb7DobZJOu3i4lWT4SIUWfWl6/iH9tKQwHbUCxhrG628Y2e4vpisINURRj2D E0Dt/8511RL415afNcUgSIP5ccrtIj9GI2F4Dzak6gbSXoXRWrUNd86iSozVnGiLIyvE PWAimIxSkEcCctq3t0MW4ObOoA0pMF68OLKoBbJWCeGAdFZ5I6sD25n4LMQD7COUgfzX HHOd/B0JHCcmStExIijjEzB6gedFtOoJrmoKB+ppJ9lUOe6MG0xzCEK+PIp0ItnxCMWM nbvN/lzepgWLJ76ifWZ71RZm6NO0ytnLew3+XjAd3RQ6jzkzU0EIK3bqDyPMZm0heAj1 1DJA== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id cn3-20020a056a00340300b004fe52f14401si1616641pfb.372.2022.04.06.07.49.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 07:49:19 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 38D19688EEE; Wed, 6 Apr 2022 05:39:34 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234915AbiDFLZ0 (ORCPT + 99 others); Wed, 6 Apr 2022 07:25:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237092AbiDFLYq (ORCPT ); Wed, 6 Apr 2022 07:24:46 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 88060B6461; Wed, 6 Apr 2022 01:12:03 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4403F23A; Wed, 6 Apr 2022 01:12:03 -0700 (PDT) Received: from e122247.kfn.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 068C43F718; Wed, 6 Apr 2022 01:12:00 -0700 (PDT) From: Gilad Ben-Yossef To: Gilad Ben-Yossef , Herbert Xu , "David S. Miller" Cc: Cristian Marussi , Dung Nguyen , Jing Dan , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] crypto: ccree: rearrange init calls to avoid race Date: Wed, 6 Apr 2022 11:11:38 +0300 Message-Id: <20220406081139.1963615-2-gilad@benyossef.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220406081139.1963615-1-gilad@benyossef.com> References: <20220406081139.1963615-1-gilad@benyossef.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rearrange init calls to avoid the rare race condition of the cipher algs being registered and used while we still init the hash code which uses the HW without proper lock. Signed-off-by: Gilad Ben-Yossef Reported-by: Dung Nguyen Tested-by: Jing Dan Tested-by: Dung Nguyen Fixes: 63893811b0fc("crypto: ccree - add ahash support") --- drivers/crypto/ccree/cc_driver.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/ccree/cc_driver.c b/drivers/crypto/ccree/cc_driver.c index 790fa9058a36..7d1bee86d581 100644 --- a/drivers/crypto/ccree/cc_driver.c +++ b/drivers/crypto/ccree/cc_driver.c @@ -529,24 +529,26 @@ static int init_cc_resources(struct platform_device *plat_dev) goto post_req_mgr_err; } - /* Allocate crypto algs */ - rc = cc_cipher_alloc(new_drvdata); + /* hash must be allocated first due to use of send_request_init() + * and dependency of AEAD on it + */ + rc = cc_hash_alloc(new_drvdata); if (rc) { - dev_err(dev, "cc_cipher_alloc failed\n"); + dev_err(dev, "cc_hash_alloc failed\n"); goto post_buf_mgr_err; } - /* hash must be allocated before aead since hash exports APIs */ - rc = cc_hash_alloc(new_drvdata); + /* Allocate crypto algs */ + rc = cc_cipher_alloc(new_drvdata); if (rc) { - dev_err(dev, "cc_hash_alloc failed\n"); - goto post_cipher_err; + dev_err(dev, "cc_cipher_alloc failed\n"); + goto post_hash_err; } rc = cc_aead_alloc(new_drvdata); if (rc) { dev_err(dev, "cc_aead_alloc failed\n"); - goto post_hash_err; + goto post_cipher_err; } /* If we got here and FIPS mode is enabled @@ -558,10 +560,10 @@ static int init_cc_resources(struct platform_device *plat_dev) pm_runtime_put(dev); return 0; -post_hash_err: - cc_hash_free(new_drvdata); post_cipher_err: cc_cipher_free(new_drvdata); +post_hash_err: + cc_hash_free(new_drvdata); post_buf_mgr_err: cc_buffer_mgr_fini(new_drvdata); post_req_mgr_err: @@ -593,8 +595,8 @@ static void cleanup_cc_resources(struct platform_device *plat_dev) (struct cc_drvdata *)platform_get_drvdata(plat_dev); cc_aead_free(drvdata); - cc_hash_free(drvdata); cc_cipher_free(drvdata); + cc_hash_free(drvdata); cc_buffer_mgr_fini(drvdata); cc_req_mgr_fini(drvdata); cc_fips_fini(drvdata); -- 2.25.1