Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp845542ybk; Fri, 15 May 2020 15:27:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxzg+nz/fldpi3ZFeCcsxDnOW+eD6qD8VzW1bgDi6SBMoShtpWoNvh6ZAx4HIABbbymDety X-Received: by 2002:a05:6402:1849:: with SMTP id v9mr5113650edy.178.1589581628148; Fri, 15 May 2020 15:27:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589581628; cv=none; d=google.com; s=arc-20160816; b=C6aKtQb2xWAV4kaauxo89ALmzKebQEv/eAaf/Hld5gAkV1Mk4hAfMuwuXYiqOuHUWK IjkF37UHiyqMIF7PCSdgYKfd/w+Zq3qh9h4PRgSQXi7xlVSQHVoOxCGe5nMPSBR27/Gb l2CI9JP4cBhuOvUOu+oIOxsbt8x6s10K1TZUqrVVlH7SrHkPHIp8P9Vb0WDimizqPUjZ /XvSDAXDxUMv6vJkRgMNN+kmMYYgP95qKfrEvt+Y0H8aSpAb31lIbpqTK8lrO7SqKWFT uAHG4lN4szUKnTLr4felunKdMJbtZO0CQmGuWQVmeQBU/yhtd3NoM+YBPBn1FgFK9IRY b4Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition:mime-version :message-id:subject:cc:to:from:date:dkim-signature; bh=TAEeLRHczjNG3Cacn9/4Eq8k480FxxPELQkCilNmlOU=; b=rJ/afKvRH1f6g/79AtRCuVxoYQHljOBdBcclZJwM+jm6aswpA3wItH9Ywy8OzQ252+ FYT1sLqGebVgiWTIlcCcWDK+GzeNGUEMIN/zXNCh1FPNXmGT+5//OUml+/Vz++Slqm4u dtVW6ccoR8fNwHn1K5SiGg+GKagzPSdeOoaWOdiu6anlLh6rExs1uTBYqq0cdg/ycYOy 6NXGHza32d6OyMTCT5I7sPfjCv43+TQNM2cg0KWo1aOBsI5neMlI33mQjmfZn4EcoJdl ZwUuL8ibjgmdxVHlpT9IBK6D5LYttlgX3eRkOB6fCNkZqfY6eKgNpXUzG93ziOZktD1L x78A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@juliacomputing-com.20150623.gappssmtp.com header.s=20150623 header.b=BwkiLuN3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h13si1869556eds.254.2020.05.15.15.26.44; Fri, 15 May 2020 15:27:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@juliacomputing-com.20150623.gappssmtp.com header.s=20150623 header.b=BwkiLuN3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726615AbgEOWW6 (ORCPT + 99 others); Fri, 15 May 2020 18:22:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52618 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726541AbgEOWW5 (ORCPT ); Fri, 15 May 2020 18:22:57 -0400 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E0A4C061A0C for ; Fri, 15 May 2020 15:22:57 -0700 (PDT) Received: by mail-qk1-x741.google.com with SMTP id 190so4332694qki.1 for ; Fri, 15 May 2020 15:22:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juliacomputing-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:mime-version:content-disposition; bh=TAEeLRHczjNG3Cacn9/4Eq8k480FxxPELQkCilNmlOU=; b=BwkiLuN3CS3wSfV5UK/uFMwWOrqdIuQqkzgFEHnZA9kg/p0ceMCfR2loMYNAIkq/7m fQixDxjcDe6oAk+sKgT3wjq5PUYOKFnQFT9f4IdUe+PWGoMFPfnDTP0EohFkMO9YTTvj 0OWexima9S9sys9Y7txoCZRf4F+yVgioqoAdJf0/RbBg0B3aifD33ddB1j880f10TgqI 8gnIeGfnCVkPvinPsCZiKQVgWgzpYDVHvpHFR+KJe2sAivPii6Ba1Rm9ol7BZx2K+IHC N4VCkR0oofbqlYUm5ueUJbsRooZ3d9ZX54zUi9CZ/1WD85d0MdGRZfczKjEbP8H2Sh8z amHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=TAEeLRHczjNG3Cacn9/4Eq8k480FxxPELQkCilNmlOU=; b=YhapvD2KwMKolq41UJwkNOzQlIJgDVu+2Bc+oa4taCvCdJejYOzmrMY0pRTDrgprDl +UB6j2wJNgTw0pqzxeP7Lb9sBEWvL3UDdQP7NLTAS6xgxWyya3ZRCz4foCTuvehd0YPF XWHQewDOn4DpoTgoKga/VxlhIlBeRgLeb3b96rZRsvLlLS/3VMp9+v+tHTof4g46xBzB GrupSaQQ3EYGAmUcK1vta2W7DSOKxfRBuDYwZatOOFW7M+teLFsD4lL88x7BaFb89Jwq 2NlhFmvmHQSURj6OTlnLhdPd48+Gjt0R4ZDSY019DBWBse1kd8q7wff22WYhBjTRB2Jl CtUg== X-Gm-Message-State: AOAM532sejdAL4IXN//Y+GJSqON2Opc3KKbPHlUwDbeSJffQ+BZlYk64 Ej++Ys7f7FRuPLtce+hm9rontvXP7Jk= X-Received: by 2002:a37:8347:: with SMTP id f68mr5438179qkd.153.1589581376285; Fri, 15 May 2020 15:22:56 -0700 (PDT) Received: from juliacomputing.com ([2601:184:4780:3aef:d1fc:d97:8a48:767e]) by smtp.gmail.com with ESMTPSA id 127sm2642035qkj.59.2020.05.15.15.22.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 May 2020 15:22:55 -0700 (PDT) Date: Fri, 15 May 2020 18:22:53 -0400 From: Keno Fischer To: linux-arm-kernel@lists.infradead.org Cc: will.deacon@arm.com, sudeep.holla@arm.com, catalin.marinas@arm.com, oleg@redhat.com, linux-kernel@vger.kernel.org Subject: [PATCH] arm64: Fix PTRACE_SYSEMU semantics Message-ID: <20200515222253.GA38408@juliacomputing.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoth the man page: ``` If the tracee was restarted by PTRACE_SYSCALL or PTRACE_SYSEMU, the tracee enters syscall-enter-stop just prior to entering any system call (which will not be executed if the restart was using PTRACE_SYSEMU, regardless of any change made to registers at this point or how the tracee is restarted after this stop). ``` The parenthetical comment is currently true on x86 and powerpc, but not currently true on arm64. arm64 re-checks the _TIF_SYSCALL_EMU flag after the syscall entry ptrace stop. However, at this point, it reflects which method was used to re-start the syscall at the entry stop, rather than the method that was used to reach it. Fix that by recording the original flag before performing the ptrace stop, bringing the behavior in line with documentation and x86/powerpc. Signed-off-by: Keno Fischer --- arch/arm64/kernel/ptrace.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index b3d3005d9515..b67b4d14aa17 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -1829,10 +1829,12 @@ static void tracehook_report_syscall(struct pt_regs *regs, int syscall_trace_enter(struct pt_regs *regs) { - if (test_thread_flag(TIF_SYSCALL_TRACE) || - test_thread_flag(TIF_SYSCALL_EMU)) { + u32 flags = READ_ONCE(current_thread_info()->flags) & + (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE); + + if (flags) { tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); - if (!in_syscall(regs) || test_thread_flag(TIF_SYSCALL_EMU)) + if (!in_syscall(regs) || (flags & _TIF_SYSCALL_EMU)) return -1; } -- 2.25.1