Thread (24 messages) 24 messages, 5 authors, 2022-01-14

Re: [PATCH 1/3] powerpc: Properly return error code from do_patch_instruction()

From: Christophe Leroy <hidden>
Date: 2022-01-14 16:19:51


Le 23/04/2020 à 17:09, Naveen N. Rao a écrit :
With STRICT_KERNEL_RWX, we are currently ignoring return value from
__patch_instruction() in do_patch_instruction(), resulting in the error
not being propagated back. Fix the same.

Fixes: 37bc3e5fd764f ("powerpc/lib/code-patching: Use alternate map for patch_instruction()")
Signed-off-by: Naveen N. Rao <redacted>
A similar patch was merged as 
https://github.com/linuxppc/linux/commit/a3483c3dd18c136785a31406fe27210649fc4fba#diff-e084bb6dc223aec74e7fc4208b7b260acc571bd5b50c9b709ec3de175cb1a979

Christophe

quoted hunk ↗ jump to hunk
---
  arch/powerpc/lib/code-patching.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
index 3345f039a876..5c713a6c0bd8 100644
--- a/arch/powerpc/lib/code-patching.c
+++ b/arch/powerpc/lib/code-patching.c
@@ -138,7 +138,7 @@ static inline int unmap_patch_area(unsigned long addr)
  
  static int do_patch_instruction(unsigned int *addr, unsigned int instr)
  {
-	int err;
+	int err, rc = 0;
  	unsigned int *patch_addr = NULL;
  	unsigned long flags;
  	unsigned long text_poke_addr;
@@ -163,7 +163,7 @@ static int do_patch_instruction(unsigned int *addr, unsigned int instr)
  	patch_addr = (unsigned int *)(text_poke_addr) +
  			((kaddr & ~PAGE_MASK) / sizeof(unsigned int));
  
-	__patch_instruction(addr, instr, patch_addr);
+	rc = __patch_instruction(addr, instr, patch_addr);
  
  	err = unmap_patch_area(text_poke_addr);
  	if (err)
@@ -172,7 +172,7 @@ static int do_patch_instruction(unsigned int *addr, unsigned int instr)
  out:
  	local_irq_restore(flags);
  
-	return err;
+	return rc ? rc : err;
  }
  #else /* !CONFIG_STRICT_KERNEL_RWX */
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help