Patch "LoongArch: Don't crash in stack_top() for tasks without vDSO" has been added to the 6.1-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

    LoongArch: Don't crash in stack_top() for tasks without vDSO

to the 6.1-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:
     loongarch-don-t-crash-in-stack_top-for-tasks-without.patch
and it can be found in the queue-6.1 subdirectory.

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



commit b44ed01e4b5c6dc6297a7a0dde8e495ed8e9e878
Author: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
Date:   Mon Oct 21 22:11:19 2024 +0800

    LoongArch: Don't crash in stack_top() for tasks without vDSO
    
    [ Upstream commit 134475a9ab8487527238d270639a8cb74c10aab2 ]
    
    Not all tasks have a vDSO mapped, for example kthreads never do. If such
    a task ever ends up calling stack_top(), it will derefence the NULL vdso
    pointer and crash.
    
    This can for example happen when using kunit:
    
            [<9000000000203874>] stack_top+0x58/0xa8
            [<90000000002956cc>] arch_pick_mmap_layout+0x164/0x220
            [<90000000003c284c>] kunit_vm_mmap_init+0x108/0x12c
            [<90000000003c1fbc>] __kunit_add_resource+0x38/0x8c
            [<90000000003c2704>] kunit_vm_mmap+0x88/0xc8
            [<9000000000410b14>] usercopy_test_init+0xbc/0x25c
            [<90000000003c1db4>] kunit_try_run_case+0x5c/0x184
            [<90000000003c3d54>] kunit_generic_run_threadfn_adapter+0x24/0x48
            [<900000000022e4bc>] kthread+0xc8/0xd4
            [<9000000000200ce8>] ret_from_kernel_thread+0xc/0xa4
    
    Fixes: 803b0fc5c3f2 ("LoongArch: Add process management")
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
    Signed-off-by: Huacai Chen <chenhuacai@xxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c
index 51176e5ecee59..4561bc81c0639 100644
--- a/arch/loongarch/kernel/process.c
+++ b/arch/loongarch/kernel/process.c
@@ -271,13 +271,15 @@ unsigned long stack_top(void)
 {
 	unsigned long top = TASK_SIZE & PAGE_MASK;
 
-	/* Space for the VDSO & data page */
-	top -= PAGE_ALIGN(current->thread.vdso->size);
-	top -= VVAR_SIZE;
-
-	/* Space to randomize the VDSO base */
-	if (current->flags & PF_RANDOMIZE)
-		top -= VDSO_RANDOMIZE_SIZE;
+	if (current->thread.vdso) {
+		/* Space for the VDSO & data page */
+		top -= PAGE_ALIGN(current->thread.vdso->size);
+		top -= VVAR_SIZE;
+
+		/* Space to randomize the VDSO base */
+		if (current->flags & PF_RANDOMIZE)
+			top -= VDSO_RANDOMIZE_SIZE;
+	}
 
 	return top;
 }




[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