aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMirsad Goran Todorovac <[email protected]>2023-05-09 10:47:47 +0200
committerGreg Kroah-Hartman <[email protected]>2023-05-31 20:31:07 +0100
commitbe37bed754ed90b2655382f93f9724b3c1aae847 (patch)
tree316a11e5a502c2863116e08cb78a7aea09b47837
parent4acfe3dfde685a5a9eaec5555351918e2d7266a1 (diff)
test_firmware: fix a memory leak with reqs buffer
Dan Carpenter spotted that test_fw_config->reqs will be leaked if trigger_batched_requests_store() is called two or more times. The same appears with trigger_batched_requests_async_store(). This bug wasn't trigger by the tests, but observed by Dan's visual inspection of the code. The recommended workaround was to return -EBUSY if test_fw_config->reqs is already allocated. Fixes: 7feebfa487b92 ("test_firmware: add support for request_firmware_into_buf") Cc: Luis Chamberlain <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Russ Weight <[email protected]> Cc: Tianfei Zhang <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Colin Ian King <[email protected]> Cc: Randy Dunlap <[email protected]> Cc: [email protected] Cc: [email protected] # v5.4 Suggested-by: Dan Carpenter <[email protected]> Suggested-by: Takashi Iwai <[email protected]> Signed-off-by: Mirsad Goran Todorovac <[email protected]> Reviewed-by: Dan Carpenter <[email protected]> Acked-by: Luis Chamberlain <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
-rw-r--r--lib/test_firmware.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/test_firmware.c b/lib/test_firmware.c
index 35417e0af3f4..91b232ed3161 100644
--- a/lib/test_firmware.c
+++ b/lib/test_firmware.c
@@ -913,6 +913,11 @@ static ssize_t trigger_batched_requests_store(struct device *dev,
mutex_lock(&test_fw_mutex);
+ if (test_fw_config->reqs) {
+ rc = -EBUSY;
+ goto out_bail;
+ }
+
test_fw_config->reqs =
vzalloc(array3_size(sizeof(struct test_batched_req),
test_fw_config->num_requests, 2));
@@ -1011,6 +1016,11 @@ ssize_t trigger_batched_requests_async_store(struct device *dev,
mutex_lock(&test_fw_mutex);
+ if (test_fw_config->reqs) {
+ rc = -EBUSY;
+ goto out_bail;
+ }
+
test_fw_config->reqs =
vzalloc(array3_size(sizeof(struct test_batched_req),
test_fw_config->num_requests, 2));