From patchwork Tue Nov 3 04:09:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Collingbourne X-Patchwork-Id: 11875889 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 179DAC4742C for ; Tue, 3 Nov 2020 04:11:47 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 844C72074F for ; Tue, 3 Nov 2020 04:11:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="MC0ihGep"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="lTZkTDm4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 844C72074F Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:Mime-Version:Message-Id:Date: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=601A9Twwm+myQOwx9/iTH2cW2Dc2hQ64RyOv9J+np5M=; b=MC0ihGeptxy1KPqfOdYBlin50p GoshbzpIm+2tw3ue4MqYBn1lIBuDGh3qZZbqZEZTTgPbi7A0v0Qp4HqdCMvCGsVLORLTqSOaLooF+ zTkOKfVFAeHIIzj+QZNj/rFXHN062bDDd5uI4M1NCZfPfCR1xebD3PHXZnq6tgp6z+pfrbHxeOhH4 4GKd7s5X9IqwYXUiFKei+ZB5xfMQjN5G3pfmKjEVymTiBvyd7fIhqrlim3mYi2SWL8HWFgQT3L8H4 ioAoL4GcS4NMVWE5OLtBazGCu2d6zRLVziA5eDz6KPkBTA9pG2aIHP16lzn7tvNopeF3LHV5/cpX5 CnQJWT6A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZne3-0001Xr-Te; Tue, 03 Nov 2020 04:10:07 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZne1-0001X3-AE for linux-arm-kernel@lists.infradead.org; Tue, 03 Nov 2020 04:10:06 +0000 Received: by mail-yb1-xb49.google.com with SMTP id b189so16572711ybh.5 for ; Mon, 02 Nov 2020 20:10:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:message-id:mime-version:subject:from:to:cc; bh=uAiEpKASH8iqjNYFoK75cypB8AjyRgyBk1UTuJ1P6NU=; b=lTZkTDm48P26bPagiw7Bh20cBiBBcMZdiGUt8bmrieDh0q2iy0jeonQ004QEzd+HJ4 YhznNIbSrIgYY+9cY+NDyY1RWKA0ZR//afqRyoiax/ddnL9uYImrpAObrb6Uz8dCGZnN Vy9/pq2JRLrfLv/X/7nWaiZbwDj+l42q5+7Xz2kfTkrHRThp0kD8gnHNtELTWgrgrunZ BlhJX2erGQgjO+QdZwj1o3sm4d3vZqcwCf2tL8twpzzwuC3dkJIeuIt4vQiK6AnUlHvg LgckQwdghI0ZS69KXKsrAf32SG4LI4tKMnOQDLLFX55Fsf6XzNXrd5dHm+WaGPvUWl6L 9bJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:message-id:mime-version:subject:from :to:cc; bh=uAiEpKASH8iqjNYFoK75cypB8AjyRgyBk1UTuJ1P6NU=; b=ohqMxN7Af6HtUDSfZGD6Mq2oyausZAa86Z4oEO/hlFjEK5j8eUsD13rzEX7yNdWTV4 K+/6++OTcZ987MVU9WVm5nq8K3XHUpMd9us7M53VeD9Ax7dmhHsR8kyBW61QySW7nxUo oLGy/SYsu79n64kiiGGi/2s0DEX6zz2khRrcsR6cs21Qd9SDHF8Puwb0zfGYB5aJRW+p I6atcwMOJPmKFq/dvfELO9eJfgcnNqSKklg8W2jTwSHdCK8FiSZqUgvzLtic6wRgT+Qk CAcQOXbkagLiAgrCQi5/Cq1vcA62MT8hzq/mXSll70ht+iylTwPaHLeMOLz626JvOMRY IQsQ== X-Gm-Message-State: AOAM533OfJruoRRbd6xz0eLkgsKU2i9Cs9fxYm5YZfIloXwry6xmJC1y nuoav1trQLvyy3vTvo0kX7QMEoY= X-Google-Smtp-Source: ABdhPJx+PEslaazxsV3hqP6Bt/sQ97ntHbzGbXce79z6vc/cPjAYvoVABeTDwoz/elgw1lm7aq4BrZs= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2ce:0:7220:84ff:fe09:385a]) (user=pcc job=sendgmr) by 2002:a25:3417:: with SMTP id b23mr24817690yba.97.1604376600827; Mon, 02 Nov 2020 20:10:00 -0800 (PST) Date: Mon, 2 Nov 2020 20:09:36 -0800 Message-Id: Mime-Version: 1.0 X-Mailer: git-send-email 2.29.1.341.ge80a0c044ae-goog Subject: [PATCH v13 0/8] arm64: expose FAR_EL1 tag bits in siginfo From: Peter Collingbourne To: Catalin Marinas , Evgenii Stepanov , Kostya Serebryany , Vincenzo Frascino , Dave Martin , Will Deacon , Oleg Nesterov , "Eric W. Biederman" , "James E.J. Bottomley" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201102_231005_389201_05A6E49A X-CRM114-Status: GOOD ( 16.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrey Konovalov , Helge Deller , Kevin Brodsky , linux-api@vger.kernel.org, David Spickett , Peter Collingbourne , Linux ARM , Richard Henderson Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The kernel currently clears the tag bits (i.e. bits 56-63) in the fault address exposed via siginfo.si_addr and sigcontext.fault_address. However, the tag bits may be needed by tools in order to accurately diagnose memory errors, such as HWASan [1] or future tools based on the Memory Tagging Extension (MTE). We should not stop clearing these bits in the existing fault address fields, because there may be existing userspace applications that are expecting the tag bits to be cleared. Instead, create a new pair of union fields in siginfo._sigfault, and store the tag bits of FAR_EL1 there, together with a mask specifying which bits are valid. However, one does not simply add fields to siginfo, at least not without a mechanism for userspace to detect that they are present and valid. Therefore, the first seven patches in this series introduce a mechanism for userspace to detect the presence of our new siginfo fields, and the last patch uses it to advertise the presence of said fields. The series can be viewed on Gerrit here: https://linux-review.googlesource.com/q/Ia8876bad8c798e0a32df7c2ce1256c4771c81446 [1] http://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html Helge Deller (1): parisc: Drop parisc special case for __sighandler_t Peter Collingbourne (7): parisc: start using signal-defs.h arch: move SA_* definitions to generic headers signal: clear non-uapi flag bits when passing/returning sa_flags signal: define the SA_UNSUPPORTED bit in sa_flags signal: deduplicate code dealing with common _sigfault fields signal: define the field siginfo.si_faultflags arm64: expose FAR_EL1 tag bits in siginfo Documentation/arm64/tagged-pointers.rst | 21 +++- arch/alpha/include/uapi/asm/signal.h | 14 --- arch/arm/include/asm/signal.h | 2 + arch/arm/include/uapi/asm/signal.h | 28 +---- arch/arm64/include/asm/exception.h | 2 +- arch/arm64/include/asm/signal.h | 19 +++ arch/arm64/include/asm/system_misc.h | 2 +- arch/arm64/include/asm/traps.h | 6 +- arch/arm64/kernel/debug-monitors.c | 5 +- arch/arm64/kernel/entry-common.c | 2 - arch/arm64/kernel/ptrace.c | 7 +- arch/arm64/kernel/sys_compat.c | 5 +- arch/arm64/kernel/traps.c | 29 ++--- arch/arm64/mm/fault.c | 68 ++++++----- arch/h8300/include/uapi/asm/signal.h | 24 ---- arch/ia64/include/uapi/asm/signal.h | 24 ---- arch/m68k/include/uapi/asm/signal.h | 24 ---- arch/mips/include/uapi/asm/signal.h | 12 -- arch/parisc/include/asm/signal.h | 2 + arch/parisc/include/uapi/asm/signal.h | 34 +----- arch/powerpc/include/uapi/asm/signal.h | 24 ---- arch/powerpc/platforms/powernv/vas-fault.c | 1 + arch/s390/include/uapi/asm/signal.h | 24 ---- arch/sparc/include/uapi/asm/signal.h | 4 +- arch/x86/include/uapi/asm/signal.h | 24 ---- arch/x86/kernel/signal_compat.c | 19 +-- arch/xtensa/include/uapi/asm/signal.h | 24 ---- include/linux/compat.h | 4 + include/linux/signal.h | 29 +++++ include/linux/signal_types.h | 12 ++ include/uapi/asm-generic/siginfo.h | 14 +++ include/uapi/asm-generic/signal-defs.h | 58 +++++++++ include/uapi/asm-generic/signal.h | 29 ----- include/uapi/linux/ptrace.h | 12 ++ kernel/ptrace.c | 33 ++++- kernel/signal.c | 134 +++++++++++---------- 36 files changed, 346 insertions(+), 429 deletions(-) create mode 100644 arch/arm64/include/asm/signal.h