x86/speculation/l1tf: Drop the swap storage limit restriction when l1tf=off
authorMichal Hocko <mhocko@suse.com>
Tue, 13 Nov 2018 18:49:10 +0000 (19:49 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 May 2019 17:19:34 +0000 (19:19 +0200)
commit 5b5e4d623ec8a34689df98e42d038a3b594d2ff9 upstream.

Swap storage is restricted to max_swapfile_size (~16TB on x86_64) whenever
the system is deemed affected by L1TF vulnerability. Even though the limit
is quite high for most deployments it seems to be too restrictive for
deployments which are willing to live with the mitigation disabled.

We have a customer to deploy 8x 6,4TB PCIe/NVMe SSD swap devices which is
clearly out of the limit.

Drop the swap restriction when l1tf=off is specified. It also doesn't make
much sense to warn about too much memory for the l1tf mitigation when it is
forcefully disabled by the administrator.

[ tglx: Folded the documentation delta change ]

Fixes: 377eeaa8e11f ("x86/speculation/l1tf: Limit swap file size to MAX_PA/2")
Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Pavel Tatashin <pasha.tatashin@soleen.com>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: <linux-mm@kvack.org>
Link: https://lkml.kernel.org/r/20181113184910.26697-1-mhocko@kernel.org
[bwh: Backported to 4.9: adjust filenames, context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/kernel-parameters.txt
Documentation/l1tf.rst
arch/x86/kernel/cpu/bugs.c
arch/x86/mm/init.c

index a1472b48ee22b8e4ee53d5451fa3c47eb4685687..18cfc499848135d83df636e9c6ec10493253a9d4 100644 (file)
@@ -2076,6 +2076,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        off
                                Disables hypervisor mitigations and doesn't
                                emit any warnings.
+                               It also drops the swap size and available
+                               RAM limit restriction on both hypervisor and
+                               bare metal.
 
                        Default is 'flush'.
 
index b85dd80510b0262382c7a41890da5534ad09da03..9af977384168eacd8cbe621615482e782b7b05c9 100644 (file)
@@ -405,6 +405,9 @@ time with the option "l1tf=". The valid arguments for this option are:
 
   off          Disables hypervisor mitigations and doesn't emit any
                warnings.
+               It also drops the swap size and available RAM limit restrictions
+               on both hypervisor and bare metal.
+
   ============  =============================================================
 
 The default is 'flush'. For details about L1D flushing see :ref:`l1d_flush`.
@@ -576,7 +579,8 @@ Default mitigations
   The kernel default mitigations for vulnerable processors are:
 
   - PTE inversion to protect against malicious user space. This is done
-    unconditionally and cannot be controlled.
+    unconditionally and cannot be controlled. The swap storage is limited
+    to ~16TB.
 
   - L1D conditional flushing on VMENTER when EPT is enabled for
     a guest.
index 03ebc0adcd8202e50a405b1005f8091582ca3d7f..803234b1845fcb09b88d6d2918f57cf9d0eda71c 100644 (file)
@@ -775,7 +775,8 @@ static void __init l1tf_select_mitigation(void)
 #endif
 
        half_pa = (u64)l1tf_pfn_limit() << PAGE_SHIFT;
-       if (e820_any_mapped(half_pa, ULLONG_MAX - half_pa, E820_RAM)) {
+       if (l1tf_mitigation != L1TF_MITIGATION_OFF &&
+                       e820_any_mapped(half_pa, ULLONG_MAX - half_pa, E820_RAM)) {
                pr_warn("System has more than MAX_PA/2 memory. L1TF mitigation not effective.\n");
                pr_info("You may make it effective by booting the kernel with mem=%llu parameter.\n",
                                half_pa);
index 90801a8f19c9095960de95944a2e7c14a4f89fef..ce092a62fc5d271f32d9db5f7e94e3174122d036 100644 (file)
@@ -790,7 +790,7 @@ unsigned long max_swapfile_size(void)
 
        pages = generic_max_swapfile_size();
 
-       if (boot_cpu_has_bug(X86_BUG_L1TF)) {
+       if (boot_cpu_has_bug(X86_BUG_L1TF) && l1tf_mitigation != L1TF_MITIGATION_OFF) {
                /* Limit the swap file size to MAX_PA/2 for L1TF workaround */
                unsigned long long l1tf_limit = l1tf_pfn_limit();
                /*