From nobody Sat May 4 03:13:37 2024 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=yandex.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1643224926604690.507922392521; Wed, 26 Jan 2022 11:22:06 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244429AbiAZTWE (ORCPT ); Wed, 26 Jan 2022 14:22:04 -0500 Received: from forward102j.mail.yandex.net ([5.45.198.243]:60028 "EHLO forward102j.mail.yandex.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231542AbiAZTWD (ORCPT ); Wed, 26 Jan 2022 14:22:03 -0500 Received: from sas1-299d7dae1406.qloud-c.yandex.net (sas1-299d7dae1406.qloud-c.yandex.net [IPv6:2a02:6b8:c14:399e:0:640:299d:7dae]) by forward102j.mail.yandex.net (Yandex) with ESMTP id E2E394BE5E1D; Wed, 26 Jan 2022 22:15:06 +0300 (MSK) Received: from sas1-1f4a002bb12a.qloud-c.yandex.net (sas1-1f4a002bb12a.qloud-c.yandex.net [2a02:6b8:c14:3908:0:640:1f4a:2b]) by sas1-299d7dae1406.qloud-c.yandex.net (mxback/Yandex) with ESMTP id MRAHHasq3z-F6cmkliU; Wed, 26 Jan 2022 22:15:06 +0300 Received: by sas1-1f4a002bb12a.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id vdrU00sr04-F5IGfXk7; Wed, 26 Jan 2022 22:15:05 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) X-Greylist: delayed 411 seconds by postgrey-1.27 at vger.kernel.org; Wed, 26 Jan 2022 14:22:02 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1643224506; bh=p3KfHCrgw2V7xw85Rkmv7kxdQ1h3+1sdFv87o/9OxoY=; h=In-Reply-To:References:Date:Subject:To:From:Message-Id:Cc; b=r27455zd7Uwjz5OYX65kwCLGugwbRzux9uNOj7E1EWM8eS4djUwvsuZoEUYZBr4sF 4Y6as9FbiZxl5X6QNgnqXFYwLz0VXA9CCoFwK7lE80I3suIfms8e+eFy/Mi5BjjKHa jcFEnEHPQ+dJpZ4HtsWkW8TaCoBZLWbTuhYCZIIE= Authentication-Results: sas1-299d7dae1406.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru X-Yandex-Fwd: 2 From: Stas Sergeev Cc: Stas Sergeev , "Eric W. Biederman" , Kees Cook , Jens Axboe , Peter Zijlstra , Marco Elver , Thomas Gleixner , Alexey Gladkov , Andrew Lutomirski , linux-kernel@vger.kernel.org Subject: [PATCH 1/2] sigaltstack: ignore flags if SS_DISABLE is set Date: Wed, 26 Jan 2022 22:14:40 +0300 Message-Id: <20220126191441.3380389-2-stsp2@yandex.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220126191441.3380389-1-stsp2@yandex.ru> References: <20220126191441.3380389-1-stsp2@yandex.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1643224928374100001 Content-Type: text/plain; charset="utf-8" ss_flags combo of SS_AUTODISARM|SS_DISABLE can be used to check the support of SS_AUTODISARM. We need to remove the like flags and only keep SS_DISABLE because many libraries (eg asan runtime) check if SAS is disabled by just checking "ss_flags =3D=3D SS_DISABLE". Also man page mandates that only 1 flag can be returned, so returning SS_AUTODISARM|SS_DISABLE should be disallowed. Signed-off-by: Stas Sergeev CC: "Eric W. Biederman" CC: Kees Cook CC: Jens Axboe CC: Peter Zijlstra CC: Marco Elver CC: Thomas Gleixner CC: Alexey Gladkov CC: Andrew Lutomirski CC: linux-kernel@vger.kernel.org --- kernel/signal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/signal.c b/kernel/signal.c index 38602738866e..40634a500317 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -4209,6 +4209,7 @@ do_sigaltstack (const stack_t *ss, stack_t *oss, unsi= gned long sp, if (ss_mode =3D=3D SS_DISABLE) { ss_size =3D 0; ss_sp =3D NULL; + ss_flags =3D SS_DISABLE; } else { if (unlikely(ss_size < min_ss_size)) ret =3D -ENOMEM; --=20 2.34.1 From nobody Sat May 4 03:13:37 2024 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=yandex.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1643224832325893.7372964954822; Wed, 26 Jan 2022 11:20:32 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244414AbiAZTUZ (ORCPT ); Wed, 26 Jan 2022 14:20:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236295AbiAZTUW (ORCPT ); Wed, 26 Jan 2022 14:20:22 -0500 Received: from forward100p.mail.yandex.net (forward100p.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B6C04C06161C; Wed, 26 Jan 2022 11:20:21 -0800 (PST) Received: from sas8-f59b707a6213.qloud-c.yandex.net (sas8-f59b707a6213.qloud-c.yandex.net [IPv6:2a02:6b8:c1b:2988:0:640:f59b:707a]) by forward100p.mail.yandex.net (Yandex) with ESMTP id E23424F084E8; Wed, 26 Jan 2022 22:15:07 +0300 (MSK) Received: from sas1-1f4a002bb12a.qloud-c.yandex.net (sas1-1f4a002bb12a.qloud-c.yandex.net [2a02:6b8:c14:3908:0:640:1f4a:2b]) by sas8-f59b707a6213.qloud-c.yandex.net (mxback/Yandex) with ESMTP id OBXQNSJXHT-F7ceDiV4; Wed, 26 Jan 2022 22:15:07 +0300 Received: by sas1-1f4a002bb12a.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id vdrU00sr04-F6IGOf7G; Wed, 26 Jan 2022 22:15:07 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) X-Greylist: delayed 307 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Wed, 26 Jan 2022 11:20:21 PST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1643224507; bh=zLeZmkjXMX4QGgo+p8ULrLuMnXfwNEKNKqAejmSl4JA=; h=In-Reply-To:References:Date:Subject:To:From:Message-Id:Cc; b=FE/E9DkbiFchtfGTJo6E5X1aT4FmOFITOX7bHqo203nNKoriI3+qlA4ihs6nM5C71 bb22j5jRk27jHZ4nsoIVPnAaHd2mAA7Hlpo8O+vVqa07q1M+4ipkuGdBcoluyCqUDw +mPUv6HuPmSEA+JPI4/c9eKjK+UTLda0U2dT398g= Authentication-Results: sas8-f59b707a6213.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru X-Yandex-Fwd: 2 From: Stas Sergeev Cc: Stas Sergeev , Shuah Khan , "Chang S. Bae" , Borislav Petkov , Thomas Gleixner , Len Brown , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] selftests: sigaltstack: add new SS_DISABLE test Date: Wed, 26 Jan 2022 22:14:41 +0300 Message-Id: <20220126191441.3380389-3-stsp2@yandex.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220126191441.3380389-1-stsp2@yandex.ru> References: <20220126191441.3380389-1-stsp2@yandex.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1643224833960100001 Content-Type: text/plain; charset="utf-8" This test makes sure that when SS_DISABLE is used, all other flags are ignored. Also remove unneeded exit()s after ksft_exit_fail_msg(). That function exits by itself. Signed-off-by: Stas Sergeev CC: Shuah Khan CC: "Chang S. Bae" CC: Borislav Petkov CC: Thomas Gleixner CC: Len Brown CC: linux-kselftest@vger.kernel.org CC: linux-kernel@vger.kernel.org --- tools/testing/selftests/sigaltstack/sas.c | 48 ++++++++++++----------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/tools/testing/selftests/sigaltstack/sas.c b/tools/testing/self= tests/sigaltstack/sas.c index c53b070755b6..7be377e84aa0 100644 --- a/tools/testing/selftests/sigaltstack/sas.c +++ b/tools/testing/selftests/sigaltstack/sas.c @@ -119,7 +119,7 @@ int main(void) ksft_print_msg("[NOTE]\tthe stack size is %lu\n", stack_size); =20 ksft_print_header(); - ksft_set_plan(3); + ksft_set_plan(4); =20 sigemptyset(&act.sa_mask); act.sa_flags =3D SA_ONSTACK | SA_SIGINFO; @@ -129,24 +129,18 @@ int main(void) sigaction(SIGUSR2, &act, NULL); sstack =3D mmap(NULL, stack_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); - if (sstack =3D=3D MAP_FAILED) { + if (sstack =3D=3D MAP_FAILED) ksft_exit_fail_msg("mmap() - %s\n", strerror(errno)); - return EXIT_FAILURE; - } =20 err =3D sigaltstack(NULL, &stk); - if (err) { + if (err) ksft_exit_fail_msg("sigaltstack() - %s\n", strerror(errno)); - exit(EXIT_FAILURE); - } - if (stk.ss_flags =3D=3D SS_DISABLE) { + if (stk.ss_flags =3D=3D SS_DISABLE) ksft_test_result_pass( "Initial sigaltstack state was SS_DISABLE\n"); - } else { + else ksft_exit_fail_msg("Initial sigaltstack state was %x; " "should have been SS_DISABLE\n", stk.ss_flags); - return EXIT_FAILURE; - } =20 stk.ss_sp =3D sstack; stk.ss_size =3D stack_size; @@ -167,16 +161,13 @@ int main(void) ksft_exit_fail_msg( "sigaltstack(SS_ONSTACK | SS_AUTODISARM) %s\n", strerror(errno)); - return EXIT_FAILURE; } } =20 ustack =3D mmap(NULL, stack_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); - if (ustack =3D=3D MAP_FAILED) { + if (ustack =3D=3D MAP_FAILED) ksft_exit_fail_msg("mmap() - %s\n", strerror(errno)); - return EXIT_FAILURE; - } getcontext(&uc); uc.uc_link =3D NULL; uc.uc_stack.ss_sp =3D ustack; @@ -185,17 +176,28 @@ int main(void) raise(SIGUSR1); =20 err =3D sigaltstack(NULL, &stk); - if (err) { + if (err) ksft_exit_fail_msg("sigaltstack() - %s\n", strerror(errno)); - exit(EXIT_FAILURE); - } - if (stk.ss_flags !=3D SS_AUTODISARM) { - ksft_exit_fail_msg("ss_flags=3D%x, should be SS_AUTODISARM\n", + if (stk.ss_flags !=3D SS_AUTODISARM) + ksft_test_result_fail("ss_flags=3D%x, should be SS_AUTODISARM\n", stk.ss_flags); - exit(EXIT_FAILURE); - } - ksft_test_result_pass( + else + ksft_test_result_pass( "sigaltstack is still SS_AUTODISARM after signal\n"); + /* We are done, disable SS and exit. */ + stk.ss_flags =3D SS_DISABLE | SS_AUTODISARM; + err =3D sigaltstack(&stk, NULL); + if (err) + ksft_exit_fail_msg("sigaltstack() - %s\n", strerror(errno)); + err =3D sigaltstack(NULL, &stk); + if (err) + ksft_exit_fail_msg("sigaltstack() - %s\n", strerror(errno)); + if (stk.ss_flags !=3D SS_DISABLE) + ksft_test_result_fail("ss_flags=3D%x, should be SS_DISABLE\n", + stk.ss_flags); + else + ksft_test_result_pass( + "sigaltstack disabled\n"); =20 ksft_exit_pass(); return 0; --=20 2.34.1