From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B73FC3DA63 for ; Thu, 18 Jul 2024 16:14:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8237C6B0085; Thu, 18 Jul 2024 12:14:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D32C6B0088; Thu, 18 Jul 2024 12:14:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 69ADC6B0089; Thu, 18 Jul 2024 12:14:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 4D0576B0085 for ; Thu, 18 Jul 2024 12:14:49 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id E900980F55 for ; Thu, 18 Jul 2024 16:14:48 +0000 (UTC) X-FDA: 82353371856.23.68E22CA Received: from mail-io1-f54.google.com (mail-io1-f54.google.com [209.85.166.54]) by imf21.hostedemail.com (Postfix) with ESMTP id 022CF1C0025 for ; Thu, 18 Jul 2024 16:14:45 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=M1rDZnlD; spf=pass (imf21.hostedemail.com: domain of thiago.bauermann@linaro.org designates 209.85.166.54 as permitted sender) smtp.mailfrom=thiago.bauermann@linaro.org; dmarc=pass (policy=none) header.from=linaro.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721319245; h=from:from:sender: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=cKUm2Sno0VCM0sKj4rcn5Z8Kw9gJMdGTQrF0ZDE8JgQ=; b=j2OaRbnh+Y289vMRePjb2STLJlMXle7vNV1XQpes6kIHOHIFEQiVrbkECCWUq/8F4KPSek qTOfbqYWUBN0ksbtMpE53q5MwSXd+tVZA7olzYON8yDEra7Tou5QCvBOwveY8eY7Ykp+Gu XVdgAJxIBxxwncsmWn3uc8FWpbo00d4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721319245; a=rsa-sha256; cv=none; b=TmGx7H4gR1PJpHAN0Ql6Or3KLb+bbmgL5TR8F4JQbVMOHHSXrXAJE4WZw0rMlTNrrhq6Rq Hi21AlQWuDQpUHNGvqRzs/EzSMbLY7IffuWGk2v8cY0+qcvhoTO7u9nndsv/ESnNCxdnM4 lca6aswgGLgQ64p013cg+YTnaZfsC0M= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=M1rDZnlD; spf=pass (imf21.hostedemail.com: domain of thiago.bauermann@linaro.org designates 209.85.166.54 as permitted sender) smtp.mailfrom=thiago.bauermann@linaro.org; dmarc=pass (policy=none) header.from=linaro.org Received: by mail-io1-f54.google.com with SMTP id ca18e2360f4ac-7f97e794f34so37296939f.3 for ; Thu, 18 Jul 2024 09:14:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1721319285; x=1721924085; darn=kvack.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=cKUm2Sno0VCM0sKj4rcn5Z8Kw9gJMdGTQrF0ZDE8JgQ=; b=M1rDZnlDIASyaM7iafqu2X/d/o2PRyss8dVXNlVAXcMbycqIo8RX7A8EXVz+8Ft44i KsxeVTtOAR1ZTFIpHLOAbiBUt1psXDWAaFxnpYHfFBgNYgS5vEh+2a4yULOV10G6Yc/N A+iby6frX1iEaT3K+rccbIBnPtYBERUQrB6p8QSZQgMgu3fi5LnNG1M8DMXm2sSWkhXk 5bhlm96kgAfGey1vt8DXQwm5Uq6Z7UCO637XHbKKECksUP93HlN+1054t9OwbP9bSEvl bWO0wlRf62BmgQfJPHUx25fbYFiig1HG9qnK67XtvyI4ldiKVlrp/9rB7DI3FlbmSssj WnCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721319285; x=1721924085; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cKUm2Sno0VCM0sKj4rcn5Z8Kw9gJMdGTQrF0ZDE8JgQ=; b=Zv16EK55FTr3gU93dtizA5d+h6F9cVUN37vZkXPVG1VqYXqH9VI6rm5/QWrwPrp16Y hX2Ihc7c60e5k0jZGJmZBbmW2aoKOAcTblzCeispvAmACxdU6SqN6cmjbJmGmDqJSe7x c7AmMi+tWj6fRhE5YJPHDXyO4sUvVSufN5J+nXi9rWwDzuv7fCuNsOymXNAsgOj49cTq UDnBREJN0eVhttg4JPLO6w2RmNxXElU7uFsuLKvbXn8AEBnULP5BEO+J9fDmdyqeeonB N8DHMo3FTuX5LY2OS8gKs6He+w9hRIPLjyEYJbLSXrClFrGRNtny2KxnbEXlYVq2HWkJ dI5g== X-Forwarded-Encrypted: i=1; AJvYcCXLzinxJNiEGYgwwNZ0oiQetXROILkO19AP4c02ANv8cs4Te9C0hQBkoseDCCqcE56QTr7JdKxoQvH4TQ83bANfDm8= X-Gm-Message-State: AOJu0YxzWxf44UqCyVEJI15eOgvq09YxdYYvNlj5A/iKCe2w/K8NORZH bc0m9Z7qBCNd1Jgr0AUcLYLazpQVlAi88ap1CeeBJdc/GuZSRq44GDAwmDTJ0Gk= X-Google-Smtp-Source: AGHT+IGBl5SUOSetZ7hpvAsBcsY+3Cb2iftUEXypwidAC9j+tfeb4FVk4PWmNhC4HY+kt6K5hLBh4A== X-Received: by 2002:a05:6602:3fcc:b0:804:657d:92fc with SMTP id ca18e2360f4ac-817123e1bb4mr642950839f.18.1721319284795; Thu, 18 Jul 2024 09:14:44 -0700 (PDT) Received: from localhost ([2804:14d:7e39:8470:49aa:ec5c:43c8:2afb]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-78e34d2c7e2sm7993415a12.54.2024.07.18.09.14.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jul 2024 09:14:44 -0700 (PDT) From: Thiago Jung Bauermann To: Mark Brown Cc: Catalin Marinas , Will Deacon , Jonathan Corbet , Andrew Morton , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Arnd Bergmann , Oleg Nesterov , Eric Biederman , Shuah Khan , "Rick P. Edgecombe" , Deepak Gupta , Ard Biesheuvel , Szabolcs Nagy , Kees Cook , "H.J. Lu" , Paul Walmsley , Palmer Dabbelt , Albert Ou , Florian Weimer , Christian Brauner , Ross Burton , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org Subject: Re: [PATCH v9 35/39] kselftest/arm64: Add a GCS test program built with the system libc In-Reply-To: <20240625-arm64-gcs-v9-35-0f634469b8f0@kernel.org> (Mark Brown's message of "Tue, 25 Jun 2024 15:58:03 +0100") References: <20240625-arm64-gcs-v9-0-0f634469b8f0@kernel.org> <20240625-arm64-gcs-v9-35-0f634469b8f0@kernel.org> Date: Thu, 18 Jul 2024 13:14:41 -0300 Message-ID: <87plray8we.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 022CF1C0025 X-Stat-Signature: 67368ehs3bequpw3snpexpmg1s7au6hd X-HE-Tag: 1721319285-161298 X-HE-Meta: U2FsdGVkX1+bOZGFGnrkNQ+w4aeRCiEleVwYYkBbPo0Yxn1RzasagIvYnJhuyHwBxeW17HpqeJTnxvegP258+bNrHKY9uVrQK+QHlxtyOVVtjyT7PXsy7AuJeQBk4SuSH526Nzclh2W9xcX7zMtc81lCQMkzJGij1G+6CqC2tgcaD7eWyBQkIwbhSFS4SbGTC47GOYp2LsUan+Gm2BHCulqGyKhxSIMu4IgWfckfVT32adgVbkFNJE9BofFTA3MtQ5lG1Sh2dxX1LdX3MMv7wcblspc1HVBf6OAYWJd/5rjz51F7QeRatoMYievWve5fVLw299oB0JmV1WpAOGg405thLnfMkZOfU20piJStgEN20rz9CqQbtRIucBBx5VHK9P3IbjB5DNJ7aVSHTgFLWrauwbGl+ZIr1VkOAbDKZcwrDJOQE4YO8rgjuTUVFjRaBCmIaFOHpTN4lvP5u1i3ZMS0NYTaXvvKEnYSRlTVsjLZA9IBEB5FoQTa362pN8VRNQbydzHkvKgCcwjy3AUTLJEbekBBkaN0MMMs00uuQnANadimSI6yOoabMEPBx9WQ2KBBzwEPIsjcRzh/zQOSUt3RzOVS2c/pA13krt2qcXhsLC1nRxIo8+SlNZ5NK9wXNCKdEcwaFdu/9ZWORU5wPg8tPJOkPW6tWF9LZmFPGqFzae5QNTpI/OSH0jp3riYYMfpvEqE/NMlzRDWCfl+4lAPGYy5UCf3XLKj2eXNrMXEDpRUKdKpxzyR6e+0qhTVtrURVV9fMRIGwS13Gth7oFeT4cIP4P5L8LjnZP1yYo/Gk6ioTXeLPMRXxOUTIsM3yRONri0cUwWIpg/2MWOdXvErMNPW6jX32rVLFOWxiH4ypqEoXmuun2ycF3VtXr/3sWAMm5XfjW38RgVp1fo6GUN2/j5T1OIDdxSN9hHp+wXH1CuVtHxi2IOkUI2TsxzkRbAO1PVp7AwqGEBdMwLe JCvLzhhy /L2u7ltfkGlabaBvEThmZ4JbXmD7pzbeWUPh6wh8fp52wQC1rFSuQ/IvnZaeu3ZausOYfO68XMtaPOvl//phySAXaPn498XEoF1CiuZwOFtIaEb5hXNeIprqBzXeo2KLs1Qbi5GfmDPOlg8M9d8yS4OTuEUTvM6Eqe8VT3n3vkMNXrfL0c6os5EB8FXM7XKiTaxHPTbDAjrz1uys+Hd2qGulNNvkolHVidUpoZvCeO4dfBV0+erYLxlJ7TOQVFRZHNuSmh+5B4PBkgNTBMEwkUuBx9oGMsN39tPBU+U5S+7rer40R7c5XIFwWNE4ys4GcmQTM4ubAuhHIaxrnQpo9NYTpuZeXx5fWCUsPQ5UtnKhDoMzTUUSJ9WB8ssmlTlZUxvBO/aNTK3HpIOYp9LGnVXk2qgT3y3unVZR+QnXCZMBdW31AiVPXCFStWw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Mark Brown writes: > There are things like threads which nolibc struggles with which we want > to add coverage for, and the ABI allows us to test most of these even if > libc itself does not understand GCS so add a test application built > using the system libc. > > Reviewed-by: Thiago Jung Bauermann > Signed-off-by: Mark Brown > --- > tools/testing/selftests/arm64/gcs/.gitignore | 1 + > tools/testing/selftests/arm64/gcs/Makefile | 4 +- > tools/testing/selftests/arm64/gcs/gcs-util.h | 10 + > tools/testing/selftests/arm64/gcs/libc-gcs.c | 736 +++++++++++++++++++++++++++ > 4 files changed, 750 insertions(+), 1 deletion(-) In my FVP VM, this test gets a GCS SIGSEGV before running the first test: $ sudo ./run_kselftest.sh -t arm64:libc-gcs [sudo] password for bauermann: TAP version 13 1..1 # timeout set to 45 # selftests: arm64: libc-gcs # TAP version 13 # 1..118 # # Starting 118 tests from 32 test cases. # # RUN global.can_call_function ... # Segmentation fault not ok 1 selftests: arm64: libc-gcs # exit=139 $ It happens when returning from the syscall() glibc function that does the clone3 syscall in kselftest_harness.h: $ /var/tmp/gdb-gcs/bin/gdb -q arm64/libc-gcs Reading symbols from arm64/libc-gcs... (gdb) r Starting program: /var/tmp/selftests-v9/arm64/libc-gcs [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". TAP version 13 1..118 # Starting 118 tests from 32 test cases. # RUN global.can_call_function ... [Detaching after vfork from child process 823] Program received signal SIGSEGV, Segmentation fault Guarded Control Stack error. syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:41 [GCS error] warning: 41 ../sysdeps/unix/sysv/linux/aarch64/syscall.S: No such file or directory (gdb) p $_siginfo.si_signo $1 = 11 (gdb) p $_siginfo.si_code $2 = 10 (gdb) p $_siginfo._sifields._sigfault.si_addr $3 = (void *) 0xfffff7ed96b0 (gdb) disassemble Dump of assembler code for function syscall: 0x0000fffff7ed9680 <+0>: nop 0x0000fffff7ed9684 <+4>: mov w8, w0 0x0000fffff7ed9688 <+8>: mov x0, x1 0x0000fffff7ed968c <+12>: mov x1, x2 0x0000fffff7ed9690 <+16>: mov x2, x3 0x0000fffff7ed9694 <+20>: mov x3, x4 0x0000fffff7ed9698 <+24>: mov x4, x5 0x0000fffff7ed969c <+28>: mov x5, x6 0x0000fffff7ed96a0 <+32>: mov x6, x7 0x0000fffff7ed96a4 <+36>: svc #0x0 0x0000fffff7ed96a8 <+40>: cmn x0, #0xfff 0x0000fffff7ed96ac <+44>: b.cs 0xfffff7ed96b4 // b.hs, b.nlast => 0x0000fffff7ed96b0 <+48>: ret 0x0000fffff7ed96b4 <+52>: b 0xfffff7e18660 <__GI___syscall_error> 0x0000fffff7ed96b8 <+56>: b 0xfffff7e18660 <__GI___syscall_error> End of assembler dump. (gdb) bt #0 syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:41 [GCS error] #1 0x0000aaaaaaaa4acc in clone3_vfork () at /home/bauermann/src/linux/tools/testing/selftests/kselftest_harness.h:93 #2 __run_test (f=f@entry=0xaaaaaaac0b88 <_fixture_global>, variant=variant@entry=0xffffffffee00, t=t@entry=0xaaaaaaac0018 <_can_call_function_object>) at /home/bauermann/src/linux/tools/testing/selftests/kselftest_harness.h:1239 [GCS error] #3 0x0000aaaaaaaa2c40 in test_harness_run (argv=0xfffffffff008, argc=1) at /home/bauermann/src/linux/tools/testing/selftests/kselftest_harness.h:1314 #4 main (argc=1, argv=0xfffffffff008) at libc-gcs.c:735 [GCS error] (gdb) And indeed, the svc call in the disassemble above corrupts the GCS. This is the GCS and lr values right before the svc call: (gdb) x/i $pc => 0xfffff7ed96a4 : svc #0x0 (gdb) p/x $lr $3 = 0xaaaaaaaa4acc (gdb) p/x $gcspr $4 = 0xfffff7bfffe8 (gdb) x/g $gcspr 0xfffff7bfffe8: 0x0000aaaaaaaa4acc So far so good, the tip of the GCS matches $lr. But then: (gdb) stepi [Detaching after vfork from child process 2491] 39 in ../sysdeps/unix/sysv/linux/aarch64/syscall.S (gdb) x/i $pc => 0xfffff7ed96a8 : cmn x0, #0xfff (gdb) p/x $gcspr $5 = 0xfffff7bfffe8 (gdb) x/g $gcspr 0xfffff7bfffe8: 0x0000aaaaaaaa4c04 (gdb) p/x $lr $6 = 0xaaaaaaaa4acc So, right after svc returns, the tip of the GCS is corrupted and will cause the GCS error. -- Thiago