Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp2077pxx; Tue, 27 Oct 2020 18:49:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzX98HYeLqxqeddH22VPHiks7THYG1FZmaskSSQcxHDG2tTwdYxkn+qCzZQhn3pLSCAVP5E X-Received: by 2002:aa7:cf0f:: with SMTP id a15mr5553637edy.3.1603849770636; Tue, 27 Oct 2020 18:49:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603849770; cv=none; d=google.com; s=arc-20160816; b=fk21A8UQMM2e+TLtr0VDgWf5yLdEqo9ffe31USipqYmKzfe5jKAIwp4uZg2RKrNTQd NchoCaUcFML4PrrKGShHgbFoHfxScB0AK8PnHkwBIVzL2q9C0iVp9UVkDdpZ7oKoL47e EvEFRvzTw7Re8qAn+RKrn18EWUZm4aZlWFWk8i9oZiw5PwPlueZXx/FBRdJ1xLZumkwI FWR2AmYDwJxxLYZxLm1hFUCRAjtiQink+uGjNgrGJiTuJvev3kvEmsQHWsuVugIkeL20 UU36dmrmzUC4UnXUguEjHh+7YI86TfvIQGMYXp6Eabt21TLpl64nrSFAjuXJLuo0krE1 j/UQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=/XSGJSszBAu9aJyHiBSKxP/faTdqnmxLUZDOyavfUMg=; b=MIfv8XpcI5bBET6pTw7n2OFFOc71/lb4GsqQU6MbHzeAVPT2FONFaxAnMTMhEnrKBy 5ozodbhC/pdPsZTk3ssFxfVGJ7Jpwtf8SshMBIeXXoK8bigYa9Jui/WAYY0SHGeGxQj4 6yYqkWKPAVguj8WSZSFv9LHmQvz3AfEJnGstTq94Tz5v59Wl7mijGBYNbJC00qMQ2Ke/ By1t3W5kCc6TvkYKwD5dEj87cb3uB5UR9chWlz9oWNnNebqFHnW86Ejt7fG3zZuwaOV0 Zcf4Qdm3PeC3HeouIa7lKO6CQZkbq9xjzUpHUjfn68tpg5klCHJbm7+9LrAW2EhIgpmB /IWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=G0DJKiyD; 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 y9si2557112edp.443.2020.10.27.18.49.08; Tue, 27 Oct 2020 18:49:30 -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=@infradead.org header.s=casper.20170209 header.b=G0DJKiyD; 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 S2894512AbgJ0IQd (ORCPT + 99 others); Tue, 27 Oct 2020 04:16:33 -0400 Received: from casper.infradead.org ([90.155.50.34]:34334 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395394AbgJ0IQb (ORCPT ); Tue, 27 Oct 2020 04:16:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=/XSGJSszBAu9aJyHiBSKxP/faTdqnmxLUZDOyavfUMg=; b=G0DJKiyDWc9Uj2URstInjG+S81 NZTnxMY62qkTkejxfZtF5FfZ13o6BeLTIPc9xJhXbn+uWH9kBQD0kYRmRxD36vwr/5fvpy8Pfb5zv c+Rwr8rHTsQSSF3TI7Bhnfy3g2/+fdy37DWzoXait02sVtKlHwpvyVfoKgw+E0lzOWpCsnP4m/RTa 6T2T9o2m6Fkna5kgSSX52aOAtsigkay9VW015mW4C5jVkVIiqaMS/HTvSksIbsfKCStMwV0nMfKtm FVTjYecy8TxGY2oXRpJAqqheCLLaA+ySh1RD7WrcNofQB3gLNPuCTHT0OTPBx/Vfd8v6GQOVBgBtX C1+TocNw==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXK9A-0001EV-Qx; Tue, 27 Oct 2020 08:16:01 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id E019A3060F2; Tue, 27 Oct 2020 09:15:59 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id CBAAF2127D318; Tue, 27 Oct 2020 09:15:59 +0100 (CET) Date: Tue, 27 Oct 2020 09:15:59 +0100 From: Peter Zijlstra To: Andy Lutomirski Cc: Kyle Huey , open list , Thomas Gleixner , "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" , Linus Torvalds , Robert O'Callahan , Alexandre Chartre , "Paul E. McKenney" , Frederic Weisbecker , Paolo Bonzini , Sean Christopherson , Masami Hiramatsu , Petr Mladek , Joel Fernandes , Steven Rostedt , Boris Ostrovsky , Juergen Gross , Brian Gerst , Josh Poimboeuf , Daniel Thompson Subject: Re: [REGRESSION] x86/debug: After PTRACE_SINGLESTEP DR_STEP is no longer reported in dr6 Message-ID: <20201027081559.GI2628@hirez.programming.kicks-ass.net> References: <20201026155521.GQ2594@hirez.programming.kicks-ass.net> <20201026160513.GC2651@hirez.programming.kicks-ass.net> <20201026163100.GR2594@hirez.programming.kicks-ass.net> <20201026165519.GD2651@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 26, 2020 at 04:45:18PM -0700, Andy Lutomirski wrote: > PeterZ, this new scheme of having handlers clear bits in dr6 to > consume them and set bits in virtual_dr6 to send signals is > incomprehensible -- there is no possible way to read traps.c and tell > what the code does :( IIRC, it was you who suggested it. Also the old code was equally incomprehensible. Now it has actual semantics. > I attached a test case. I'll make a real patch out of this in a bit. > This passes on 5.8, and I haven't tested it yet on 5.10-rc1. The real > patch will also test ICEBP, and I'm sure we'll be quite unhappy with > the result of that. > diff --git a/tools/testing/selftests/x86/single_step_syscall.c b/tools/testing/selftests/x86/single_step_syscall.c > index 5a4c6e06872e..f6abefd4066e 100644 > --- a/tools/testing/selftests/x86/single_step_syscall.c > +++ b/tools/testing/selftests/x86/single_step_syscall.c > @@ -72,7 +72,6 @@ static unsigned char altstack_data[SIGSTKSZ]; > static void sigtrap(int sig, siginfo_t *info, void *ctx_void) > { > ucontext_t *ctx = (ucontext_t*)ctx_void; > - unsigned long dr6 = info->si_code; > > if (get_eflags() & X86_EFLAGS_TF) { > set_eflags(get_eflags() & ~X86_EFLAGS_TF); > @@ -89,7 +88,10 @@ static void sigtrap(int sig, siginfo_t *info, void *ctx_void) > (unsigned long)ctx->uc_mcontext.gregs[REG_IP]); > } > > - printf("DR6 = 0x%lx\n", dr6); > + if (info->si_code != TRAP_TRACE) { > + printf("[FAIL]\tsi_code was 0x%lx; should have been TRAP_TRACE (0x%lx)\n", (unsigned long)info->si_code, (unsigned long)TRAP_TRACE); > + _exit(1); > + } > } That actually works (tested). Nothing here cares about the virtual_dr6 value. Think of virtual_dr6 as the value used by ptrace_{get,set}_debugreg(6). It (should) only contain bits that results from other ptrace() actions.