All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] Optionally flush L1D on context switch
@ 2020-04-08  9:02 Balbir Singh
  2020-04-08  9:02 ` [PATCH v3 1/5] arch/x86/kvm: Refactor l1d flush lifecycle management Balbir Singh
                   ` (4 more replies)
  0 siblings, 5 replies; 20+ messages in thread
From: Balbir Singh @ 2020-04-08  9:02 UTC (permalink / raw)
  To: tglx, linux-kernel
  Cc: jpoimboe, tony.luck, keescook, benh, x86, dave.hansen,
	Balbir Singh

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.

The core of the patches is patch 3, the rest largely refactor the code
so that common bits can be reused.

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 <bp@alien8.de>)
 - Add documentation about the changes (Josh Poimboeuf
   <jpoimboe@redhat.com>)

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 this patch posted at:

https://lore.kernel.org/lkml/20200406031946.11815-1-sblbir@amazon.com/

Balbir Singh (5):
  arch/x86/kvm: Refactor l1d flush lifecycle management
  arch/x86: Refactor tlbflush and l1d flush
  arch/x86/mm: Refactor cond_ibpb() to support other use cases
  arch/x86: Optionally flush L1D on context switch
  arch/x86: 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             |   6 +
 arch/x86/include/asm/thread_info.h            |   6 +-
 arch/x86/include/asm/tlbflush.h               |   2 +-
 arch/x86/kernel/Makefile                      |   1 +
 arch/x86/kernel/l1d_flush.c                   |  85 ++++++++++++++
 arch/x86/kvm/vmx/vmx.c                        |  56 ++-------
 arch/x86/mm/tlb.c                             | 109 ++++++++++++++----
 include/uapi/linux/prctl.h                    |   4 +
 kernel/sys.c                                  |  20 ++++
 11 files changed, 259 insertions(+), 71 deletions(-)
 create mode 100644 Documentation/admin-guide/hw-vuln/l1d_flush.rst
 create mode 100644 arch/x86/kernel/l1d_flush.c

-- 
2.17.1


^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [PATCH v3 1/5] arch/x86/kvm: Refactor l1d flush lifecycle management
@ 2020-04-13  9:49 kbuild test robot
  0 siblings, 0 replies; 20+ messages in thread
From: kbuild test robot @ 2020-04-13  9:49 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 3766 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20200408090229.16467-2-sblbir@amazon.com>
References: <20200408090229.16467-2-sblbir@amazon.com>
TO: Balbir Singh <sblbir@amazon.com>
CC: tglx(a)linutronix.de, linux-kernel(a)vger.kernel.org

Hi Balbir,

I love your patch! Perhaps something to improve:

[auto build test WARNING on kvm/linux-next]
[also build test WARNING on linus/master v5.7-rc1 next-20200413]
[cannot apply to tip/auto-latest tip/x86/mm tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Balbir-Singh/Optionally-flush-L1D-on-context-switch/20200408-192153
base:   https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
:::::: branch date: 5 days ago
:::::: commit date: 5 days ago

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>


cppcheck warnings: (new ones prefixed by >>)

>> arch/x86/kernel/l1d_flush.c:25:26: warning: 'l1d_flush_pages' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
     memset(l1d_flush_pages + i * PAGE_SIZE, i + 1,
                            ^

# https://github.com/0day-ci/linux/commit/01f030960171a1eb6e3183aa69d002464fdb4194
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 01f030960171a1eb6e3183aa69d002464fdb4194
vim +25 arch/x86/kernel/l1d_flush.c

01f030960171a1 Balbir Singh 2020-04-08   3  
01f030960171a1 Balbir Singh 2020-04-08   4  void *alloc_l1d_flush_pages(void)
01f030960171a1 Balbir Singh 2020-04-08   5  {
01f030960171a1 Balbir Singh 2020-04-08   6  	struct page *page;
01f030960171a1 Balbir Singh 2020-04-08   7  	void *l1d_flush_pages = NULL;
01f030960171a1 Balbir Singh 2020-04-08   8  	int i;
01f030960171a1 Balbir Singh 2020-04-08   9  
01f030960171a1 Balbir Singh 2020-04-08  10  	/*
01f030960171a1 Balbir Singh 2020-04-08  11  	 * This allocation for l1d_flush_pages is not tied to a VM/task's
01f030960171a1 Balbir Singh 2020-04-08  12  	 * lifetime and so should not be charged to a memcg.
01f030960171a1 Balbir Singh 2020-04-08  13  	 */
01f030960171a1 Balbir Singh 2020-04-08  14  	page = alloc_pages(GFP_KERNEL, L1D_CACHE_ORDER);
01f030960171a1 Balbir Singh 2020-04-08  15  	if (!page)
01f030960171a1 Balbir Singh 2020-04-08  16  		return NULL;
01f030960171a1 Balbir Singh 2020-04-08  17  	l1d_flush_pages = page_address(page);
01f030960171a1 Balbir Singh 2020-04-08  18  
01f030960171a1 Balbir Singh 2020-04-08  19  	/*
01f030960171a1 Balbir Singh 2020-04-08  20  	 * Initialize each page with a different pattern in
01f030960171a1 Balbir Singh 2020-04-08  21  	 * order to protect against KSM in the nested
01f030960171a1 Balbir Singh 2020-04-08  22  	 * virtualization case.
01f030960171a1 Balbir Singh 2020-04-08  23  	 */
01f030960171a1 Balbir Singh 2020-04-08  24  	for (i = 0; i < 1u << L1D_CACHE_ORDER; ++i) {
01f030960171a1 Balbir Singh 2020-04-08 @25  		memset(l1d_flush_pages + i * PAGE_SIZE, i + 1,
01f030960171a1 Balbir Singh 2020-04-08  26  				PAGE_SIZE);
01f030960171a1 Balbir Singh 2020-04-08  27  	}
01f030960171a1 Balbir Singh 2020-04-08  28  	return l1d_flush_pages;
01f030960171a1 Balbir Singh 2020-04-08  29  }
01f030960171a1 Balbir Singh 2020-04-08  30  EXPORT_SYMBOL_GPL(alloc_l1d_flush_pages);
01f030960171a1 Balbir Singh 2020-04-08  31  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2020-04-21  9:03 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-08  9:02 [PATCH v3 0/5] Optionally flush L1D on context switch Balbir Singh
2020-04-08  9:02 ` [PATCH v3 1/5] arch/x86/kvm: Refactor l1d flush lifecycle management Balbir Singh
2020-04-17 12:57   ` Thomas Gleixner
2020-04-17 22:34     ` Singh, Balbir
2020-04-08  9:02 ` [PATCH v3 2/5] arch/x86: Refactor tlbflush and l1d flush Balbir Singh
2020-04-17 13:03   ` Thomas Gleixner
2020-04-17 22:58     ` Singh, Balbir
2020-04-08  9:02 ` [PATCH v3 3/5] arch/x86/mm: Refactor cond_ibpb() to support other use cases Balbir Singh
2020-04-17 13:07   ` Thomas Gleixner
2020-04-17 23:02     ` Singh, Balbir
2020-04-18  9:59       ` Thomas Gleixner
2020-04-21  3:46         ` Singh, Balbir
2020-04-21  9:02           ` Thomas Gleixner
2020-04-08  9:02 ` [PATCH v3 4/5] arch/x86: Optionally flush L1D on context switch Balbir Singh
2020-04-17 14:41   ` Thomas Gleixner
2020-04-18  1:30     ` Singh, Balbir
2020-04-18 10:17       ` Thomas Gleixner
2020-04-20  0:24         ` Singh, Balbir
2020-04-08  9:02 ` [PATCH v3 5/5] arch/x86: Add L1D flushing Documentation Balbir Singh
  -- strict thread matches above, loose matches on Subject: below --
2020-04-13  9:49 [PATCH v3 1/5] arch/x86/kvm: Refactor l1d flush lifecycle management kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.