Patch "x86/resctrl: Don't try to free nonexistent RMIDs" has been added to the 6.9-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

    x86/resctrl: Don't try to free nonexistent RMIDs

to the 6.9-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:
     x86-resctrl-don-t-try-to-free-nonexistent-rmids.patch
and it can be found in the queue-6.9 subdirectory.

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



commit 3e827a7b296e41b6a494636e396951b4111cb005
Author: Dave Martin <Dave.Martin@xxxxxxx>
Date:   Tue Jun 18 15:01:52 2024 +0100

    x86/resctrl: Don't try to free nonexistent RMIDs
    
    [ Upstream commit 739c9765793e5794578a64aab293c58607f1826a ]
    
    Commit
    
      6791e0ea3071 ("x86/resctrl: Access per-rmid structures by index")
    
    adds logic to map individual monitoring groups into a global index space used
    for tracking allocated RMIDs.
    
    Attempts to free the default RMID are ignored in free_rmid(), and this works
    fine on x86.
    
    With arm64 MPAM, there is a latent bug here however: on platforms with no
    monitors exposed through resctrl, each control group still gets a different
    monitoring group ID as seen by the hardware, since the CLOSID always forms part
    of the monitoring group ID.
    
    This means that when removing a control group, the code may try to free this
    group's default monitoring group RMID for real.  If there are no monitors
    however, the RMID tracking table rmid_ptrs[] would be a waste of memory and is
    never allocated, leading to a splat when free_rmid() tries to dereference the
    table.
    
    One option would be to treat RMID 0 as special for every CLOSID, but this would
    be ugly since bookkeeping still needs to be done for these monitoring group IDs
    when there are monitors present in the hardware.
    
    Instead, add a gating check of resctrl_arch_mon_capable() in free_rmid(), and
    just do nothing if the hardware doesn't have monitors.
    
    This fix mirrors the gating checks already present in
    mkdir_rdt_prepare_rmid_alloc() and elsewhere.
    
    No functional change on x86.
    
      [ bp: Massage commit message. ]
    
    Fixes: 6791e0ea3071 ("x86/resctrl: Access per-rmid structures by index")
    Signed-off-by: Dave Martin <Dave.Martin@xxxxxxx>
    Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx>
    Reviewed-by: Reinette Chatre <reinette.chatre@xxxxxxxxx>
    Tested-by: Reinette Chatre <reinette.chatre@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20240618140152.83154-1-Dave.Martin@xxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index c34a35ec0f031..2ce5f4913c820 100644
--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -508,7 +508,8 @@ void free_rmid(u32 closid, u32 rmid)
 	 * allows architectures that ignore the closid parameter to avoid an
 	 * unnecessary check.
 	 */
-	if (idx == resctrl_arch_rmid_idx_encode(RESCTRL_RESERVED_CLOSID,
+	if (!resctrl_arch_mon_capable() ||
+	    idx == resctrl_arch_rmid_idx_encode(RESCTRL_RESERVED_CLOSID,
 						RESCTRL_RESERVED_RMID))
 		return;
 




[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