[PATCH v2] accel/habanalabs: fix kref underflow in hl_cs_signal_sob_wraparound_handler
From: WenTao Liang
Date: Sun Jun 28 2026 - 07:30:41 EST
When other_sob->need_reset is true and encaps_sig is false,
hw_sob_put(other_sob) decrements the kref to 0, but the matching
hw_sob_get(other_sob) is skipped because it is inside the encaps_sig
block. The function returns other_sob with kref=0, causing a subsequent
kref_put to underflow. Fix by adding hw_sob_get(other_sob) in the else
branch.
Suggested-by: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>
Fixes: dadf17abb724 ("habanalabs: add support for encapsulated signals reservation")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: WenTao Liang <vulab@xxxxxxxxxxx>
---
Changes in v2:
- Correct Fixes hash based on reviewer feedback
---
---
drivers/accel/habanalabs/common/command_submission.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/accel/habanalabs/common/command_submission.c b/drivers/accel/habanalabs/common/command_submission.c
index ba4257bda77b..675301dfc0ef 100644
--- a/drivers/accel/habanalabs/common/command_submission.c
+++ b/drivers/accel/habanalabs/common/command_submission.c
@@ -1860,11 +1860,10 @@ int hl_cs_signal_sob_wraparound_handler(struct hl_device *hdev, u32 q_idx,
if (other_sob->need_reset)
hw_sob_put(other_sob);
- if (encaps_sig) {
+ if (encaps_sig)
/* set reset indication for the sob */
sob->need_reset = true;
- hw_sob_get(other_sob);
- }
+ hw_sob_get(other_sob);
dev_dbg(hdev->dev, "switched to SOB %d, q_idx: %d\n",
prop->curr_sob_offset, q_idx);
--
2.39.5 (Apple Git-154)