diff options
| -rw-r--r-- | arch/x86/kernel/cpu/sgx/main.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c index ffc7b9496218..3eda7e7942e6 100644 --- a/arch/x86/kernel/cpu/sgx/main.c +++ b/arch/x86/kernel/cpu/sgx/main.c @@ -934,7 +934,7 @@ static int sgx_usage_count; * * entropy in RNG * * %-EIO: - Unexpected error, retries are not advisable */ -static int __maybe_unused sgx_update_svn(void) +static int sgx_update_svn(void) { int ret; @@ -992,14 +992,30 @@ static int __maybe_unused sgx_update_svn(void) return -EIO; } +/* Mutex to ensure no concurrent EPC accesses during EUPDATESVN */ +static DEFINE_MUTEX(sgx_svn_lock); + int sgx_inc_usage_count(void) { + int ret; + + guard(mutex)(&sgx_svn_lock); + + if (!sgx_usage_count) { + ret = sgx_update_svn(); + if (ret) + return ret; + } + + sgx_usage_count++; + return 0; } void sgx_dec_usage_count(void) { - return; + guard(mutex)(&sgx_svn_lock); + sgx_usage_count--; } static int __init sgx_init(void) |
