1*7a9b709eSPawan Gupta#!/usr/bin/env python3 2*7a9b709eSPawan Gupta# SPDX-License-Identifier: GPL-2.0 3*7a9b709eSPawan Gupta# 4*7a9b709eSPawan Gupta# Copyright (c) 2025 Intel Corporation 5*7a9b709eSPawan Gupta# 6*7a9b709eSPawan Gupta# Test for Indirect Target Selection(ITS) mitigation sysfs status. 7*7a9b709eSPawan Gupta 8*7a9b709eSPawan Guptaimport sys, os, re 9*7a9b709eSPawan Guptathis_dir = os.path.dirname(os.path.realpath(__file__)) 10*7a9b709eSPawan Guptasys.path.insert(0, this_dir + '/../../kselftest') 11*7a9b709eSPawan Guptaimport ksft 12*7a9b709eSPawan Gupta 13*7a9b709eSPawan Guptafrom common import * 14*7a9b709eSPawan Gupta 15*7a9b709eSPawan Guptabug = "indirect_target_selection" 16*7a9b709eSPawan Guptamitigation = get_sysfs(bug) 17*7a9b709eSPawan Gupta 18*7a9b709eSPawan GuptaITS_MITIGATION_ALIGNED_THUNKS = "Mitigation: Aligned branch/return thunks" 19*7a9b709eSPawan GuptaITS_MITIGATION_RETPOLINE_STUFF = "Mitigation: Retpolines, Stuffing RSB" 20*7a9b709eSPawan GuptaITS_MITIGATION_VMEXIT_ONLY = "Mitigation: Vulnerable, KVM: Not affected" 21*7a9b709eSPawan GuptaITS_MITIGATION_VULNERABLE = "Vulnerable" 22*7a9b709eSPawan Gupta 23*7a9b709eSPawan Guptadef check_mitigation(): 24*7a9b709eSPawan Gupta if mitigation == ITS_MITIGATION_ALIGNED_THUNKS: 25*7a9b709eSPawan Gupta if cmdline_has(f'{bug}=stuff') and sysfs_has("spectre_v2", "Retpolines"): 26*7a9b709eSPawan Gupta bug_check_fail(bug, ITS_MITIGATION_ALIGNED_THUNKS, ITS_MITIGATION_RETPOLINE_STUFF) 27*7a9b709eSPawan Gupta return 28*7a9b709eSPawan Gupta if cmdline_has(f'{bug}=vmexit') and cpuinfo_has('its_native_only'): 29*7a9b709eSPawan Gupta bug_check_fail(bug, ITS_MITIGATION_ALIGNED_THUNKS, ITS_MITIGATION_VMEXIT_ONLY) 30*7a9b709eSPawan Gupta return 31*7a9b709eSPawan Gupta bug_check_pass(bug, ITS_MITIGATION_ALIGNED_THUNKS) 32*7a9b709eSPawan Gupta return 33*7a9b709eSPawan Gupta 34*7a9b709eSPawan Gupta if mitigation == ITS_MITIGATION_RETPOLINE_STUFF: 35*7a9b709eSPawan Gupta if cmdline_has(f'{bug}=stuff') and sysfs_has("spectre_v2", "Retpolines"): 36*7a9b709eSPawan Gupta bug_check_pass(bug, ITS_MITIGATION_RETPOLINE_STUFF) 37*7a9b709eSPawan Gupta return 38*7a9b709eSPawan Gupta if sysfs_has('retbleed', 'Stuffing'): 39*7a9b709eSPawan Gupta bug_check_pass(bug, ITS_MITIGATION_RETPOLINE_STUFF) 40*7a9b709eSPawan Gupta return 41*7a9b709eSPawan Gupta bug_check_fail(bug, ITS_MITIGATION_RETPOLINE_STUFF, ITS_MITIGATION_ALIGNED_THUNKS) 42*7a9b709eSPawan Gupta 43*7a9b709eSPawan Gupta if mitigation == ITS_MITIGATION_VMEXIT_ONLY: 44*7a9b709eSPawan Gupta if cmdline_has(f'{bug}=vmexit') and cpuinfo_has('its_native_only'): 45*7a9b709eSPawan Gupta bug_check_pass(bug, ITS_MITIGATION_VMEXIT_ONLY) 46*7a9b709eSPawan Gupta return 47*7a9b709eSPawan Gupta bug_check_fail(bug, ITS_MITIGATION_VMEXIT_ONLY, ITS_MITIGATION_ALIGNED_THUNKS) 48*7a9b709eSPawan Gupta 49*7a9b709eSPawan Gupta if mitigation == ITS_MITIGATION_VULNERABLE: 50*7a9b709eSPawan Gupta if sysfs_has("spectre_v2", "Vulnerable"): 51*7a9b709eSPawan Gupta bug_check_pass(bug, ITS_MITIGATION_VULNERABLE) 52*7a9b709eSPawan Gupta else: 53*7a9b709eSPawan Gupta bug_check_fail(bug, "Mitigation", ITS_MITIGATION_VULNERABLE) 54*7a9b709eSPawan Gupta 55*7a9b709eSPawan Gupta bug_status_unknown(bug, mitigation) 56*7a9b709eSPawan Gupta return 57*7a9b709eSPawan Gupta 58*7a9b709eSPawan Guptaksft.print_header() 59*7a9b709eSPawan Guptaksft.set_plan(1) 60*7a9b709eSPawan Guptaksft.print_msg(f'{bug}: {mitigation} ...') 61*7a9b709eSPawan Gupta 62*7a9b709eSPawan Guptaif not basic_checks_sufficient(bug, mitigation): 63*7a9b709eSPawan Gupta check_mitigation() 64*7a9b709eSPawan Gupta 65*7a9b709eSPawan Guptaksft.finished() 66