Patch "habanalabs/gaudi: Fix a potential use after free in gaudi_memset_device_memory" has been added to the 5.12-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

    habanalabs/gaudi: Fix a potential use after free in gaudi_memset_device_memory

to the 5.12-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:
     habanalabs-gaudi-fix-a-potential-use-after-free-in-g.patch
and it can be found in the queue-5.12 subdirectory.

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



commit 78f96b4733e432f87b2e20c63da71118a10df7cd
Author: Lv Yunlong <lyl2019@xxxxxxxxxxxxxxxx>
Date:   Mon Apr 26 06:43:46 2021 -0700

    habanalabs/gaudi: Fix a potential use after free in gaudi_memset_device_memory
    
    [ Upstream commit 115726c5d312b462c9d9931ea42becdfa838a076 ]
    
    Our code analyzer reported a uaf.
    
    In gaudi_memset_device_memory, cb is get via hl_cb_kernel_create()
    with 2 refcount.
    If hl_cs_allocate_job() failed, the execution runs into release_cb
    branch. One ref of cb is dropped by hl_cb_put(cb) and could be freed
    if other thread also drops one ref. Then cb is used by cb->id later,
    which is a potential uaf.
    
    My patch add a variable 'id' to accept the value of cb->id before the
    hl_cb_put(cb) is called, to avoid the potential uaf.
    
    Fixes: 423815bf02e25 ("habanalabs/gaudi: remove PCI access to SM block")
    Signed-off-by: Lv Yunlong <lyl2019@xxxxxxxxxxxxxxxx>
    Reviewed-by: Oded Gabbay <ogabbay@xxxxxxxxxx>
    Signed-off-by: Oded Gabbay <ogabbay@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/misc/habanalabs/gaudi/gaudi.c b/drivers/misc/habanalabs/gaudi/gaudi.c
index 9152242778f5..ecdedd87f8cc 100644
--- a/drivers/misc/habanalabs/gaudi/gaudi.c
+++ b/drivers/misc/habanalabs/gaudi/gaudi.c
@@ -5546,6 +5546,7 @@ static int gaudi_memset_device_memory(struct hl_device *hdev, u64 addr,
 	struct hl_cs_job *job;
 	u32 cb_size, ctl, err_cause;
 	struct hl_cb *cb;
+	u64 id;
 	int rc;
 
 	cb = hl_cb_kernel_create(hdev, PAGE_SIZE, false);
@@ -5612,8 +5613,9 @@ static int gaudi_memset_device_memory(struct hl_device *hdev, u64 addr,
 	}
 
 release_cb:
+	id = cb->id;
 	hl_cb_put(cb);
-	hl_cb_destroy(hdev, &hdev->kernel_cb_mgr, cb->id << PAGE_SHIFT);
+	hl_cb_destroy(hdev, &hdev->kernel_cb_mgr, id << PAGE_SHIFT);
 
 	return rc;
 }



[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