diff mbox series

[v3,5/5] x86/sgx: Remove redundant if conditions in sgx_encl_create

Message ID 20210124062907.88229-6-tianjia.zhang@linux.alibaba.com
State Superseded
Headers show
Series [v3,1/5] selftests/x86: Simplify the code to get vdso base address in sgx | expand

Commit Message

Tianjia Zhang Jan. 24, 2021, 6:29 a.m. UTC
In this scenario, there is no case where va_page is NULL, and
the error has been checked. The if condition statement here is
redundant, so remove the condition detection.

Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
---
 arch/x86/kernel/cpu/sgx/ioctl.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

Sean Christopherson Jan. 25, 2021, 6:46 p.m. UTC | #1
On Sun, Jan 24, 2021, Greg KH wrote:
> On Sun, Jan 24, 2021 at 02:29:07PM +0800, Tianjia Zhang wrote:

> > In this scenario, there is no case where va_page is NULL, and

> > the error has been checked. The if condition statement here is

> > redundant, so remove the condition detection.

> > 

> > Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>

> > ---

> >  arch/x86/kernel/cpu/sgx/ioctl.c | 8 +++++---

> >  1 file changed, 5 insertions(+), 3 deletions(-)

> > 

> > diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c

> > index 1c6ecf9fbeff..b0b829f1b761 100644

> > --- a/arch/x86/kernel/cpu/sgx/ioctl.c

> > +++ b/arch/x86/kernel/cpu/sgx/ioctl.c

> > @@ -66,9 +66,11 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)

> >  	va_page = sgx_encl_grow(encl);

> >  	if (IS_ERR(va_page))

> >  		return PTR_ERR(va_page);

> > -	else if (va_page)

> > -		list_add(&va_page->list, &encl->va_pages);

> > -	/* else the tail page of the VA page list had free slots. */

> > +

> > +	if (WARN_ONCE(!va_page, "non-empty VA page list before ECREATE"))

> > +		return -EIO;

> 

> So you just crashed machines that have panic-on-warn enabled.  Don't do

> that for no reason, just handle the error and move on.


The WARN will only fire if someone introduces a kernel bug.  It's one part
documentation, two parts helping detect future breakage.  Even if the VA page
management is significantly reworked, I'm having a hard time envisioning a
scenario where adding VA pages before ECREATE would be anything but a kernel bug.
Jarkko Sakkinen Jan. 30, 2021, 2:33 p.m. UTC | #2
On Sun, Jan 24, 2021 at 02:29:07PM +0800, Tianjia Zhang wrote:
> In this scenario, there is no case where va_page is NULL, and

> the error has been checked. The if condition statement here is

> redundant, so remove the condition detection.

> 

> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>

> ---

>  arch/x86/kernel/cpu/sgx/ioctl.c | 8 +++++---

>  1 file changed, 5 insertions(+), 3 deletions(-)

> 

> diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c

> index 1c6ecf9fbeff..b0b829f1b761 100644

> --- a/arch/x86/kernel/cpu/sgx/ioctl.c

> +++ b/arch/x86/kernel/cpu/sgx/ioctl.c

> @@ -66,9 +66,11 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)

>  	va_page = sgx_encl_grow(encl);

>  	if (IS_ERR(va_page))

>  		return PTR_ERR(va_page);

> -	else if (va_page)

> -		list_add(&va_page->list, &encl->va_pages);

> -	/* else the tail page of the VA page list had free slots. */


This is fine. The check does not make sense.

> +

> +	if (WARN_ONCE(!va_page, "non-empty VA page list before ECREATE"))

> +		return -EIO;


No need for this WARN_ONCE().

> +

> +	list_add(&va_page->list, &encl->va_pages);


This is fine.

>  

>  	/* The extra page goes to SECS. */

>  	encl_size = secs->size + PAGE_SIZE;

> -- 

> 2.19.1.3.ge56e4f7

> 

> 


/Jarkko
Tianjia Zhang Feb. 1, 2021, 12:37 p.m. UTC | #3
On 1/30/21 10:33 PM, Jarkko Sakkinen wrote:
> On Sun, Jan 24, 2021 at 02:29:07PM +0800, Tianjia Zhang wrote:

>> In this scenario, there is no case where va_page is NULL, and

>> the error has been checked. The if condition statement here is

>> redundant, so remove the condition detection.

>>

>> Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>

>> ---

>>   arch/x86/kernel/cpu/sgx/ioctl.c | 8 +++++---

>>   1 file changed, 5 insertions(+), 3 deletions(-)

>>

>> diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c

>> index 1c6ecf9fbeff..b0b829f1b761 100644

>> --- a/arch/x86/kernel/cpu/sgx/ioctl.c

>> +++ b/arch/x86/kernel/cpu/sgx/ioctl.c

>> @@ -66,9 +66,11 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)

>>   	va_page = sgx_encl_grow(encl);

>>   	if (IS_ERR(va_page))

>>   		return PTR_ERR(va_page);

>> -	else if (va_page)

>> -		list_add(&va_page->list, &encl->va_pages);

>> -	/* else the tail page of the VA page list had free slots. */

> 

> This is fine. The check does not make sense.

> 

>> +

>> +	if (WARN_ONCE(!va_page, "non-empty VA page list before ECREATE"))

>> +		return -EIO;

> 

> No need for this WARN_ONCE().

> 

>> +

>> +	list_add(&va_page->list, &encl->va_pages);

> 

> This is fine.

> 

>>   

>>   	/* The extra page goes to SECS. */

>>   	encl_size = secs->size + PAGE_SIZE;

>> -- 

>> 2.19.1.3.ge56e4f7

>>

>>

> 

> /Jarkko

> 


Will be improved in the next version.

Thanks,
Tianjia
diff mbox series

Patch

diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c
index 1c6ecf9fbeff..b0b829f1b761 100644
--- a/arch/x86/kernel/cpu/sgx/ioctl.c
+++ b/arch/x86/kernel/cpu/sgx/ioctl.c
@@ -66,9 +66,11 @@  static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)
 	va_page = sgx_encl_grow(encl);
 	if (IS_ERR(va_page))
 		return PTR_ERR(va_page);
-	else if (va_page)
-		list_add(&va_page->list, &encl->va_pages);
-	/* else the tail page of the VA page list had free slots. */
+
+	if (WARN_ONCE(!va_page, "non-empty VA page list before ECREATE"))
+		return -EIO;
+
+	list_add(&va_page->list, &encl->va_pages);
 
 	/* The extra page goes to SECS. */
 	encl_size = secs->size + PAGE_SIZE;