From nobody Fri Dec 19 00:28:28 2025 Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC6B5168B9 for ; Fri, 15 Dec 2023 09:46:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ExFif04X" Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-2ca1e6a94a4so5087171fa.0 for ; Fri, 15 Dec 2023 01:46:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702633561; x=1703238361; darn=vger.kernel.org; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=+vdymqIL4YSsilHrh5VGy7v4a6vTjmyAqVMJ+Z7Xb7g=; b=ExFif04XfkY7+PhCciQNa2eXcGed6Azjj8RRPaW3e4PofkuXT6K0y9RzWEgLWfZVlv FpG2LG4/QAqq+eYR8kISW8GvpMKAZprzcfMLlBxZIkVph2ElLfn3zLfZ2SvKbWgwl4uq zpIPMLYiJO1NQNFR7WAdrMXJWm3+e24OV9XjCarsxgNMGbNK3fmMWDHjMakll5iCi610 lANNTyL2twK92tC/6QVjAmc2sm+Z1nrjN7BaV+k3/rSp7j/dxn43uJqWV5nxVxD++eyy cLtn9h1KGSwog/MkIPp/jmxDbgXQXVkwoDDGF0qRJ/gfv2f5EdSyhXzhUDQeGk6Z+2kE IKPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702633561; x=1703238361; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+vdymqIL4YSsilHrh5VGy7v4a6vTjmyAqVMJ+Z7Xb7g=; b=n1T4mVidrYUPRaaAl+dhvecuwGmEtuQ+tVij/J/h7L4dzIHPP+DTsfP8HIHbtai7Np f44lGbNaplNfxs3z/rHwgImitpg50/JYrREcjztvDUcrlt6QMu5uBm8IDnw9ob1wxjZ+ H8/de4y0RjvaaWP75UWDpjiHZnr/Ng2aHphLwPC/pGa4Z8MW2Z625qOLQB6u6rEP8oGA q+428lHww+pBDT0battX/zifSsz+ebL3Gd9iMk3baej675nm+0xalBoY+fcGHNSSLjxE nX5dqMwgxzln0P7+wjF7thiJ+xcfOUCdIIRa+Nv7XMUj0JoPRFFjTUHEVCQP+AU8o6gB E3/A== X-Gm-Message-State: AOJu0Ywe6E4dw3dvZH6GZ4ggYWXFn3q/m8RkQMXWSQMoS0cjEHd6xu6/ MqJRy9aK1hOcRZy/Df/5+Q== X-Google-Smtp-Source: AGHT+IEti98XeUjo9xrWivnsj6sBsN0Sy86+0txZRugPY3pH6ccQPL9GM9gmcRhXLkpnFA/yrs2mFw== X-Received: by 2002:a2e:bc8b:0:b0:2cc:1e99:7c18 with SMTP id h11-20020a2ebc8b000000b002cc1e997c18mr7130797ljf.62.1702633560572; Fri, 15 Dec 2023 01:46:00 -0800 (PST) Received: from p183 ([46.53.250.251]) by smtp.gmail.com with ESMTPSA id g6-20020a50d5c6000000b0054cc827e73dsm7915590edj.78.2023.12.15.01.45.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 01:45:59 -0800 (PST) Date: Fri, 15 Dec 2023 12:45:57 +0300 From: Alexey Dobriyan To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen Cc: linux-kernel@vger.kernel.org, "H. Peter Anvin" Subject: [PATCH] selftests/x86/mm: fixup nx_stack test stability with SA_ONSTACK Message-ID: <8299b17a-a730-46e5-a258-fac78ff0420b@p183> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" I forgot that using sigaltstack(2) requires opt-in with SA_ONSTACK. If userspace stack is NX, then the test continues to work and reports PASS. If there is kernel bug and some pages of userspace stack are executable, then test can be derailed because signal stack frame contents will pass as random instruction with unpredictable consequences. Signed-off-by: Alexey Dobriyan --- tools/testing/selftests/x86/nx_stack.c | 34 ++++++++++++++++------------= ----- 1 file changed, 17 insertions(+), 17 deletions(-) --- a/tools/testing/selftests/x86/nx_stack.c +++ b/tools/testing/selftests/x86/nx_stack.c @@ -160,10 +160,25 @@ static void sigtrap(int _, siginfo_t *__, void *uc_) =20 int main(void) { + { + /* + * We don't know now much stack SIGSEGV handler uses. + * Bump this by 1 page every time someone complains, + * or rewrite it in assembly. + */ + const size_t len =3D SIGSTKSZ; + void *p =3D mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYM= OUS, -1, 0); + assert(p !=3D MAP_FAILED); + stack_t ss =3D {}; + ss.ss_sp =3D p; + ss.ss_size =3D len; + int rv =3D sigaltstack(&ss, NULL); + assert(rv =3D=3D 0); + } { struct sigaction act =3D {}; sigemptyset(&act.sa_mask); - act.sa_flags =3D SA_SIGINFO; + act.sa_flags =3D SA_SIGINFO|SA_ONSTACK; act.sa_sigaction =3D &sigsegv; int rv =3D sigaction(SIGSEGV, &act, NULL); assert(rv =3D=3D 0); @@ -171,7 +186,7 @@ int main(void) { struct sigaction act =3D {}; sigemptyset(&act.sa_mask); - act.sa_flags =3D SA_SIGINFO; + act.sa_flags =3D SA_SIGINFO|SA_ONSTACK; act.sa_sigaction =3D &sigtrap; int rv =3D sigaction(SIGTRAP, &act, NULL); assert(rv =3D=3D 0); @@ -188,21 +203,6 @@ int main(void) rv =3D setrlimit(RLIMIT_STACK, &rlim); assert(rv =3D=3D 0); } - { - /* - * We don't know now much stack SIGSEGV handler uses. - * Bump this by 1 page every time someone complains, - * or rewrite it in assembly. - */ - const size_t len =3D SIGSTKSZ; - void *p =3D mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYM= OUS, -1, 0); - assert(p !=3D MAP_FAILED); - stack_t ss =3D {}; - ss.ss_sp =3D p; - ss.ss_size =3D len; - int rv =3D sigaltstack(&ss, NULL); - assert(rv =3D=3D 0); - } make_stack1(); /* * Unreachable, but if _this_ INT3 is ever reached, it's a bug somewhere.