From patchwork Mon Apr 14 08:26:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Patchwork-Id: 14049911 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D811C2036E8; Mon, 14 Apr 2025 08:26:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744619198; cv=none; b=e7BNeXNY8AVkyTIerGa7Ehlov7MAAisIsdQCPmohZ5Z7SLjgAAAbNPP67nLHaSyxgWKBXFsG++ZD0Rx8aN0RY/jesW8NZRDwLE911qtF1mDpYquhXJHnNDMiadeH4jU2mx7UxPO2MksAOfvAJgl7/z6xB4rKYLxYOJg8hfMVAT0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744619198; c=relaxed/simple; bh=+v9O42/jKIW7CTIjv9DwE8PnTyR58tTR0EOo533umeg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S720tzPekkT+UeidTSlyXYo+rJeA6OGzTa++pv37CjJfF/NGvWDqj2RZ4DU5ajQJjqSRwNV1gDvtgviudJXTRFC5xtFBKE5dXKLpx0ONZndsFsvQTEJE5Ge4FdvFz8tg6dfWdSSEUWnf8Mngm1LqS5xHNTJlqfRDjtqbNA9lLi4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=41OAV4c5; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=N/H68LJo; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="41OAV4c5"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="N/H68LJo" From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1744619195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8WJSvov+Yo8g8l96RelJpS4hHhCjdzXvb7xveVYD2cY=; b=41OAV4c5Q7sgdEGtW8e+vUGsF7S4XfbuiBFGepFO7v5mxp/zOjc11q7eJnUGoE6mAlB/5o mFKleEhnfrSS6VEzehSuEhwzkY23unqT25QV0MruLjcdt8qn/6ZJuaoPQNNYgpONf+QawV PWAd5mDKSuVzRo7IPiIQPj1AmW+6fZCm3gEawD7T45E5RdSs7zEYg1FKF0+zxmWnz+1iP9 TK/XyeYI8EL+z7JcYbp5n2/CWIoC+cKGsGvwA6mqu1DE9kDikXBb625bMIZIFloA75bWqy qLafwHrDP7K4cChk/t1YsEsBNrwLzF+85QxsYEhpfygUYN7QbZjqKE+nKkTDfg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1744619195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8WJSvov+Yo8g8l96RelJpS4hHhCjdzXvb7xveVYD2cY=; b=N/H68LJoqZ1KJ2TtIgG6NYO8Zw94RzBA/fzRWZo+BsfUtvie7oiLPYwO79jNmxD7ge3ANm bWl7mIoOHiHzQ4BQ== Date: Mon, 14 Apr 2025 10:26:21 +0200 Subject: [PATCH v2 1/2] MIPS: Don't crash in stack_top() for tasks without ABI or vDSO Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250414-kunit-mips-v2-1-4cf01e1a29e6@linutronix.de> References: <20250414-kunit-mips-v2-0-4cf01e1a29e6@linutronix.de> In-Reply-To: <20250414-kunit-mips-v2-0-4cf01e1a29e6@linutronix.de> To: Thomas Bogendoerfer , Brendan Higgins , David Gow , Rae Moar Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, =?utf-8?q?Tho?= =?utf-8?q?mas_Wei=C3=9Fschuh?= X-Developer-Signature: v=1; a=ed25519-sha256; t=1744619194; l=1484; i=thomas.weissschuh@linutronix.de; s=20240209; h=from:subject:message-id; bh=+v9O42/jKIW7CTIjv9DwE8PnTyR58tTR0EOo533umeg=; b=DKi1waXZObrUy4j8gK6IvY17CZA6OAWQNI+q6wdd7F5IU8FzJnEfHf8i0h3p9Ra6BnX/AspHt Tbf0D+GVakXBDqwzehcmtPUCUISUtM0OULDa1yfIyHqxGCYpBtTQ96Y X-Developer-Key: i=thomas.weissschuh@linutronix.de; a=ed25519; pk=pfvxvpFUDJV2h2nY0FidLUml22uGLSjByFbM6aqQQws= Not all tasks have an ABI associated or 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: mips_stack_top+0x28/0xc0 arch_pick_mmap_layout+0x190/0x220 kunit_vm_mmap_init+0xf8/0x138 __kunit_add_resource+0x40/0xa8 kunit_vm_mmap+0x88/0xd8 usercopy_test_init+0xb8/0x240 kunit_try_run_case+0x5c/0x1a8 kunit_generic_run_threadfn_adapter+0x28/0x50 kthread+0x118/0x240 ret_from_kernel_thread+0x14/0x1c Signed-off-by: Thomas Weißschuh --- arch/mips/kernel/process.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index b630604c577f9ff3f2493b0f254363e499c8318c..66343cb6c1737c4217ddd8a2c3ca244fac0ef8a5 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -690,9 +690,11 @@ unsigned long mips_stack_top(void) } /* Space for the VDSO, data page & GIC user page */ - top -= PAGE_ALIGN(current->thread.abi->vdso->size); - top -= PAGE_SIZE; - top -= mips_gic_present() ? PAGE_SIZE : 0; + if (current->thread.abi) { + top -= PAGE_ALIGN(current->thread.abi->vdso->size); + top -= PAGE_SIZE; + top -= mips_gic_present() ? PAGE_SIZE : 0; + } /* Space for cache colour alignment */ if (cpu_has_dc_aliases) From patchwork Mon Apr 14 08:26:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Patchwork-Id: 14049912 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D6B2481C4; Mon, 14 Apr 2025 08:26:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744619199; cv=none; b=YP+KgXkVVkUWlrXLTf0oSFygcN27OqKx+PwFWjWe7sHXDd1u9MlKJydiqQmd3XNun9rQAktDzVeTbTAQeDETMAHOfBYjaCcCc7L9IKNwdJtQDubeVRzmPqNfxF58PWq+wHVIVazS2+L2Lh+C5irHAP8JBOaxjEwVpbmMK7LZ1wY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744619199; c=relaxed/simple; bh=xOZ0p2CUeWSfBf8GwfXNZH/GcKScQzSTLiG6gz0ey8E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HNNGKy1WsruqaUYW5/hvqVZe2dAaxxL0nM9+HHJfNBDL8M4UnOu0+ec7ERBCSmsVO5QPL28PlKp1Q7siTi13ErAL+wyCglVnnZVRVk/PuZJEg13AId+4ZKOmPYy/uAkxz9IxuaeOMEZyFNdt4Eg8Dg3vQaQ7Z2H29gRuXcn2hoU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=jWCHeLnK; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=mCYor8kj; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="jWCHeLnK"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="mCYor8kj" From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1744619195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0o60EM5//gG+xcS+6Ra9+Xd3X2itCl9vIft8DhAGysU=; b=jWCHeLnKsc7ZPbXMDBEd1b1eFTZqJeSgE+FM0le2TSfm/ZoARKzq6xC9O/agFCEtsG1JE3 +nxlh5ICekYgTqpHvksOCrlUPaYO1Ca7eER0MN+XwB1wdzBWOMoff1DMovwAk1LhqTStq/ LeubQ355UjZ5ChxYFTcF+jSYYLy1IZpZ+k683SOvQBSOrmixTlSInm/CjeL/2ldA2QxE4p ov0jtI+oyNINUd+dUTb0Ag53WF+f2/MgJnAJ9LNlYIiOHwpt+EX815p1HbIRSYcJ52n0dG qCJKLBWWJ6TZ9fzOxtgnbOEhQJQuqqHbplxibWLcKD/PHvvJoyaP1JttcL1cSA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1744619195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0o60EM5//gG+xcS+6Ra9+Xd3X2itCl9vIft8DhAGysU=; b=mCYor8kj3Se8cUDCYI6eccCyxZdqPnaImx1hv6QSXF5POsdF6owsu+MGuIAt0SyUVRuxH8 p5LxAxF7QrQZlXCg== Date: Mon, 14 Apr 2025 10:26:22 +0200 Subject: [PATCH v2 2/2] kunit: qemu_configs: Add MIPS configurations Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250414-kunit-mips-v2-2-4cf01e1a29e6@linutronix.de> References: <20250414-kunit-mips-v2-0-4cf01e1a29e6@linutronix.de> In-Reply-To: <20250414-kunit-mips-v2-0-4cf01e1a29e6@linutronix.de> To: Thomas Bogendoerfer , Brendan Higgins , David Gow , Rae Moar Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, =?utf-8?q?Tho?= =?utf-8?q?mas_Wei=C3=9Fschuh?= X-Developer-Signature: v=1; a=ed25519-sha256; t=1744619194; l=4132; i=thomas.weissschuh@linutronix.de; s=20240209; h=from:subject:message-id; bh=xOZ0p2CUeWSfBf8GwfXNZH/GcKScQzSTLiG6gz0ey8E=; b=6MArL1Pme5j96Z3PT+Uc3FqhKPvqPD+N5kRKQ+BHejj8arkJBTTECOYhiq1oUX6BoKYse0Rjv L/A5YqCRTvRAum88ylOMmONCUeK6WpH0m+Fym0Ibe/WKRI5GwHya0QH X-Developer-Key: i=thomas.weissschuh@linutronix.de; a=ed25519; pk=pfvxvpFUDJV2h2nY0FidLUml22uGLSjByFbM6aqQQws= Add basic support to run various MIPS variants via kunit_tool using the virtualized malta platform. Signed-off-by: Thomas Weißschuh --- tools/testing/kunit/qemu_configs/mips.py | 18 ++++++++++++++++++ tools/testing/kunit/qemu_configs/mips64.py | 19 +++++++++++++++++++ tools/testing/kunit/qemu_configs/mips64el.py | 19 +++++++++++++++++++ tools/testing/kunit/qemu_configs/mipsel.py | 18 ++++++++++++++++++ 4 files changed, 74 insertions(+) diff --git a/tools/testing/kunit/qemu_configs/mips.py b/tools/testing/kunit/qemu_configs/mips.py new file mode 100644 index 0000000000000000000000000000000000000000..8899ac157b30bd2ee847eacd5b90fe6ad4e5fb04 --- /dev/null +++ b/tools/testing/kunit/qemu_configs/mips.py @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0 + +from ..qemu_config import QemuArchParams + +QEMU_ARCH = QemuArchParams(linux_arch='mips', + kconfig=''' +CONFIG_32BIT=y +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_MIPS_MALTA=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y +''', + qemu_arch='mips', + kernel_path='vmlinuz', + kernel_command_line='console=ttyS0', + extra_qemu_params=['-M', 'malta']) diff --git a/tools/testing/kunit/qemu_configs/mips64.py b/tools/testing/kunit/qemu_configs/mips64.py new file mode 100644 index 0000000000000000000000000000000000000000..1478aed05b94da4914f34c6a8affdcfe34eb88ea --- /dev/null +++ b/tools/testing/kunit/qemu_configs/mips64.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0 + +from ..qemu_config import QemuArchParams + +QEMU_ARCH = QemuArchParams(linux_arch='mips', + kconfig=''' +CONFIG_CPU_MIPS64_R2=y +CONFIG_64BIT=y +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_MIPS_MALTA=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y +''', + qemu_arch='mips64', + kernel_path='vmlinuz', + kernel_command_line='console=ttyS0', + extra_qemu_params=['-M', 'malta', '-cpu', '5KEc']) diff --git a/tools/testing/kunit/qemu_configs/mips64el.py b/tools/testing/kunit/qemu_configs/mips64el.py new file mode 100644 index 0000000000000000000000000000000000000000..300c711d7a82500b2ebcb4cf1467b6f72b5c17aa --- /dev/null +++ b/tools/testing/kunit/qemu_configs/mips64el.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0 + +from ..qemu_config import QemuArchParams + +QEMU_ARCH = QemuArchParams(linux_arch='mips', + kconfig=''' +CONFIG_CPU_MIPS64_R2=y +CONFIG_64BIT=y +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_MIPS_MALTA=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y +''', + qemu_arch='mips64el', + kernel_path='vmlinuz', + kernel_command_line='console=ttyS0', + extra_qemu_params=['-M', 'malta', '-cpu', '5KEc']) diff --git a/tools/testing/kunit/qemu_configs/mipsel.py b/tools/testing/kunit/qemu_configs/mipsel.py new file mode 100644 index 0000000000000000000000000000000000000000..3d3543315b45776d0e77fb5c00c8c0a89eafdffd --- /dev/null +++ b/tools/testing/kunit/qemu_configs/mipsel.py @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0 + +from ..qemu_config import QemuArchParams + +QEMU_ARCH = QemuArchParams(linux_arch='mips', + kconfig=''' +CONFIG_32BIT=y +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_MIPS_MALTA=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_SYSCON=y +''', + qemu_arch='mipsel', + kernel_path='vmlinuz', + kernel_command_line='console=ttyS0', + extra_qemu_params=['-M', 'malta'])