case XSM_HOOK:
return 0;
case XSM_TARGET:
- if ( src == target )
+ if ( evaluate_nospec(src == target) )
{
return 0;
case XSM_XS_PRIV:
- if ( is_xenstore_domain(src) )
+ if ( evaluate_nospec(is_xenstore_domain(src)) )
return 0;
}
/* fall through */
case XSM_DM_PRIV:
- if ( target && src->target == target )
+ if ( target && evaluate_nospec(src->target == target) )
return 0;
/* fall through */
case XSM_PRIV:
- if ( src->is_privileged )
+ if ( is_control_domain(src) )
return 0;
return -EPERM;
default:
XSM_ASSERT_ACTION(XSM_TARGET);
if ( f != dom_io )
rc = xsm_default_action(action, d, f);
- if ( t && !rc )
+ if ( evaluate_nospec(t) && !rc )
rc = xsm_default_action(action, d, t);
return rc;
}
case XENVER_platform_parameters:
case XENVER_get_features:
/* These sub-ops ignore the permission checks and return data. */
+ block_speculation();
return 0;
case XENVER_extraversion:
case XENVER_compile_info: