]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
LoongArch: Check return values for set_memory_{rw,rox}
authorTiezhu Yang <yangtiezhu@loongson.cn>
Mon, 16 Mar 2026 02:36:01 +0000 (10:36 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 16 Mar 2026 02:36:01 +0000 (10:36 +0800)
set_memory_rw() and set_memory_rox() may fail, so we should check the
return values and return immediately in larch_insn_text_copy().

Cc: stable@vger.kernel.org
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kernel/inst.c

index 25fdb933119d0531e4a84b505d264e8f611b2f56..6c4ce6892276834aa90a98bc94a28a727166fe86 100644 (file)
@@ -258,6 +258,7 @@ static int text_copy_cb(void *data)
 int larch_insn_text_copy(void *dst, void *src, size_t len)
 {
        int ret = 0;
+       int err = 0;
        size_t start, end;
        struct insn_copy copy = {
                .dst = dst,
@@ -275,9 +276,19 @@ int larch_insn_text_copy(void *dst, void *src, size_t len)
        start = round_down((size_t)dst, PAGE_SIZE);
        end   = round_up((size_t)dst + len, PAGE_SIZE);
 
-       set_memory_rw(start, (end - start) / PAGE_SIZE);
+       err = set_memory_rw(start, (end - start) / PAGE_SIZE);
+       if (err) {
+               pr_info("%s: set_memory_rw() failed\n", __func__);
+               return err;
+       }
+
        ret = stop_machine_cpuslocked(text_copy_cb, &copy, cpu_online_mask);
-       set_memory_rox(start, (end - start) / PAGE_SIZE);
+
+       err = set_memory_rox(start, (end - start) / PAGE_SIZE);
+       if (err) {
+               pr_info("%s: set_memory_rox() failed\n", __func__);
+               return err;
+       }
 
        return ret;
 }