public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Tao Zhang <tao1.zhang@linux.intel.com>,
	Pawan Gupta <pawan.kumar.gupta@linux.intel.com>,
	Dave Hansen <dave.hansen@linux.intel.com>
Subject: [PATCH 6.14 197/197] selftest/x86/bugs: Add selftests for ITS
Date: Mon, 12 May 2025 19:40:47 +0200	[thread overview]
Message-ID: <20250512172052.439043944@linuxfoundation.org> (raw)
In-Reply-To: <20250512172044.326436266@linuxfoundation.org>

6.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>

commit 7a9b709e7cc5ce1ffb84ce07bf6d157e1de758df upstream.

Below are the tests added for Indirect Target Selection (ITS):

- its_sysfs.py - Check if sysfs reflects the correct mitigation status for
  the mitigation selected via the kernel cmdline.

- its_permutations.py - tests mitigation selection with cmdline
  permutations with other bugs like spectre_v2 and retbleed.

- its_indirect_alignment.py - verifies that for addresses in
  .retpoline_sites section that belong to lower half of cacheline are
  patched to ITS-safe thunk. Typical output looks like below:

  Site 49: function symbol: __x64_sys_restart_syscall+0x1f <0xffffffffbb1509af>
  #     vmlinux: 0xffffffff813509af:    jmp     0xffffffff81f5a8e0
  #     kcore:   0xffffffffbb1509af:    jmpq    *%rax
  #     ITS thunk NOT expected for site 49
  #     PASSED: Found *%rax
  #
  Site 50: function symbol: __resched_curr+0xb0 <0xffffffffbb181910>
  #     vmlinux: 0xffffffff81381910:    jmp     0xffffffff81f5a8e0
  #     kcore:   0xffffffffbb181910:    jmp     0xffffffffc02000fc
  #     ITS thunk expected for site 50
  #     PASSED: Found 0xffffffffc02000fc -> jmpq *%rax <scattered-thunk?>

- its_ret_alignment.py - verifies that for addresses in .return_sites
  section that belong to lower half of cacheline are patched to
  its_return_thunk. Typical output looks like below:

  Site 97: function symbol: collect_event+0x48 <0xffffffffbb007f18>
  #     vmlinux: 0xffffffff81207f18:    jmp     0xffffffff81f5b500
  #     kcore:   0xffffffffbb007f18:    jmp     0xffffffffbbd5b560
  #     PASSED: Found jmp 0xffffffffbbd5b560 <its_return_thunk>
  #
  Site 98: function symbol: collect_event+0xa4 <0xffffffffbb007f74>
  #     vmlinux: 0xffffffff81207f74:    jmp     0xffffffff81f5b500
  #     kcore:   0xffffffffbb007f74:    retq
  #     PASSED: Found retq

Some of these tests have dependency on tools like virtme-ng[1] and drgn[2].
When the dependencies are not met, the test will be skipped.

[1] https://github.com/arighi/virtme-ng
[2] https://github.com/osandov/drgn

Co-developed-by: Tao Zhang <tao1.zhang@linux.intel.com>
Signed-off-by: Tao Zhang <tao1.zhang@linux.intel.com>
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 tools/testing/selftests/Makefile                           |    1 
 tools/testing/selftests/x86/bugs/Makefile                  |    3 
 tools/testing/selftests/x86/bugs/common.py                 |  164 +++++++++++++
 tools/testing/selftests/x86/bugs/its_indirect_alignment.py |  150 +++++++++++
 tools/testing/selftests/x86/bugs/its_permutations.py       |  109 ++++++++
 tools/testing/selftests/x86/bugs/its_ret_alignment.py      |  139 +++++++++++
 tools/testing/selftests/x86/bugs/its_sysfs.py              |   65 +++++
 7 files changed, 631 insertions(+)
 create mode 100644 tools/testing/selftests/x86/bugs/Makefile
 create mode 100755 tools/testing/selftests/x86/bugs/common.py
 create mode 100755 tools/testing/selftests/x86/bugs/its_indirect_alignment.py
 create mode 100755 tools/testing/selftests/x86/bugs/its_permutations.py
 create mode 100755 tools/testing/selftests/x86/bugs/its_ret_alignment.py
 create mode 100755 tools/testing/selftests/x86/bugs/its_sysfs.py

--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -118,6 +118,7 @@ TARGETS += user_events
 TARGETS += vDSO
 TARGETS += mm
 TARGETS += x86
+TARGETS += x86/bugs
 TARGETS += zram
 #Please keep the TARGETS list alphabetically sorted
 # Run "make quicktest=1 run_tests" or
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/Makefile
@@ -0,0 +1,3 @@
+TEST_PROGS := its_sysfs.py its_permutations.py its_indirect_alignment.py its_ret_alignment.py
+TEST_FILES := common.py
+include ../../lib.mk
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/common.py
@@ -0,0 +1,164 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (c) 2025 Intel Corporation
+#
+# This contains kselftest framework adapted common functions for testing
+# mitigation for x86 bugs.
+
+import os, sys, re, shutil
+
+sys.path.insert(0, '../../kselftest')
+import ksft
+
+def read_file(path):
+    if not os.path.exists(path):
+        return None
+    with open(path, 'r') as file:
+        return file.read().strip()
+
+def cpuinfo_has(arg):
+    cpuinfo = read_file('/proc/cpuinfo')
+    if arg in cpuinfo:
+        return True
+    return False
+
+def cmdline_has(arg):
+    cmdline = read_file('/proc/cmdline')
+    if arg in cmdline:
+        return True
+    return False
+
+def cmdline_has_either(args):
+    cmdline = read_file('/proc/cmdline')
+    for arg in args:
+        if arg in cmdline:
+            return True
+    return False
+
+def cmdline_has_none(args):
+    return not cmdline_has_either(args)
+
+def cmdline_has_all(args):
+    cmdline = read_file('/proc/cmdline')
+    for arg in args:
+        if arg not in cmdline:
+            return False
+    return True
+
+def get_sysfs(bug):
+    return read_file("/sys/devices/system/cpu/vulnerabilities/" + bug)
+
+def sysfs_has(bug, mitigation):
+    status = get_sysfs(bug)
+    if mitigation in status:
+        return True
+    return False
+
+def sysfs_has_either(bugs, mitigations):
+    for bug in bugs:
+        for mitigation in mitigations:
+            if sysfs_has(bug, mitigation):
+                return True
+    return False
+
+def sysfs_has_none(bugs, mitigations):
+    return not sysfs_has_either(bugs, mitigations)
+
+def sysfs_has_all(bugs, mitigations):
+    for bug in bugs:
+        for mitigation in mitigations:
+            if not sysfs_has(bug, mitigation):
+                return False
+    return True
+
+def bug_check_pass(bug, found):
+    ksft.print_msg(f"\nFound: {found}")
+    # ksft.print_msg(f"\ncmdline: {read_file('/proc/cmdline')}")
+    ksft.test_result_pass(f'{bug}: {found}')
+
+def bug_check_fail(bug, found, expected):
+    ksft.print_msg(f'\nFound:\t {found}')
+    ksft.print_msg(f'Expected:\t {expected}')
+    ksft.print_msg(f"\ncmdline: {read_file('/proc/cmdline')}")
+    ksft.test_result_fail(f'{bug}: {found}')
+
+def bug_status_unknown(bug, found):
+    ksft.print_msg(f'\nUnknown status: {found}')
+    ksft.print_msg(f"\ncmdline: {read_file('/proc/cmdline')}")
+    ksft.test_result_fail(f'{bug}: {found}')
+
+def basic_checks_sufficient(bug, mitigation):
+    if not mitigation:
+        bug_status_unknown(bug, "None")
+        return True
+    elif mitigation == "Not affected":
+        ksft.test_result_pass(bug)
+        return True
+    elif mitigation == "Vulnerable":
+        if cmdline_has_either([f'{bug}=off', 'mitigations=off']):
+            bug_check_pass(bug, mitigation)
+            return True
+    return False
+
+def get_section_info(vmlinux, section_name):
+    from elftools.elf.elffile import ELFFile
+    with open(vmlinux, 'rb') as f:
+        elffile = ELFFile(f)
+        section = elffile.get_section_by_name(section_name)
+        if section is None:
+            ksft.print_msg("Available sections in vmlinux:")
+            for sec in elffile.iter_sections():
+                ksft.print_msg(sec.name)
+            raise ValueError(f"Section {section_name} not found in {vmlinux}")
+        return section['sh_addr'], section['sh_offset'], section['sh_size']
+
+def get_patch_sites(vmlinux, offset, size):
+    import struct
+    output = []
+    with open(vmlinux, 'rb') as f:
+        f.seek(offset)
+        i = 0
+        while i < size:
+            data = f.read(4)  # s32
+            if not data:
+                break
+            sym_offset = struct.unpack('<i', data)[0] + i
+            i += 4
+            output.append(sym_offset)
+    return output
+
+def get_instruction_from_vmlinux(elffile, section, virtual_address, target_address):
+    from capstone import Cs, CS_ARCH_X86, CS_MODE_64
+    section_start = section['sh_addr']
+    section_end = section_start + section['sh_size']
+
+    if not (section_start <= target_address < section_end):
+        return None
+
+    offset = target_address - section_start
+    code = section.data()[offset:offset + 16]
+
+    cap = init_capstone()
+    for instruction in cap.disasm(code, target_address):
+        if instruction.address == target_address:
+            return instruction
+    return None
+
+def init_capstone():
+    from capstone import Cs, CS_ARCH_X86, CS_MODE_64, CS_OPT_SYNTAX_ATT
+    cap = Cs(CS_ARCH_X86, CS_MODE_64)
+    cap.syntax = CS_OPT_SYNTAX_ATT
+    return cap
+
+def get_runtime_kernel():
+    import drgn
+    return drgn.program_from_kernel()
+
+def check_dependencies_or_skip(modules, script_name="unknown test"):
+    for mod in modules:
+        try:
+            __import__(mod)
+        except ImportError:
+            ksft.test_result_skip(f"Skipping {script_name}: missing module '{mod}'")
+            ksft.finished()
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/its_indirect_alignment.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (c) 2025 Intel Corporation
+#
+# Test for indirect target selection (ITS) mitigation.
+#
+# Test if indirect CALL/JMP are correctly patched by evaluating
+# the vmlinux .retpoline_sites in /proc/kcore.
+
+# Install dependencies
+# add-apt-repository ppa:michel-slm/kernel-utils
+# apt update
+# apt install -y python3-drgn python3-pyelftools python3-capstone
+#
+# Best to copy the vmlinux at a standard location:
+# mkdir -p /usr/lib/debug/lib/modules/$(uname -r)
+# cp $VMLINUX /usr/lib/debug/lib/modules/$(uname -r)/vmlinux
+#
+# Usage: ./its_indirect_alignment.py [vmlinux]
+
+import os, sys, argparse
+from pathlib import Path
+
+this_dir = os.path.dirname(os.path.realpath(__file__))
+sys.path.insert(0, this_dir + '/../../kselftest')
+import ksft
+import common as c
+
+bug = "indirect_target_selection"
+
+mitigation = c.get_sysfs(bug)
+if not mitigation or "Aligned branch/return thunks" not in mitigation:
+    ksft.test_result_skip("Skipping its_indirect_alignment.py: Aligned branch/return thunks not enabled")
+    ksft.finished()
+
+if c.sysfs_has("spectre_v2", "Retpolines"):
+    ksft.test_result_skip("Skipping its_indirect_alignment.py: Retpolines deployed")
+    ksft.finished()
+
+c.check_dependencies_or_skip(['drgn', 'elftools', 'capstone'], script_name="its_indirect_alignment.py")
+
+from elftools.elf.elffile import ELFFile
+from drgn.helpers.common.memory import identify_address
+
+cap = c.init_capstone()
+
+if len(os.sys.argv) > 1:
+    arg_vmlinux = os.sys.argv[1]
+    if not os.path.exists(arg_vmlinux):
+        ksft.test_result_fail(f"its_indirect_alignment.py: vmlinux not found at argument path: {arg_vmlinux}")
+        ksft.exit_fail()
+    os.makedirs(f"/usr/lib/debug/lib/modules/{os.uname().release}", exist_ok=True)
+    os.system(f'cp {arg_vmlinux} /usr/lib/debug/lib/modules/$(uname -r)/vmlinux')
+
+vmlinux = f"/usr/lib/debug/lib/modules/{os.uname().release}/vmlinux"
+if not os.path.exists(vmlinux):
+    ksft.test_result_fail(f"its_indirect_alignment.py: vmlinux not found at {vmlinux}")
+    ksft.exit_fail()
+
+ksft.print_msg(f"Using vmlinux: {vmlinux}")
+
+retpolines_start_vmlinux, retpolines_sec_offset, size = c.get_section_info(vmlinux, '.retpoline_sites')
+ksft.print_msg(f"vmlinux: Section .retpoline_sites (0x{retpolines_start_vmlinux:x}) found at 0x{retpolines_sec_offset:x} with size 0x{size:x}")
+
+sites_offset = c.get_patch_sites(vmlinux, retpolines_sec_offset, size)
+total_retpoline_tests = len(sites_offset)
+ksft.print_msg(f"Found {total_retpoline_tests} retpoline sites")
+
+prog = c.get_runtime_kernel()
+retpolines_start_kcore = prog.symbol('__retpoline_sites').address
+ksft.print_msg(f'kcore: __retpoline_sites: 0x{retpolines_start_kcore:x}')
+
+x86_indirect_its_thunk_r15 = prog.symbol('__x86_indirect_its_thunk_r15').address
+ksft.print_msg(f'kcore: __x86_indirect_its_thunk_r15: 0x{x86_indirect_its_thunk_r15:x}')
+
+tests_passed = 0
+tests_failed = 0
+tests_unknown = 0
+
+with open(vmlinux, 'rb') as f:
+    elffile = ELFFile(f)
+    text_section = elffile.get_section_by_name('.text')
+
+    for i in range(0, len(sites_offset)):
+        site = retpolines_start_kcore + sites_offset[i]
+        vmlinux_site = retpolines_start_vmlinux + sites_offset[i]
+        passed = unknown = failed = False
+        try:
+            vmlinux_insn = c.get_instruction_from_vmlinux(elffile, text_section, text_section['sh_addr'], vmlinux_site)
+            kcore_insn = list(cap.disasm(prog.read(site, 16), site))[0]
+            operand = kcore_insn.op_str
+            insn_end = site + kcore_insn.size - 1 # TODO handle Jcc.32 __x86_indirect_thunk_\reg
+            safe_site = insn_end & 0x20
+            site_status = "" if safe_site else "(unsafe)"
+
+            ksft.print_msg(f"\nSite {i}: {identify_address(prog, site)} <0x{site:x}> {site_status}")
+            ksft.print_msg(f"\tvmlinux: 0x{vmlinux_insn.address:x}:\t{vmlinux_insn.mnemonic}\t{vmlinux_insn.op_str}")
+            ksft.print_msg(f"\tkcore:   0x{kcore_insn.address:x}:\t{kcore_insn.mnemonic}\t{kcore_insn.op_str}")
+
+            if (site & 0x20) ^ (insn_end & 0x20):
+                ksft.print_msg(f"\tSite at safe/unsafe boundary: {str(kcore_insn.bytes)} {kcore_insn.mnemonic} {operand}")
+            if safe_site:
+                tests_passed += 1
+                passed = True
+                ksft.print_msg(f"\tPASSED: At safe address")
+                continue
+
+            if operand.startswith('0xffffffff'):
+                thunk = int(operand, 16)
+                if thunk > x86_indirect_its_thunk_r15:
+                    insn_at_thunk = list(cap.disasm(prog.read(thunk, 16), thunk))[0]
+                    operand += ' -> ' + insn_at_thunk.mnemonic + ' ' + insn_at_thunk.op_str + ' <dynamic-thunk?>'
+                    if 'jmp' in insn_at_thunk.mnemonic and thunk & 0x20:
+                        ksft.print_msg(f"\tPASSED: Found {operand} at safe address")
+                        passed = True
+                if not passed:
+                    if kcore_insn.operands[0].type == capstone.CS_OP_IMM:
+                        operand += ' <' + prog.symbol(int(operand, 16)) + '>'
+                        if '__x86_indirect_its_thunk_' in operand:
+                            ksft.print_msg(f"\tPASSED: Found {operand}")
+                        else:
+                            ksft.print_msg(f"\tPASSED: Found direct branch: {kcore_insn}, ITS thunk not required.")
+                        passed = True
+                    else:
+                        unknown = True
+            if passed:
+                tests_passed += 1
+            elif unknown:
+                ksft.print_msg(f"UNKNOWN: unexpected operand: {kcore_insn}")
+                tests_unknown += 1
+            else:
+                ksft.print_msg(f'\t************* FAILED *************')
+                ksft.print_msg(f"\tFound {kcore_insn.bytes} {kcore_insn.mnemonic} {operand}")
+                ksft.print_msg(f'\t**********************************')
+                tests_failed += 1
+        except Exception as e:
+            ksft.print_msg(f"UNKNOWN: An unexpected error occurred: {e}")
+            tests_unknown += 1
+
+ksft.print_msg(f"\n\nSummary:")
+ksft.print_msg(f"PASS:    \t{tests_passed} \t/ {total_retpoline_tests}")
+ksft.print_msg(f"FAIL:    \t{tests_failed} \t/ {total_retpoline_tests}")
+ksft.print_msg(f"UNKNOWN: \t{tests_unknown} \t/ {total_retpoline_tests}")
+
+if tests_failed == 0:
+    ksft.test_result_pass("All ITS return thunk sites passed")
+else:
+    ksft.test_result_fail(f"{tests_failed} ITS return thunk sites failed")
+ksft.finished()
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/its_permutations.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (c) 2025 Intel Corporation
+#
+# Test for indirect target selection (ITS) cmdline permutations with other bugs
+# like spectre_v2 and retbleed.
+
+import os, sys, subprocess, itertools, re, shutil
+
+test_dir = os.path.dirname(os.path.realpath(__file__))
+sys.path.insert(0, test_dir + '/../../kselftest')
+import ksft
+import common as c
+
+bug = "indirect_target_selection"
+mitigation = c.get_sysfs(bug)
+
+if not mitigation or "Not affected" in mitigation:
+    ksft.test_result_skip("Skipping its_permutations.py: not applicable")
+    ksft.finished()
+
+if shutil.which('vng') is None:
+    ksft.test_result_skip("Skipping its_permutations.py: virtme-ng ('vng') not found in PATH.")
+    ksft.finished()
+
+TEST = f"{test_dir}/its_sysfs.py"
+default_kparam = ['clearcpuid=hypervisor', 'panic=5', 'panic_on_warn=1', 'oops=panic', 'nmi_watchdog=1', 'hung_task_panic=1']
+
+DEBUG = " -v "
+
+# Install dependencies
+# https://github.com/arighi/virtme-ng
+# apt install virtme-ng
+BOOT_CMD = f"vng --run {test_dir}/../../../../../arch/x86/boot/bzImage "
+#BOOT_CMD += DEBUG
+
+bug = "indirect_target_selection"
+
+input_options = {
+    'indirect_target_selection'     : ['off', 'on', 'stuff', 'vmexit'],
+    'retbleed'                      : ['off', 'stuff', 'auto'],
+    'spectre_v2'                    : ['off', 'on', 'eibrs', 'retpoline', 'ibrs', 'eibrs,retpoline'],
+}
+
+def pretty_print(output):
+    OKBLUE = '\033[94m'
+    OKGREEN = '\033[92m'
+    WARNING = '\033[93m'
+    FAIL = '\033[91m'
+    ENDC = '\033[0m'
+    BOLD = '\033[1m'
+
+    # Define patterns and their corresponding colors
+    patterns = {
+        r"^ok \d+": OKGREEN,
+        r"^not ok \d+": FAIL,
+        r"^# Testing .*": OKBLUE,
+        r"^# Found: .*": WARNING,
+        r"^# Totals: .*": BOLD,
+        r"pass:([1-9]\d*)": OKGREEN,
+        r"fail:([1-9]\d*)": FAIL,
+        r"skip:([1-9]\d*)": WARNING,
+    }
+
+    # Apply colors based on patterns
+    for pattern, color in patterns.items():
+        output = re.sub(pattern, lambda match: f"{color}{match.group(0)}{ENDC}", output, flags=re.MULTILINE)
+
+    print(output)
+
+combinations = list(itertools.product(*input_options.values()))
+ksft.print_header()
+ksft.set_plan(len(combinations))
+
+logs = ""
+
+for combination in combinations:
+    append = ""
+    log = ""
+    for p in default_kparam:
+        append += f' --append={p}'
+    command = BOOT_CMD + append
+    test_params = ""
+    for i, key in enumerate(input_options.keys()):
+        param = f'{key}={combination[i]}'
+        test_params += f' {param}'
+        command += f" --append={param}"
+    command += f" -- {TEST}"
+    test_name = f"{bug} {test_params}"
+    pretty_print(f'# Testing {test_name}')
+    t =  subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    t.wait()
+    output, _ = t.communicate()
+    if t.returncode == 0:
+        ksft.test_result_pass(test_name)
+    else:
+        ksft.test_result_fail(test_name)
+    output = output.decode()
+    log += f" {output}"
+    pretty_print(log)
+    logs += output + "\n"
+
+# Optionally use tappy to parse the output
+# apt install python3-tappy
+with open("logs.txt", "w") as f:
+    f.write(logs)
+
+ksft.finished()
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/its_ret_alignment.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (c) 2025 Intel Corporation
+#
+# Test for indirect target selection (ITS) mitigation.
+#
+# Tests if the RETs are correctly patched by evaluating the
+# vmlinux .return_sites in /proc/kcore.
+#
+# Install dependencies
+# add-apt-repository ppa:michel-slm/kernel-utils
+# apt update
+# apt install -y python3-drgn python3-pyelftools python3-capstone
+#
+# Run on target machine
+# mkdir -p /usr/lib/debug/lib/modules/$(uname -r)
+# cp $VMLINUX /usr/lib/debug/lib/modules/$(uname -r)/vmlinux
+#
+# Usage: ./its_ret_alignment.py
+
+import os, sys, argparse
+from pathlib import Path
+
+this_dir = os.path.dirname(os.path.realpath(__file__))
+sys.path.insert(0, this_dir + '/../../kselftest')
+import ksft
+import common as c
+
+bug = "indirect_target_selection"
+mitigation = c.get_sysfs(bug)
+if not mitigation or "Aligned branch/return thunks" not in mitigation:
+    ksft.test_result_skip("Skipping its_ret_alignment.py: Aligned branch/return thunks not enabled")
+    ksft.finished()
+
+c.check_dependencies_or_skip(['drgn', 'elftools', 'capstone'], script_name="its_ret_alignment.py")
+
+from elftools.elf.elffile import ELFFile
+from drgn.helpers.common.memory import identify_address
+
+cap = c.init_capstone()
+
+if len(os.sys.argv) > 1:
+    arg_vmlinux = os.sys.argv[1]
+    if not os.path.exists(arg_vmlinux):
+        ksft.test_result_fail(f"its_ret_alignment.py: vmlinux not found at user-supplied path: {arg_vmlinux}")
+        ksft.exit_fail()
+    os.makedirs(f"/usr/lib/debug/lib/modules/{os.uname().release}", exist_ok=True)
+    os.system(f'cp {arg_vmlinux} /usr/lib/debug/lib/modules/$(uname -r)/vmlinux')
+
+vmlinux = f"/usr/lib/debug/lib/modules/{os.uname().release}/vmlinux"
+if not os.path.exists(vmlinux):
+    ksft.test_result_fail(f"its_ret_alignment.py: vmlinux not found at {vmlinux}")
+    ksft.exit_fail()
+
+ksft.print_msg(f"Using vmlinux: {vmlinux}")
+
+rethunks_start_vmlinux, rethunks_sec_offset, size = c.get_section_info(vmlinux, '.return_sites')
+ksft.print_msg(f"vmlinux: Section .return_sites (0x{rethunks_start_vmlinux:x}) found at 0x{rethunks_sec_offset:x} with size 0x{size:x}")
+
+sites_offset = c.get_patch_sites(vmlinux, rethunks_sec_offset, size)
+total_rethunk_tests = len(sites_offset)
+ksft.print_msg(f"Found {total_rethunk_tests} rethunk sites")
+
+prog = c.get_runtime_kernel()
+rethunks_start_kcore = prog.symbol('__return_sites').address
+ksft.print_msg(f'kcore: __rethunk_sites: 0x{rethunks_start_kcore:x}')
+
+its_return_thunk = prog.symbol('its_return_thunk').address
+ksft.print_msg(f'kcore: its_return_thunk: 0x{its_return_thunk:x}')
+
+tests_passed = 0
+tests_failed = 0
+tests_unknown = 0
+tests_skipped = 0
+
+with open(vmlinux, 'rb') as f:
+    elffile = ELFFile(f)
+    text_section = elffile.get_section_by_name('.text')
+
+    for i in range(len(sites_offset)):
+        site = rethunks_start_kcore + sites_offset[i]
+        vmlinux_site = rethunks_start_vmlinux + sites_offset[i]
+        try:
+            passed = unknown = failed = skipped = False
+
+            symbol = identify_address(prog, site)
+            vmlinux_insn = c.get_instruction_from_vmlinux(elffile, text_section, text_section['sh_addr'], vmlinux_site)
+            kcore_insn = list(cap.disasm(prog.read(site, 16), site))[0]
+
+            insn_end = site + kcore_insn.size - 1
+
+            safe_site = insn_end & 0x20
+            site_status = "" if safe_site else "(unsafe)"
+
+            ksft.print_msg(f"\nSite {i}: {symbol} <0x{site:x}> {site_status}")
+            ksft.print_msg(f"\tvmlinux: 0x{vmlinux_insn.address:x}:\t{vmlinux_insn.mnemonic}\t{vmlinux_insn.op_str}")
+            ksft.print_msg(f"\tkcore:   0x{kcore_insn.address:x}:\t{kcore_insn.mnemonic}\t{kcore_insn.op_str}")
+
+            if safe_site:
+                tests_passed += 1
+                passed = True
+                ksft.print_msg(f"\tPASSED: At safe address")
+                continue
+
+            if "jmp" in kcore_insn.mnemonic:
+                passed = True
+            elif "ret" not in kcore_insn.mnemonic:
+                skipped = True
+
+            if passed:
+                ksft.print_msg(f"\tPASSED: Found {kcore_insn.mnemonic} {kcore_insn.op_str}")
+                tests_passed += 1
+            elif skipped:
+                ksft.print_msg(f"\tSKIPPED: Found '{kcore_insn.mnemonic}'")
+                tests_skipped += 1
+            elif unknown:
+                ksft.print_msg(f"UNKNOWN: An unknown instruction: {kcore_insn}")
+                tests_unknown += 1
+            else:
+                ksft.print_msg(f'\t************* FAILED *************')
+                ksft.print_msg(f"\tFound {kcore_insn.mnemonic} {kcore_insn.op_str}")
+                ksft.print_msg(f'\t**********************************')
+                tests_failed += 1
+        except Exception as e:
+            ksft.print_msg(f"UNKNOWN: An unexpected error occurred: {e}")
+            tests_unknown += 1
+
+ksft.print_msg(f"\n\nSummary:")
+ksft.print_msg(f"PASSED: \t{tests_passed} \t/ {total_rethunk_tests}")
+ksft.print_msg(f"FAILED: \t{tests_failed} \t/ {total_rethunk_tests}")
+ksft.print_msg(f"SKIPPED: \t{tests_skipped} \t/ {total_rethunk_tests}")
+ksft.print_msg(f"UNKNOWN: \t{tests_unknown} \t/ {total_rethunk_tests}")
+
+if tests_failed == 0:
+    ksft.test_result_pass("All ITS return thunk sites passed.")
+else:
+    ksft.test_result_fail(f"{tests_failed} failed sites need ITS return thunks.")
+ksft.finished()
--- /dev/null
+++ b/tools/testing/selftests/x86/bugs/its_sysfs.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (c) 2025 Intel Corporation
+#
+# Test for Indirect Target Selection(ITS) mitigation sysfs status.
+
+import sys, os, re
+this_dir = os.path.dirname(os.path.realpath(__file__))
+sys.path.insert(0, this_dir + '/../../kselftest')
+import ksft
+
+from common import *
+
+bug = "indirect_target_selection"
+mitigation = get_sysfs(bug)
+
+ITS_MITIGATION_ALIGNED_THUNKS	= "Mitigation: Aligned branch/return thunks"
+ITS_MITIGATION_RETPOLINE_STUFF	= "Mitigation: Retpolines, Stuffing RSB"
+ITS_MITIGATION_VMEXIT_ONLY		= "Mitigation: Vulnerable, KVM: Not affected"
+ITS_MITIGATION_VULNERABLE       = "Vulnerable"
+
+def check_mitigation():
+    if mitigation == ITS_MITIGATION_ALIGNED_THUNKS:
+        if cmdline_has(f'{bug}=stuff') and sysfs_has("spectre_v2", "Retpolines"):
+            bug_check_fail(bug, ITS_MITIGATION_ALIGNED_THUNKS, ITS_MITIGATION_RETPOLINE_STUFF)
+            return
+        if cmdline_has(f'{bug}=vmexit') and cpuinfo_has('its_native_only'):
+            bug_check_fail(bug, ITS_MITIGATION_ALIGNED_THUNKS, ITS_MITIGATION_VMEXIT_ONLY)
+            return
+        bug_check_pass(bug, ITS_MITIGATION_ALIGNED_THUNKS)
+        return
+
+    if mitigation == ITS_MITIGATION_RETPOLINE_STUFF:
+        if cmdline_has(f'{bug}=stuff') and sysfs_has("spectre_v2", "Retpolines"):
+            bug_check_pass(bug, ITS_MITIGATION_RETPOLINE_STUFF)
+            return
+        if sysfs_has('retbleed', 'Stuffing'):
+            bug_check_pass(bug, ITS_MITIGATION_RETPOLINE_STUFF)
+            return
+        bug_check_fail(bug, ITS_MITIGATION_RETPOLINE_STUFF, ITS_MITIGATION_ALIGNED_THUNKS)
+
+    if mitigation == ITS_MITIGATION_VMEXIT_ONLY:
+        if cmdline_has(f'{bug}=vmexit') and cpuinfo_has('its_native_only'):
+            bug_check_pass(bug, ITS_MITIGATION_VMEXIT_ONLY)
+            return
+        bug_check_fail(bug, ITS_MITIGATION_VMEXIT_ONLY, ITS_MITIGATION_ALIGNED_THUNKS)
+
+    if mitigation == ITS_MITIGATION_VULNERABLE:
+        if sysfs_has("spectre_v2", "Vulnerable"):
+            bug_check_pass(bug, ITS_MITIGATION_VULNERABLE)
+        else:
+            bug_check_fail(bug, "Mitigation", ITS_MITIGATION_VULNERABLE)
+
+    bug_status_unknown(bug, mitigation)
+    return
+
+ksft.print_header()
+ksft.set_plan(1)
+ksft.print_msg(f'{bug}: {mitigation} ...')
+
+if not basic_checks_sufficient(bug, mitigation):
+    check_mitigation()
+
+ksft.finished()



  parent reply	other threads:[~2025-05-12 17:52 UTC|newest]

Thread overview: 224+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-12 17:37 [PATCH 6.14 000/197] 6.14.7-rc1 review Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 001/197] dm: add missing unlock on in dm_keyslot_evict() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 002/197] fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 003/197] Revert "btrfs: canonicalize the device path before adding it" Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 004/197] arm64: dts: imx8mm-verdin: Link reg_usdhc2_vqmmc to usdhc2 Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 005/197] firmware: arm_scmi: Fix timeout checks on polling path Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 006/197] can: mcan: m_can_class_unregister(): fix order of unregistration calls Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 007/197] s390/pci: Fix missing check for zpci_create_device() error return Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 008/197] wifi: cfg80211: fix out-of-bounds access during multi-link element defragmentation Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 009/197] vfio/pci: Align huge faults to order Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 010/197] s390/pci: Fix duplicate pci_dev_put() in disable_slot() when PF has child VFs Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 011/197] can: mcp251xfd: mcp251xfd_remove(): fix order of unregistration calls Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 012/197] can: rockchip_canfd: rkcanfd_remove(): " Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 013/197] ksmbd: prevent rename with empty string Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 014/197] ksmbd: prevent out-of-bounds stream writes by validating *pos Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 015/197] ksmbd: Fix UAF in __close_file_table_ids Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 016/197] openvswitch: Fix unsafe attribute parsing in output_userspace() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 017/197] ksmbd: fix memory leak in parse_lease_state() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 018/197] s390/entry: Fix last breaking event handling in case of stack corruption Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 019/197] sch_htb: make htb_deactivate() idempotent Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 020/197] virtio-net: dont re-enable refill work too early when NAPI is disabled Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 021/197] virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 022/197] gre: Fix again IPv6 link-local address generation Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 023/197] net: ethernet: mtk_eth_soc: reset all TX queues on DMA free Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 024/197] net: ethernet: mtk_eth_soc: do not reset PSE when setting FE Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 025/197] can: m_can: m_can_class_allocate_dev(): initialize spin lock on device probe Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 026/197] can: mcp251xfd: fix TDC setting for low data bit rates Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 027/197] can: gw: fix RCU/BH usage in cgw_create_job() Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 028/197] wifi: mac80211: fix the type of status_code for negotiated TID to Link Mapping Greg Kroah-Hartman
2025-05-12 17:37 ` [PATCH 6.14 029/197] ice: use DSN instead of PCI BDF for ice_adapter index Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 030/197] erofs: ensure the extra temporary copy is valid for shortened bvecs Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 031/197] ipvs: fix uninit-value for saddr in do_output_route4 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 032/197] netfilter: ipset: fix region locking in hash types Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 033/197] bpf: Scrub packet on bpf_redirect_peer Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 034/197] net: dsa: b53: allow leaky reserved multicast Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 035/197] net: dsa: b53: keep CPU port always tagged again Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 036/197] net: dsa: b53: fix clearing PVID of a port Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 037/197] net: dsa: b53: fix flushing old pvid VLAN on pvid change Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 038/197] net: dsa: b53: fix VLAN ID for untagged vlan on bridge leave Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 039/197] net: dsa: b53: always rejoin default untagged VLAN " Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 040/197] net: dsa: b53: do not allow to configure VLAN 0 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 041/197] net: dsa: b53: do not program vlans when vlan filtering is off Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 042/197] net: dsa: b53: fix toggling vlan_filtering Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 043/197] net: dsa: b53: fix learning on VLAN unaware bridges Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 044/197] net: dsa: b53: do not set learning and unicast/multicast on up Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 045/197] fbnic: Fix initialization of mailbox descriptor rings Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 046/197] fbnic: Gate AXI read/write enabling on FW mailbox Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 047/197] fbnic: Actually flush_tx instead of stalling out Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 048/197] fbnic: Cleanup handling of completions Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 049/197] fbnic: Improve responsiveness of fbnic_mbx_poll_tx_ready Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 050/197] fbnic: Pull fbnic_fw_xmit_cap_msg use out of interrupt context Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 051/197] fbnic: Do not allow mailbox to toggle to ready outside fbnic_mbx_poll_tx_ready Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 052/197] net: export a helper for adding up queue stats Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 053/197] virtio-net: fix total qstat values Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 054/197] Input: cyttsp5 - ensure minimum reset pulse width Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 055/197] Input: cyttsp5 - fix power control issue on wakeup Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 056/197] Input: mtk-pmic-keys - fix possible null pointer dereference Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 057/197] Input: xpad - fix Share button on Xbox One controllers Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 058/197] Input: xpad - add support for 8BitDo Ultimate 2 Wireless Controller Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 059/197] Input: xpad - fix two controller table values Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 060/197] Input: synaptics - enable InterTouch on Dynabook Portege X30-D Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 061/197] Input: synaptics - enable InterTouch on Dynabook Portege X30L-G Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 062/197] Input: synaptics - enable InterTouch on Dell Precision M3800 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 063/197] Input: synaptics - enable SMBus for HP Elitebook 850 G1 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 064/197] Input: synaptics - enable InterTouch on TUXEDO InfinityBook Pro 14 v5 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 065/197] rust: clean Rust 1.88.0s `unnecessary_transmutes` lint Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 066/197] objtool/rust: add one more `noreturn` Rust function for Rust 1.87.0 Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 067/197] rust: clean Rust 1.88.0s warning about `clippy::disallowed_macros` configuration Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 068/197] uio_hv_generic: Fix sysfs creation path for ring buffer Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 069/197] staging: iio: adc: ad7816: Correct conditional logic for store mode Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 070/197] staging: bcm2835-camera: Initialise dev in v4l2_dev Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 071/197] staging: axis-fifo: Remove hardware resets for user errors Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 072/197] staging: axis-fifo: Correct handling of tx_fifo_depth for size validation Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 073/197] x86/mm: Eliminate window where TLB flushes may be inadvertently skipped Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 074/197] mm: fix folio_pte_batch() on XEN PV Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 075/197] mm: vmalloc: support more granular vrealloc() sizing Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 076/197] mm/huge_memory: fix dereferencing invalid pmd migration entry Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 077/197] mm/userfaultfd: fix uninitialized output field for -EAGAIN race Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 078/197] selftests/mm: compaction_test: support platform with huge mount of memory Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 079/197] selftests/mm: fix a build failure on powerpc Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 080/197] selftests/mm: fix build break when compiling pkey_util.c Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 081/197] KVM: x86/mmu: Prevent installing hugepages when mem attributes are changing Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 082/197] KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 083/197] drm/amd/display: Shift DMUB AUX reply command if necessary Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 084/197] riscv: Fix kernel crash due to PR_SET_TAGGED_ADDR_CTRL Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 085/197] io_uring: ensure deferred completions are flushed for multishot Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 086/197] iio: adc: ad7768-1: Fix insufficient alignment of timestamp Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 087/197] iio: adc: ad7266: Fix potential timestamp alignment issue Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 088/197] iio: adc: ad7606: fix serial register access Greg Kroah-Hartman
2025-05-12 17:38 ` [PATCH 6.14 089/197] iio: adc: rockchip: Fix clock initialization sequence Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 090/197] iio: adis16201: Correct inclinometer channel resolution Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 091/197] iio: chemical: sps30: use aligned_s64 for timestamp Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 092/197] iio: chemical: pms7003: " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 093/197] iio: hid-sensor-prox: Restore lost scale assignments Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 094/197] iio: hid-sensor-prox: support multi-channel SCALE calculation Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 095/197] iio: hid-sensor-prox: Fix incorrect OFFSET calculation Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 096/197] iio: imu: inv_mpu6050: align buffer for timestamp Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 097/197] iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_fifo Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 098/197] iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_tagged_fifo Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 099/197] iio: light: opt3001: fix deadlock due to concurrent flag access Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 100/197] iio: pressure: mprls0025pa: use aligned_s64 for timestamp Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 101/197] Revert "drm/amd: Stop evicting resources on APUs in suspend" Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 102/197] drm/v3d: Add job to pending list if the reset was skipped Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 103/197] drm/xe: Add page queue multiplier Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 104/197] drm/amdgpu: fix pm notifier handling Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 105/197] drm/amdgpu/vcn: using separate VCN1_AON_SOC offset Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 106/197] drm/amd/display: Fix invalid context error in dml helper Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 107/197] drm/amd/display: more liberal vmin/vmax update for freesync Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 108/197] drm/amd/display: Fix the checking condition in dmub aux handling Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 109/197] drm/amd/display: Remove incorrect checking in dmub aux handler Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 110/197] drm/amd/display: Fix wrong handling for AUX_DEFER case Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 111/197] drm/amd/display: Copy AUX read reply data whenever length > 0 Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 112/197] drm/amdgpu/hdp4: use memcfg register to post the write for HDP flush Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 113/197] drm/amdgpu/hdp5.2: " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 114/197] drm/amdgpu/hdp5: " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 115/197] drm/amdgpu/hdp6: " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 116/197] drm/amdgpu/hdp7: " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 117/197] xhci: dbc: Avoid event polling busyloop if pending rx transfers are inactive Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 118/197] usb: uhci-platform: Make the clock really optional Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 119/197] smb: client: Avoid race in open_cached_dir with lease breaks Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 120/197] xen: swiotlb: Use swiotlb bouncing if kmalloc allocation demands it Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 121/197] xenbus: Use kref to track req lifetime Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 122/197] accel/ivpu: Increase state dump msg timeout Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 123/197] arm64: cpufeature: Move arm64_use_ng_mappings to the .data section to prevent wrong idmap generation Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 124/197] clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable() Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 125/197] KVM: arm64: Fix uninitialized memcache pointer in user_mem_abort() Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 126/197] memblock: Accept allocated memory before use in memblock_double_array() Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 127/197] module: ensure that kobject_put() is safe for module type kobjects Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 128/197] x86/microcode: Consolidate the loader enablement checking Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 129/197] ocfs2: fix panic in failed foilio allocation Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 130/197] ocfs2: fix the issue with discontiguous allocation in the global_bitmap Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 131/197] ocfs2: switch osb->disable_recovery to enum Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 132/197] ocfs2: implement handshaking with ocfs2 recovery thread Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 133/197] ocfs2: stop quota recovery before disabling quotas Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 134/197] usb: dwc3: gadget: Make gadget_wakeup asynchronous Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 135/197] usb: cdnsp: Fix issue with resuming from L1 Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 136/197] usb: cdnsp: fix L1 resume issue for RTL_REVISION_NEW_LPM version Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 137/197] usb: gadget: f_ecm: Add get_status callback Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 138/197] usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 139/197] usb: gadget: Use get_status callback to set remote wakeup capability Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 140/197] usb: host: tegra: Prevent host controller crash when OTG port is used Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 141/197] usb: misc: onboard_usb_dev: fix support for Cypress HX3 hubs Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 142/197] usb: typec: tcpm: delay SNK_TRY_WAIT_DEBOUNCE to SRC_TRYWAIT transition Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 143/197] usb: typec: ucsi: displayport: Fix deadlock Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 144/197] usb: typec: ucsi: displayport: Fix NULL pointer access Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 145/197] USB: usbtmc: use interruptible sleep in usbtmc_read Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 146/197] usb: usbtmc: Fix erroneous get_stb ioctl error returns Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 147/197] usb: usbtmc: Fix erroneous wait_srq ioctl return Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 148/197] usb: usbtmc: Fix erroneous generic_read " Greg Kroah-Hartman
2025-05-12 17:39 ` [PATCH 6.14 149/197] iio: imu: bmi270: fix initial sampling frequency configuration Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 150/197] iio: accel: adxl367: fix setting odr for activity time update Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 151/197] iio: temp: maxim-thermocouple: Fix potential lack of DMA safe buffer Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 152/197] iio: accel: adxl355: Make timestamp 64-bit aligned using aligned_s64 Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 153/197] iio: adc: dln2: Use aligned_s64 for timestamp Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 154/197] MIPS: Fix idle VS timer enqueue Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 155/197] MIPS: Move r4k_wait() to .cpuidle.text section Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 156/197] timekeeping: Prevent coarse clocks going backwards Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 157/197] accel/ivpu: Separate DB ID and CMDQ ID allocations from CMDQ allocation Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 158/197] accel/ivpu: Correct mutex unlock order in job submission Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 159/197] MIPS: Fix MAX_REG_OFFSET Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 160/197] riscv: misaligned: Add handling for ZCB instructions Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 161/197] loop: factor out a loop_assign_backing_file helper Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 162/197] loop: Add sanity check for read/write_iter Greg Kroah-Hartman
2025-05-20  0:19   ` Justin Forbes
2025-05-20  4:56     ` Greg Kroah-Hartman
2025-05-20 15:22       ` Jens Axboe
2025-05-20 16:09         ` Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 163/197] drm/panel: simple: Update timings for AUO G101EVN010 Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 164/197] nvme: unblock ctrl state transition for firmware update Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 165/197] riscv: misaligned: factorize trap handling Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 166/197] riscv: misaligned: enable IRQs while handling misaligned accesses Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 167/197] riscv: Disallow PR_GET_TAGGED_ADDR_CTRL without Supm Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 168/197] drm/xe/tests/mocs: Hold XE_FORCEWAKE_ALL for LNCF regs Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 169/197] drm/xe: Release force wake first then runtime power Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 170/197] io_uring/sqpoll: Increase task_work submission batch size Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 171/197] do_umount(): add missing barrier before refcount checks in sync case Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 172/197] rust: allow Rust 1.87.0s `clippy::ptr_eq` lint Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 173/197] rust: clean Rust 1.88.0s `clippy::uninlined_format_args` lint Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 174/197] io_uring: always arm linked timeouts prior to issue Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 175/197] Bluetooth: btmtk: Remove the resetting step before downloading the fw Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 176/197] mm: page_alloc: dont steal single pages from biggest buddy Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 177/197] mm: page_alloc: speed up fallbacks in rmqueue_bulk() Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 178/197] arm64: insn: Add support for encoding DSB Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 179/197] arm64: proton-pack: Expose whether the platform is mitigated by firmware Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 180/197] arm64: proton-pack: Expose whether the branchy loop k value Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 181/197] arm64: bpf: Add BHB mitigation to the epilogue for cBPF programs Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 182/197] arm64: bpf: Only mitigate cBPF programs loaded by unprivileged users Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 183/197] arm64: proton-pack: Add new CPUs k values for branch mitigation Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 184/197] x86/bpf: Call branch history clearing sequence on exit Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 185/197] x86/bpf: Add IBHF call at end of classic BPF Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 186/197] x86/bhi: Do not set BHI_DIS_S in 32-bit mode Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 187/197] Documentation: x86/bugs/its: Add ITS documentation Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 188/197] x86/its: Enumerate Indirect Target Selection (ITS) bug Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 189/197] x86/its: Add support for ITS-safe indirect thunk Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 190/197] x86/its: Add support for ITS-safe return thunk Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 191/197] x86/its: Enable Indirect Target Selection mitigation Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 192/197] x86/its: Add "vmexit" option to skip mitigation on some CPUs Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 193/197] x86/its: Add support for RSB stuffing mitigation Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 194/197] x86/its: Align RETs in BHB clear sequence to avoid thunking Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 195/197] x86/ibt: Keep IBT disabled during alternative patching Greg Kroah-Hartman
2025-05-12 17:40 ` [PATCH 6.14 196/197] x86/its: Use dynamic thunks for indirect branches Greg Kroah-Hartman
2025-05-12 17:40 ` Greg Kroah-Hartman [this message]
2025-05-12 19:30 ` [PATCH 6.14 000/197] 6.14.7-rc1 review Pavel Machek
2025-05-12 20:56 ` Jon Hunter
2025-05-13  0:26 ` Christian Heusel
2025-05-13  6:24   ` Luna Jernberg
2025-05-13 13:07   ` Mario Limonciello
2025-05-15 12:34   ` Luna Jernberg
2025-05-15 12:40     ` Christian Heusel
2025-05-13  9:41 ` Ron Economos
2025-05-13  9:45 ` Mark Brown
2025-05-13 10:40 ` Naresh Kamboju
2025-05-13 13:29   ` Naresh Kamboju
2025-05-14  9:53     ` Greg Kroah-Hartman
2025-05-13 11:38 ` Takeshi Ogasawara
2025-05-13 12:54 ` Florian Fainelli
2025-05-13 14:58 ` Markus Reichelt
2025-05-13 17:27 ` Peter Schneider
2025-05-13 17:30 ` Shuah Khan
2025-05-14  7:50 ` Christian Heusel
2025-05-14 11:49 ` Shung-Hsi Yu
2025-05-15  4:17   ` Pawan Gupta
2025-05-15 12:04     ` Shung-Hsi Yu
2025-05-14 16:45 ` Hardik Garg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250512172052.439043944@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=patches@lists.linux.dev \
    --cc=pawan.kumar.gupta@linux.intel.com \
    --cc=stable@vger.kernel.org \
    --cc=tao1.zhang@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox