On Wed, May 07, 2025 at 02:14:00PM +0300, Elena Reshetova wrote:
  
> diff --git a/arch/x86/kernel/cpu/sgx/driver.c 
> b/arch/x86/kernel/cpu/sgx/driver.c
> index 7f8d1e11dbee..669e44d61f9f 100644
> --- a/arch/x86/kernel/cpu/sgx/driver.c
> +++ b/arch/x86/kernel/cpu/sgx/driver.c
> @@ -19,6 +19,10 @@ static int sgx_open(struct inode *inode, struct file *file)
>       struct sgx_encl *encl;
>       int ret;
>  
> +     ret = sgx_inc_usage_count();
> +     if (ret)
> +             return ret;
> +
>       encl = kzalloc(sizeof(*encl), GFP_KERNEL);
>       if (!encl)
>               return -ENOMEM;

The rollback looks broken to me.

Let's clean up error handling a bit:

        encl = kzalloc(sizeof(*encl), GFP_KERNEL);
        if (!encl) {
                ret = -ENOMEM;
                goto err_usage_count;
        }

And later on in the same function:

        ret = init_srcu_struct(&encl->srcu);
        if (ret)
                goto err_encl;

And finally tail:

        return 0;

err_encl:
        kfree(encl);

err_usage_count:
        sgx_dec_usage_count();
        return ret;
}

BR, Jarkko

Reply via email to