media: cec: cec-adap: always cancel work in cec_transmit_msg_fh
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Fri, 23 Feb 2024 12:24:38 +0000 (12:24 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Thu, 2 May 2024 17:57:24 +0000 (18:57 +0100)
Do not check for !data->completed, just always call
cancel_delayed_work_sync(). This fixes a small race condition.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Reported-by: Yang, Chenyuan <cy54@illinois.edu>
Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/
Fixes: 490d84f6d73c ("media: cec: forgot to cancel delayed work")
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/cec/core/cec-adap.c

index 559a172ebc6cbbffaea3abbd5981113c63d6daf6..6fc7de744ee9acf66b804989f4834a6693aab396 100644 (file)
@@ -936,8 +936,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
         */
        mutex_unlock(&adap->lock);
        wait_for_completion_killable(&data->c);
-       if (!data->completed)
-               cancel_delayed_work_sync(&data->work);
+       cancel_delayed_work_sync(&data->work);
        mutex_lock(&adap->lock);
 
        /* Cancel the transmit if it was interrupted */