Patch "accel/habanalabs: fix bug in timestamp interrupt handling" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    accel/habanalabs: fix bug in timestamp interrupt handling

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     accel-habanalabs-fix-bug-in-timestamp-interrupt-hand.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b3fcb94cc8c93be4ad31dbde998ca7b00947ff3e
Author: farah kassabri <fkassabri@xxxxxxxxx>
Date:   Thu Aug 24 15:45:21 2023 +0300

    accel/habanalabs: fix bug in timestamp interrupt handling
    
    [ Upstream commit 0165994c215f321e2d055368f89b424756e340eb ]
    
    There is a potential race between user thread seeking to re-use
    a timestamp record with new interrupt id, while this record is still
    in the middle of interrupt handling and it is about to be freed.
    Imagine the driver set the record in_use to 0 and only then fill the
    free_node information. This might lead to unpleasant scenario where
    the new registration thread detects the record as free to use, and
    change the cq buff address. That will cause the free_node to get
    the wrong buffer address to put refcount to.
    
    Signed-off-by: farah kassabri <fkassabri@xxxxxxxxx>
    Reviewed-by: Oded Gabbay <ogabbay@xxxxxxxxxx>
    Signed-off-by: Oded Gabbay <ogabbay@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/accel/habanalabs/common/irq.c b/drivers/accel/habanalabs/common/irq.c
index b1010d206c2ef..813315cea4a7b 100644
--- a/drivers/accel/habanalabs/common/irq.c
+++ b/drivers/accel/habanalabs/common/irq.c
@@ -271,6 +271,9 @@ static int handle_registration_node(struct hl_device *hdev, struct hl_user_pendi
 	free_node->cq_cb = pend->ts_reg_info.cq_cb;
 	list_add(&free_node->free_objects_node, *free_list);
 
+	/* Mark TS record as free */
+	pend->ts_reg_info.in_use = false;
+
 	return 0;
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux