]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
memstick: Add timeout to prevent indefinite waiting
authorJiayi Li <lijiayi@kylinos.cn>
Mon, 4 Aug 2025 02:48:25 +0000 (10:48 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 19 Aug 2025 12:34:15 +0000 (14:34 +0200)
Add timeout handling to wait_for_completion calls in memstick_set_rw_addr()
and memstick_alloc_card() to prevent indefinite blocking in case of
hardware or communication failures.

Signed-off-by: Jiayi Li <lijiayi@kylinos.cn>
Link: https://lore.kernel.org/r/20250804024825.1565078-1-lijiayi@kylinos.cn
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/memstick/core/memstick.c

index 7f3f47db4c98a5310dacce682299759aa3b44fce..ee7a5c7ba1c520af415b440ba24ad1a94701beda 100644 (file)
@@ -370,7 +370,9 @@ int memstick_set_rw_addr(struct memstick_dev *card)
 {
        card->next_request = h_memstick_set_rw_addr;
        memstick_new_req(card->host);
-       wait_for_completion(&card->mrq_complete);
+       if (!wait_for_completion_timeout(&card->mrq_complete,
+                       msecs_to_jiffies(500)))
+               card->current_mrq.error = -ETIMEDOUT;
 
        return card->current_mrq.error;
 }
@@ -404,7 +406,9 @@ static struct memstick_dev *memstick_alloc_card(struct memstick_host *host)
 
                card->next_request = h_memstick_read_dev_id;
                memstick_new_req(host);
-               wait_for_completion(&card->mrq_complete);
+               if (!wait_for_completion_timeout(&card->mrq_complete,
+                               msecs_to_jiffies(500)))
+                       card->current_mrq.error = -ETIMEDOUT;
 
                if (card->current_mrq.error)
                        goto err_out;