Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp780995ybk; Sat, 9 May 2020 18:50:13 -0700 (PDT) X-Google-Smtp-Source: APiQypKtrmrpnRzKhOM4grk5oG323uoHya0u3/sLS5GxQP/+dz2OyhQ0Jda+tp+5yyMQZr0oeWwr X-Received: by 2002:a17:906:68cf:: with SMTP id y15mr7608846ejr.260.1589075412945; Sat, 09 May 2020 18:50:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589075412; cv=none; d=google.com; s=arc-20160816; b=V6XHrjjdWMALcMHVHT3k1uuGKAfoqV24/Qovx6cGW9Y3Y7KPFhNy6YufrdCGhx6W3I C8Fi+CzI5FtU6P9WuxjZ6EU1OHLgmSG6GbWZ7oVAq9uooymjZ2Ldi0AXhA4O6jo6xbII 9h1WraDHsl/OJu/MyJaazcf99sktwkB7Fh61vR8fGYCIhbqOLEiSrXiKD5f6PtpLk22j rybMIr4EpVKmihdCxKVx8BvT7JOyqYD32UvtD4ywQGySRzK+qi+yto7kVbukv9Kz7b3o NG4/iTWwrj6YTZGTDWO0puR1OKm1wYL9rEt01hi+NjbbzLAlhndBlUs03EFyL8H2Tted hHXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from:ironport-sdr:dkim-signature; bh=gfYFbOc+P+0dhlDBew6Xq8gMqB1dbCq2uZX/1pgAvH0=; b=QCOz4zcEFKwOjvBQkbNaTgwtmsq0Wb0qkioJfIAQc7nO7APcX02nZN2pMtoj+SwOLA 8H3FQgDro5sB6lnaTwGB/XlILncd6vwtdV1TWdnzWRO1dI0Qo5UOEYCRtZ8B9h4GohxY OaIR7xnDEc9D8aNk7g/VipzQwHWfOjO/u5Hg2Xo5rvprm7yPh06oFjE5Eq1u6+nmiGZE u4YEQAjBlEclyjra/gumRzz6/tifqBib4HtpftNnHzvoOd4WRdczuxZRQ9QpVrDfckiO Bcfjf45yn9Bc8vUL7tLLtnUZ2hCJnJAFBtlSzO3rvR7aENKQthokRWXFQNL+4Tnt28kL /lPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=NHL9fG7J; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dh22si1244670edb.354.2020.05.09.18.49.47; Sat, 09 May 2020 18:50:12 -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=@amazon.com header.s=amazon201209 header.b=NHL9fG7J; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728864AbgEJBsR (ORCPT + 99 others); Sat, 9 May 2020 21:48:17 -0400 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]:61591 "EHLO smtp-fw-9102.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726630AbgEJBsQ (ORCPT ); Sat, 9 May 2020 21:48:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1589075296; x=1620611296; h=from:to:cc:subject:date:message-id:mime-version; bh=gfYFbOc+P+0dhlDBew6Xq8gMqB1dbCq2uZX/1pgAvH0=; b=NHL9fG7J3WfxP2UW42p5oMVWtsmXa7e1i/P0LLwi9qAgo8iYgsNy8xsU 6/J4E0XtExJdjDO9dkVILVG2L/6VQUkupgLaEh6a/SlhBCKc7xlfWEv+X ouHf7DBppcIDh1EuYwmE8lZYdHfkfOCiduXjCn3/hoCsgvWPBcut5+nOV I=; IronPort-SDR: oXmFeTFiuRa0Hl8A/4nkJay+4qZS2e3FsxwZmg9H5NfH0suNgatoAGWcN4uGvccXT6QbJk4r+x IihQ+wVnP7WQ== X-IronPort-AV: E=Sophos;i="5.73,373,1583193600"; d="scan'208";a="42304099" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1a-715bee71.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 10 May 2020 01:48:14 +0000 Received: from EX13MTAUWA001.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan2.iad.amazon.com [10.40.159.162]) by email-inbound-relay-1a-715bee71.us-east-1.amazon.com (Postfix) with ESMTPS id 542E0A207C; Sun, 10 May 2020 01:48:09 +0000 (UTC) Received: from EX13D01UWA002.ant.amazon.com (10.43.160.74) by EX13MTAUWA001.ant.amazon.com (10.43.160.58) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 10 May 2020 01:48:09 +0000 Received: from EX13MTAUWA001.ant.amazon.com (10.43.160.58) by EX13d01UWA002.ant.amazon.com (10.43.160.74) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 10 May 2020 01:48:09 +0000 Received: from localhost (10.85.6.121) by mail-relay.amazon.com (10.43.160.118) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sun, 10 May 2020 01:48:08 +0000 From: Balbir Singh To: , CC: , , , , , , , Balbir Singh Subject: [PATCH v6 0/6] Optionally flush L1D on context switch Date: Sun, 10 May 2020 11:47:57 +1000 Message-ID: <20200510014803.12190-1-sblbir@amazon.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Provide a mechanism to flush the L1D cache on context switch. The goal is to allow tasks that are paranoid due to the recent snoop assisted data sampling vulnerabilites, to flush their L1D on being switched out. This protects their data from being snooped or leaked via side channels after the task has context switched out. Changelog v6: - Fix the complaint about variable shadowing (Reported-by: kbuild test robot ) Changelog v5: - Based on Tom's recommendation, restrict the patches to Intel CPUs only (thomas.lendacky@amd.com) - Update reviewed-by tags based on v4. Changelog v4: - Refactor the L1D flushing code even further, pages are now allocated once and never freed. Simplify the exported functions. - Change the name prefixs to be more consistent (l1d_flush_*) - Refactoring of the code done in the spirit of the comments, prctl still requires arch bits for get/set L1D flush and ofcourse in the arch switch_mm bits flushing the L1D cache. Changelog v3: - Refactor the return value of what flush_l1d_cache_hw() returns - Refactor the code, so that the generic setup bits come first (patch 3 from previous posting is now patches 3 and 4) - Move from arch_prctl() to the prctl() interface as recommend in the reviews. Changelog v2: - Fix a miss of mutex_unlock (caught by Borislav Petkov ) - Add documentation about the changes (Josh Poimboeuf ) Changelog: - Refactor the code and reuse cond_ibpb() - code bits provided by tglx - Merge mm state tracking for ibpb and l1d flush - Rename TIF_L1D_FLUSH to TIF_SPEC_FLUSH_L1D Changelog RFC: - Reuse existing code for allocation and flush - Simplify the goto logic in the actual l1d_flush function - Optimize the code path with jump labels/static functions The previous version of these patches are posted at: https://lore.kernel.org/lkml/20200504041343.9651-1-sblbir@amazon.com/ Balbir Singh (6): arch/x86/kvm: Refactor l1d flush lifecycle management arch/x86/kvm: Refactor tlbflush and l1d flush arch/x86/mm: Refactor cond_ibpb() to support other use cases arch/x86/kvm: Refactor L1D flushing Optionally flush L1D on context switch Documentation: Add L1D flushing Documentation Documentation/admin-guide/hw-vuln/index.rst | 1 + .../admin-guide/hw-vuln/l1d_flush.rst | 40 ++++++ arch/x86/include/asm/cacheflush.h | 8 ++ arch/x86/include/asm/thread_info.h | 7 +- arch/x86/include/asm/tlbflush.h | 2 +- arch/x86/kernel/Makefile | 1 + arch/x86/kernel/l1d_flush.c | 120 ++++++++++++++++++ arch/x86/kvm/vmx/vmx.c | 62 +-------- arch/x86/mm/tlb.c | 83 +++++++++--- include/uapi/linux/prctl.h | 4 + kernel/sys.c | 20 +++ 11 files changed, 266 insertions(+), 82 deletions(-) create mode 100644 Documentation/admin-guide/hw-vuln/l1d_flush.rst create mode 100644 arch/x86/kernel/l1d_flush.c -- 2.17.1