Received: by 2002:a05:7412:40d:b0:e2:908c:2ebd with SMTP id 13csp540296rdf; Tue, 21 Nov 2023 09:12:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IHDwAWkv2NGqPlBoWbqeSsCwifKH6gHQkZ+J94prQpj8l7wrJhkYsx6J7N0Ya8XY6bBEyVr X-Received: by 2002:a05:6a20:a3a0:b0:18a:be:9ccc with SMTP id w32-20020a056a20a3a000b0018a00be9cccmr5731570pzk.1.1700586747777; Tue, 21 Nov 2023 09:12:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700586747; cv=none; d=google.com; s=arc-20160816; b=a0QkrTGpUtzX31ibk6bxQoWcPczrB4liE2o/KHyz4ykGSCtl8PM7iuEyXgDwE/3Gw0 P9lG1TamuOzAFAXPjKcJfG84NoVZAyV47WajgsDXpmLDmAcvGdAeyVDFm+/WlECCIyU0 Wz0vEEnqFeVPQ/7m2QoKUpNTOM4qjJEgncwKtnRUVCJcQ7vjyENg8VPaBO1LJgA4m8bg mqUqKNVEmoZe/kPS2hRX7iCEnt8Gv/FnifCvf2UlKlp5kX7uXy8t6qtJiHdULdjd+Tgq UgGqjpRu3ga1330wbRH/XEz1aR4QKZlzdbL4+prZdjPKi+RyBJVRiKu6jzqpGHjUyRto Bd+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=ZDqY6LIVmpxgbya3l2Nab39btyfIaWzyAEzG5sT0dtA=; fh=Gas4LCE1B1UaWNP/xjrTqjIkkrJrhlLVx7tGCuedev8=; b=f/xbjZrf+3hm5jzFzXDdKPfpHwH+JIsvtALffzFd4wSzLFr+OWyO5nbam71Us7ZVnO tYoJalyp6hX2s3lh6jBjtLAZCWytg/Sbwe2bWk2gwXtJphUdWtlKVrMpbsmjeJnN4dm4 YywNJcSnDTrAtBmXjqYk66t5VDsMJritusJ460vI6Ui4trS86/1lZu+uWjLTkAiUJLPM dL+Bi1Zsk7Keylm01tsBdQykouqCCYkUJMx5E8ZwtkhmPElh8XLvhQ/OcS23LD8dTM6T HQLWgSY0iMe3WXlzz1QKS204mTLoNH0nkg90znYXj9gnpgNAPdPNnEoLBBhyb3dum+IE fn2g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id e6-20020a056a001a8600b006bf531dd685si11186965pfv.64.2023.11.21.09.12.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 09:12:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id B28E780263C2; Tue, 21 Nov 2023 09:10:10 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230399AbjKURJu (ORCPT + 99 others); Tue, 21 Nov 2023 12:09:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230340AbjKURJt (ORCPT ); Tue, 21 Nov 2023 12:09:49 -0500 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC07210E; Tue, 21 Nov 2023 09:09:43 -0800 (PST) Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-548ce39b101so3047612a12.2; Tue, 21 Nov 2023 09:09:43 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700586582; x=1701191382; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZDqY6LIVmpxgbya3l2Nab39btyfIaWzyAEzG5sT0dtA=; b=IbCn2yFewox/9WR3VkSjZNXYZr87pBIZIUg2QjaRRPvuhqHzDzLuhvZRX6PHX/6D0a sDuGPRdeTuwxxeD0qCgQG1iW4NOTfILOmCVlNCfm53i9byGeNPG52ZX2Vka5JyKKiY2e kxOGfGHR0B1WsdXnR6WsCb5ADP9ub7BsNjViU5iEaQD8s3vOVV3to33mGvgokADh3m1O EWFTfFYlQnkorbw7U4wcdsbFa1A9OGTsXJNptbIXrqLb++6XfbL/3JbKqq0Af1wofTR+ SPvl08OlXnTJQNIaJRVQoHduTCRo9DgK8Y0L+T69B/XbFjJiptF20GBhYuPmWzQWIDnn s/fQ== X-Gm-Message-State: AOJu0YxBmJ13O5ea68EeVdFYub5uMNA5YYg/SFmhWSYP2TjQB4+f/F65 grxwhlV+KrUvhOjVs91lX2E= X-Received: by 2002:a17:906:10b:b0:9c7:59d1:b2ce with SMTP id 11-20020a170906010b00b009c759d1b2cemr8410617eje.5.1700586581954; Tue, 21 Nov 2023 09:09:41 -0800 (PST) Received: from localhost (fwdproxy-cln-027.fbsv.net. [2a03:2880:31ff:1b::face:b00c]) by smtp.gmail.com with ESMTPSA id h4-20020a170906590400b00997d7aa59fasm5560744ejq.14.2023.11.21.09.09.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 09:09:41 -0800 (PST) From: Breno Leitao To: jpoimboe@kernel.org, mingo@redhat.com, tglx@linutronix.de, bp@alien8.de Cc: x86@kernel.org, leit@meta.com, linux-kernel@vger.kernel.org, pawan.kumar.gupta@linux.intel.com, bpf@vger.kernel.org (open list:BPF [MISC]:Keyword:(?:\b|_)bpf(?:\b|_)) Subject: [PATCH v6 00/13] x86/bugs: Add a separate config for each mitigation Date: Tue, 21 Nov 2023 08:07:27 -0800 Message-Id: <20231121160740.1249350-1-leitao@debian.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 21 Nov 2023 09:10:11 -0800 (PST) Currently, the CONFIG_SPECULATION_MITIGATIONS is halfway populated, where some mitigations have entries in Kconfig, and they could be modified, while others mitigations do not have Kconfig entries, and could not be controlled at build time. The fact of having a fine grained control can help in a few ways: 1) Users can choose and pick only mitigations that are important for their workloads. 2) Users and developers can choose to disable mitigations that mangle the assembly code generation, making it hard to read. 3) Separate configs for just source code readability, so that we see *which* butt-ugly piece of crap code is for what reason. Important to say, if a mitigation is disabled at compilation time, it could be enabled at runtime using kernel command line arguments. Discussion about this approach: https://lore.kernel.org/all/CAHk-=wjTHeQjsqtHcBGvy9TaJQ5uAm5HrCDuOD9v7qA9U1Xr4w@mail.gmail.com/ and https://lore.kernel.org/lkml/20231011044252.42bplzjsam3qsasz@treble/ In order to get the missing mitigations, some clean up was done. 1) Get a namespace for mitigations, prepending MITIGATION to the Kconfig entries. 2) Adding the missing mitigations, so, the mitigations have entries in the Kconfig that could be easily configure by the user. With this patchset applied, all configs have an individual entry under CONFIG_SPECULATION_MITIGATIONS, and all of them starts with CONFIG_MITIGATION. Changelog --------- V1: * Creates a way to mitigate all (or none) hardware bugs V2: * Create KCONFIGs entries only some hardware bugs (MDS, TAA, MMIO) V3: * Expand the mitigations KCONFIGs to all hardware bugs that are Linux mitigates. V4: * Patch rebase. * Better documentation about the reasons of this decision. V5: * Create a "MITIGATION" Kconfig namespace for the entries mitigating hardware bugs. * Add GDS to the set of mitigations that are being covered. * Reduce the ifdefs in the code by leveraging conditionals with omitted operands. V6: * Reference documentation RST files from Kconfig entries * Fix some grammar mistakes and Kconfig dependencies * Now spectre v2 user depends on CONFIG_MITIGATION_SPECTRE_V2. See patch "spectre_v2_user default mode depends on Kconfig" Breno Leitao (13): x86/bugs: Rename GDS_FORCE_MITIGATION to MITIGATION_GDS_FORCE x86/bugs: Rename CPU_IBPB_ENTRY to MITIGATION_IBPB_ENTRY x86/bugs: Rename CALL_DEPTH_TRACKING to MITIGATION_CALL_DEPTH_TRACKING x86/bugs: Rename PAGE_TABLE_ISOLATION to MITIGATION_PAGE_TABLE_ISOLATION x86/bugs: Rename RETPOLINE to MITIGATION_RETPOLINE x86/bugs: Rename SLS to CONFIG_MITIGATION_SLS x86/bugs: Rename CPU_UNRET_ENTRY to MITIGATION_UNRET_ENTRY x86/bugs: Rename CPU_IBRS_ENTRY to MITIGATION_IBRS_ENTRY x86/bugs: Rename CPU_SRSO to MITIGATION_SRSO x86/bugs: Rename RETHUNK to MITIGATION_RETHUNK x86/bugs: Create a way to disable GDS mitigation x86/bugs: spectre_v2_user default mode depends on Kconfig x86/bugs: Add a separate config for missing mitigation Documentation/admin-guide/hw-vuln/spectre.rst | 8 +- .../admin-guide/kernel-parameters.txt | 4 +- Documentation/arch/x86/pti.rst | 6 +- arch/x86/Kconfig | 151 +++++++++++++++--- arch/x86/Makefile | 8 +- arch/x86/boot/compressed/ident_map_64.c | 4 +- arch/x86/configs/i386_defconfig | 2 +- arch/x86/entry/calling.h | 8 +- arch/x86/entry/entry_64.S | 2 +- arch/x86/entry/vdso/Makefile | 4 +- arch/x86/include/asm/current.h | 2 +- arch/x86/include/asm/disabled-features.h | 10 +- arch/x86/include/asm/linkage.h | 16 +- arch/x86/include/asm/nospec-branch.h | 30 ++-- arch/x86/include/asm/pgalloc.h | 2 +- arch/x86/include/asm/pgtable-3level.h | 2 +- arch/x86/include/asm/pgtable.h | 18 +-- arch/x86/include/asm/pgtable_64.h | 3 +- arch/x86/include/asm/processor-flags.h | 2 +- arch/x86/include/asm/pti.h | 2 +- arch/x86/include/asm/static_call.h | 2 +- arch/x86/kernel/alternative.c | 14 +- arch/x86/kernel/asm-offsets.c | 2 +- arch/x86/kernel/cpu/amd.c | 2 +- arch/x86/kernel/cpu/bugs.c | 98 +++++++----- arch/x86/kernel/dumpstack.c | 2 +- arch/x86/kernel/ftrace.c | 3 +- arch/x86/kernel/head_32.S | 4 +- arch/x86/kernel/head_64.S | 2 +- arch/x86/kernel/kprobes/opt.c | 2 +- arch/x86/kernel/ldt.c | 8 +- arch/x86/kernel/static_call.c | 2 +- arch/x86/kernel/vmlinux.lds.S | 10 +- arch/x86/kvm/mmu/mmu.c | 2 +- arch/x86/kvm/mmu/mmu_internal.h | 2 +- arch/x86/kvm/svm/svm.c | 2 +- arch/x86/kvm/svm/vmenter.S | 4 +- arch/x86/kvm/vmx/vmx.c | 2 +- arch/x86/lib/Makefile | 2 +- arch/x86/lib/retpoline.S | 26 +-- arch/x86/mm/Makefile | 2 +- arch/x86/mm/debug_pagetables.c | 4 +- arch/x86/mm/dump_pagetables.c | 4 +- arch/x86/mm/pgtable.c | 4 +- arch/x86/mm/tlb.c | 10 +- arch/x86/net/bpf_jit_comp.c | 4 +- arch/x86/net/bpf_jit_comp32.c | 2 +- arch/x86/purgatory/Makefile | 2 +- include/linux/compiler-gcc.h | 2 +- include/linux/indirect_call_wrapper.h | 2 +- include/linux/module.h | 2 +- include/linux/objtool.h | 2 +- include/linux/pti.h | 2 +- include/net/netfilter/nf_tables_core.h | 2 +- include/net/tc_wrapper.h | 2 +- kernel/trace/ring_buffer.c | 2 +- net/netfilter/Makefile | 2 +- net/netfilter/nf_tables_core.c | 6 +- net/netfilter/nft_ct.c | 4 +- net/netfilter/nft_lookup.c | 2 +- net/sched/sch_api.c | 2 +- scripts/Makefile.lib | 8 +- scripts/Makefile.vmlinux_o | 2 +- scripts/generate_rust_target.rs | 2 +- scripts/mod/modpost.c | 2 +- .../arch/x86/include/asm/disabled-features.h | 10 +- 66 files changed, 344 insertions(+), 219 deletions(-) -- 2.34.1