• Anand K Mistry's avatar
    x86/speculation: Fix prctl() when spectre_v2_user={seccomp,prctl},ibpb · 33fc379d
    Anand K Mistry authored
    When spectre_v2_user={seccomp,prctl},ibpb is specified on the command
    line, IBPB is force-enabled and STIPB is conditionally-enabled (or not
    available).
    
    However, since
    
      21998a35 ("x86/speculation: Avoid force-disabling IBPB based on STIBP and enhanced IBRS.")
    
    the spectre_v2_user_ibpb variable is set to SPECTRE_V2_USER_{PRCTL,SECCOMP}
    instead of SPECTRE_V2_USER_STRICT, which is the actual behaviour.
    Because the issuing of IBPB relies on the switch_mm_*_ibpb static
    branches, the mitigations behave as expected.
    
    Since
    
      1978b3a5 ("x86/speculation: Allow IBPB to be conditionally enabled on CPUs with always-on STIBP")
    
    this discrepency caused the misreporting of IB speculation via prctl().
    
    On CPUs with STIBP always-on and spectre_v2_user=seccomp,ibpb,
    prctl(PR_GET_SPECULATION_CTRL) would return PR_SPEC_PRCTL |
    PR_SPEC_ENABLE instead of PR_SPEC_DISABLE since both IBPB and STIPB are
    always on. It also allowed prctl(PR_SET_SPECULATION_CTRL) to set the IB
    speculation mode, even though the flag is ignored.
    
    Similarly, for CPUs without SMT, prctl(PR_GET_SPECULATION_CTRL) should
    also return PR_SPEC_DISABLE since IBPB is always on and STIBP is not
    available.
    
     [ bp: Massage commit message. ]
    
    Fixes: 21998a35 ("x86/speculation: Avoid force-disabling IBPB based on STIBP and enhanced IBRS.")
    Fixes: 1978b3a5 ("x86/speculation: Allow IBPB to be conditionally enabled on CPUs with always-on STIBP")
    Signed-off-by: default avatarAnand K Mistry <amistry@google.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/20201110123349.1.Id0cbf996d2151f4c143c90f9028651a5b49a5908@changeid
    33fc379d
bugs.c 49.2 KB