x86/hvm: add nospec to hvmop param

The params array in hvm can be accessed with get and set functions.
As the index is guest controlled, make sure no out-of-bound accesses
can be performed.

As we cannot influence how future compilers might modify the
instructions that enforce the bounds, we furthermore block speculation,
so that the update is visible in the architectural state.

This is part of the speculative hardening effort.

Signed-off-by: Norbert Manthey <nmanthey@amazon.de>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Norbert Manthey authored and Jan Beulich committed 2019-04-05 12:18:34 +02:00
1 parent dfdf478048
commit 93dfd72bdb
1 file changed
+6
+6
View File
@@ -4145,6 +4145,9 @@ static int hvmop_set_param(
if ( a.index >= HVM_NR_PARAMS )
return -EINVAL;
/* Make sure the above bound check is not bypassed during speculation. */
block_speculation();
d = rcu_lock_domain_by_any_id(a.domid);
if ( d == NULL )
return -ESRCH;
@@ -4411,6 +4414,9 @@ static int hvmop_get_param(
if ( a.index >= HVM_NR_PARAMS )
return -EINVAL;
/* Make sure the above bound check is not bypassed during speculation. */
block_speculation();
d = rcu_lock_domain_by_any_id(a.domid);
if ( d == NULL )
return -ESRCH;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.