Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp3509445imm; Wed, 5 Sep 2018 01:04:11 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbxHjCW+V61WTKFrsJCdmvAXoMLGu2zoGOMuQXTuY1vcTs6T3flKUjMTya8Xm/4AbTZ0IiA X-Received: by 2002:aa7:881a:: with SMTP id c26-v6mr38618990pfo.82.1536134651481; Wed, 05 Sep 2018 01:04:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536134651; cv=none; d=google.com; s=arc-20160816; b=R/pBE+iWWa0W/1jVWx1HtXNRhgCqNSanxXnLVTH7zfjLSwIjJTN1B8+aep9DC0ikld Gnd4eBeZN97uEVPvvYa2czOEhW4CM3pN156qZYCsPYw+N5X/L9wkPjAu7Pe0IvsUqfAG 7GpcHE8b9QLAxnPnvlb64jKNLlImLsefDmhA/hKIhq9H9fiVv3o7sTfeuDDfCzjsOka+ KqAu+wuN51YK9Xew7xZReVj3PymLe+oTeuwGUiTwnF/fdu3+Vgw4qZ50U/CRRYWAznGA lZhfs8XasRtILrNgh2xPZPvsjy6lvW6pV3yj20FfwWC65SHWgoGZX0kb4L5PDpY9Uncg GSIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date; bh=A5wXI/ZuRIRybd+taLKruJMuJSER+kmXJP3XidmzYzA=; b=Cz1rnEmRbXLCN8Mf0GqAZkEZkd/gMaX21VSy7A3MkjCAvD9jWPJmE+DbimBd+JGw7p g87VQxRaDCLp0imYSK7/FlkLkZvR8a5Y/+5WBJrMsMNxa8nUZOydv3FIU9O6Dg7L1SlP YZyXZza/fQVMOvcCjYFb0OLi717BnNKRHBwiUrXS+CW1P09P27jflMtZCElfdlWis8eM B4xJSPFc6Nm1oTwQrsl1/ks3XDtImWlZFiCR7a2IoEiYl2RyIaDeXjPgkMFHYu+ct4Tx U0CJQtzOt+MJ1ApqSFV6Y4ql7mZK7tUicGuXMvOJMPHZ8EBZhVUO6PW2oyW6/ab7PJ0I XFbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z127-v6si1258471pgb.455.2018.09.05.01.03.55; Wed, 05 Sep 2018 01:04:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727637AbeIEMbn (ORCPT + 99 others); Wed, 5 Sep 2018 08:31:43 -0400 Received: from mx2.suse.de ([195.135.220.15]:49964 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725865AbeIEMbn (ORCPT ); Wed, 5 Sep 2018 08:31:43 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id E459CAE55; Wed, 5 Sep 2018 08:02:41 +0000 (UTC) Date: Wed, 5 Sep 2018 10:02:41 +0200 (CEST) From: Jiri Kosina To: Peter Zijlstra cc: Thomas Gleixner , Ingo Molnar , Josh Poimboeuf , Andrea Arcangeli , "Woodhouse, David" , Oleg Nesterov , Tim Chen , linux-kernel@vger.kernel.org, x86@kernel.org Subject: Re: [PATCH v3 2/3] x86/speculation: apply IBPB more strictly to avoid cross-process data leak In-Reply-To: <20180905075913.GO24124@hirez.programming.kicks-ass.net> Message-ID: References: <20180905075913.GO24124@hirez.programming.kicks-ass.net> User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 5 Sep 2018, Peter Zijlstra wrote: > On Tue, Sep 04, 2018 at 06:18:55PM +0200, Thomas Gleixner wrote: > > On Tue, 4 Sep 2018, Jiri Kosina wrote: > > > if (tsk && tsk->mm && > > > tsk->mm->context.ctx_id != last_ctx_id && > > > - get_dumpable(tsk->mm) != SUID_DUMP_USER) > > > + ___ptrace_may_access(current, tsk, PTRACE_MODE_IBPB)) > > > > Uurgh. If X86_FEATURE_USE_IBPB is not enabled, then the whole > > __ptrace_may_access() overhead is just done for nothing. > > > > > indirect_branch_prediction_barrier(); > > > > This really wants to be runtime patched: > > > > if (static_cpu_has(X86_FEATURE_USE_IBPB)) > > stop_speculation(tsk, last_ctx_id); > > > > and have an inline for that: > > > > static inline void stop_speculation(struct task_struct *tsk, u64 last_ctx_id) > > { > > if (tsk && tsk->mm && tsk->mm->context.ctx_id != last_ctx_id && > > ___ptrace_may_access(current, tsk, PTRACE_MODE_IBPB)) > > indirect_branch_prediction_barrier(); > > } > > > > which also makes the whole mess readable. > > How about something like: > > if (static_cpu_has(X86_FEATURE_USE_IBPB) && need_ibpb(tsk, last_ctx_id)) > indirect_branch_predictor_barrier(); > > where: > > static inline bool need_ibpb(struct task_struct *next, u64 last_ctx_id) > { > return next && next->mm && next->mm->context.ctx_id != last_ctx_id && > __ptrace_may_access(next, PTRACE_MODE_IBPB)); > } > > I don't much like "stop_speculation" for a name here. Yeah, I did more or less that earlier today; my series currently has +static bool ibpb_needed(struct task_struct *tsk, u64 last_ctx_id) +{ + return (tsk && tsk->mm && tsk->mm->context.ctx_id != last_ctx_id && + __ptrace_may_access(tsk, PTRACE_MODE_IBPB)); +} + [ ... ] - if (tsk && tsk->mm && - tsk->mm->context.ctx_id != last_ctx_id && - get_dumpable(tsk->mm) != SUID_DUMP_USER) + if (static_cpu_has(X86_FEATURE_USE_IBPB) && + ibpb_needed(tsk, last_ctx_id)) indirect_branch_prediction_barrier(); Thanks, -- Jiri Kosina SUSE Labs