Oliver Neukum 59b3b0
From 64f4a62e3b17f1e473f971127c2924cae42afc82 Mon Sep 17 00:00:00 2001
Oliver Neukum 59b3b0
From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
Oliver Neukum 59b3b0
Date: Tue, 11 Aug 2020 18:00:24 +0530
Oliver Neukum 59b3b0
Subject: [PATCH] crypto: picoxcell - Fix potential race condition bug
Oliver Neukum 59b3b0
Git-commit: 64f4a62e3b17f1e473f971127c2924cae42afc82
Oliver Neukum 59b3b0
References: git-fixes
Oliver Neukum 59b3b0
Patch-mainline: v5.10-rc1
Oliver Neukum 59b3b0
Oliver Neukum 59b3b0
engine->stat_irq_thresh was initialized after device_create_file() in
Oliver Neukum 59b3b0
the probe function, the initialization may race with call to
Oliver Neukum 59b3b0
spacc_stat_irq_thresh_store() which updates engine->stat_irq_thresh,
Oliver Neukum 59b3b0
therefore initialize it before creating the file in probe function.
Oliver Neukum 59b3b0
Oliver Neukum 59b3b0
Found by Linux Driver Verification project (linuxtesting.org).
Oliver Neukum 59b3b0
Oliver Neukum 59b3b0
Fixes: ce92136843cb ("crypto: picoxcell - add support for the...")
Oliver Neukum 59b3b0
Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
Oliver Neukum 59b3b0
Acked-by: Jamie Iles <jamie@jamieiles.com>
Oliver Neukum 59b3b0
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Oliver Neukum 59b3b0
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum 59b3b0
---
Oliver Neukum 59b3b0
 drivers/crypto/picoxcell_crypto.c |    9 ++++-----
Oliver Neukum 59b3b0
 1 file changed, 4 insertions(+), 5 deletions(-)
Oliver Neukum 59b3b0
Oliver Neukum 59b3b0
--- a/drivers/crypto/picoxcell_crypto.c
Oliver Neukum 59b3b0
+++ b/drivers/crypto/picoxcell_crypto.c
Oliver Neukum 59b3b0
@@ -1701,11 +1701,6 @@ static int spacc_probe(struct platform_d
Oliver Neukum 59b3b0
 		goto err_clk_put;
Oliver Neukum 59b3b0
 	}
Oliver Neukum 59b3b0
 
Oliver Neukum 59b3b0
-	ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh);
Oliver Neukum 59b3b0
-	if (ret)
Oliver Neukum 59b3b0
-		goto err_clk_disable;
Oliver Neukum 59b3b0
-
Oliver Neukum 59b3b0
-
Oliver Neukum 59b3b0
 	/*
Oliver Neukum 59b3b0
 	 * Use an IRQ threshold of 50% as a default. This seems to be a
Oliver Neukum 59b3b0
 	 * reasonable trade off of latency against throughput but can be
Oliver Neukum 59b3b0
@@ -1713,6 +1708,10 @@ static int spacc_probe(struct platform_d
Oliver Neukum 59b3b0
 	 */
Oliver Neukum 59b3b0
 	engine->stat_irq_thresh = (engine->fifo_sz / 2);
Oliver Neukum 59b3b0
 
Oliver Neukum 59b3b0
+	ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh);
Oliver Neukum 59b3b0
+	if (ret)
Oliver Neukum 59b3b0
+		goto err_clk_disable;
Oliver Neukum 59b3b0
+
Oliver Neukum 59b3b0
 	/*
Oliver Neukum 59b3b0
 	 * Configure the interrupts. We only use the STAT_CNT interrupt as we
Oliver Neukum 59b3b0
 	 * only submit a new packet for processing when we complete another in