On 4/29/2022 8:22 PM, Reinette Chatre wrote: > diff --git a/arch/x86/kernel/cpu/sgx/encl.c b/arch/x86/kernel/cpu/sgx/encl.c > index 22ed886dc825..81c7bfc12b9b 100644 > --- a/arch/x86/kernel/cpu/sgx/encl.c > +++ b/arch/x86/kernel/cpu/sgx/encl.c > @@ -98,11 +98,10 @@ static int __sgx_encl_eldu(struct sgx_encl_page *encl_page, > kunmap_atomic(pcmd_page); > kunmap_atomic((void *)(unsigned long)pginfo.contents); > > - sgx_encl_put_backing(&b, true); > - > + put_page(b.contents); > sgx_encl_truncate_backing_page(encl, page_index); > > - if (pcmd_page_empty) { > + if (pcmd_page_empty && && put_page_testzero(b.pcmd)) { These tests need to be swapped and instead be: if (put_page_testzero(b.pcmd) && pcmd_page_empty) { I fixed the tests. Even with previous order the concurrent selftests ran overnight without encountering a single error or WARN. I increased the number of test iterations and will run it over the weekend with the correct test order shown above to ensure the reference to the PCMD page is always dropped. Reinette