Patch "riscv: Disable preemption when using patch_map()" has been added to the 6.8-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

    riscv: Disable preemption when using patch_map()

to the 6.8-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:
     riscv-disable-preemption-when-using-patch_map.patch
and it can be found in the queue-6.8 subdirectory.

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



commit 7a78af71a238df62314d0a6bd654b2a2c8c15152
Author: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
Date:   Tue Mar 26 21:30:17 2024 +0100

    riscv: Disable preemption when using patch_map()
    
    [ Upstream commit a370c2419e4680a27382d9231edcf739d5d74efc ]
    
    patch_map() uses fixmap mappings to circumvent the non-writability of
    the kernel text mapping.
    
    The __set_fixmap() function only flushes the current cpu tlb, it does
    not emit an IPI so we must make sure that while we use a fixmap mapping,
    the current task is not migrated on another cpu which could miss the
    newly introduced fixmap mapping.
    
    So in order to avoid any task migration, disable the preemption.
    
    Reported-by: Andrea Parri <andrea@xxxxxxxxxxxx>
    Closes: https://lore.kernel.org/all/ZcS+GAaM25LXsBOl@andrea/
    Reported-by: Andy Chiu <andy.chiu@xxxxxxxxxx>
    Closes: https://lore.kernel.org/linux-riscv/CABgGipUMz3Sffu-CkmeUB1dKVwVQ73+7=sgC45-m0AE9RCjOZg@xxxxxxxxxxxxxx/
    Fixes: cad539baa48f ("riscv: implement a memset like function for text")
    Fixes: 0ff7c3b33127 ("riscv: Use text_mutex instead of patch_lock")
    Co-developed-by: Andy Chiu <andy.chiu@xxxxxxxxxx>
    Signed-off-by: Andy Chiu <andy.chiu@xxxxxxxxxx>
    Signed-off-by: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
    Acked-by: Puranjay Mohan <puranjay12@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20240326203017.310422-3-alexghiti@xxxxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/kernel/patch.c b/arch/riscv/kernel/patch.c
index 37e87fdcf6a00..30e12b310cab7 100644
--- a/arch/riscv/kernel/patch.c
+++ b/arch/riscv/kernel/patch.c
@@ -80,6 +80,8 @@ static int __patch_insn_set(void *addr, u8 c, size_t len)
 	 */
 	lockdep_assert_held(&text_mutex);
 
+	preempt_disable();
+
 	if (across_pages)
 		patch_map(addr + PAGE_SIZE, FIX_TEXT_POKE1);
 
@@ -92,6 +94,8 @@ static int __patch_insn_set(void *addr, u8 c, size_t len)
 	if (across_pages)
 		patch_unmap(FIX_TEXT_POKE1);
 
+	preempt_enable();
+
 	return 0;
 }
 NOKPROBE_SYMBOL(__patch_insn_set);
@@ -122,6 +126,8 @@ static int __patch_insn_write(void *addr, const void *insn, size_t len)
 	if (!riscv_patch_in_stop_machine)
 		lockdep_assert_held(&text_mutex);
 
+	preempt_disable();
+
 	if (across_pages)
 		patch_map(addr + PAGE_SIZE, FIX_TEXT_POKE1);
 
@@ -134,6 +140,8 @@ static int __patch_insn_write(void *addr, const void *insn, size_t len)
 	if (across_pages)
 		patch_unmap(FIX_TEXT_POKE1);
 
+	preempt_enable();
+
 	return ret;
 }
 NOKPROBE_SYMBOL(__patch_insn_write);




[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