Re: [PATCH] sh: intc: use after free in register_intc_controller()

John Paul Adrian Glaubitz <[email protected]>
Newsgroups gmane.linux.ports.sh.devel,gmane.linux.kernel,gmane.linux.kernel.janitors
Message-ID <b24df2978b61101e34a6b7116c942a1b0d6bc434.camel@physik.fu-berlin.de>
On Wed, 2024-10-23 at 11:41 +0300, Dan Carpenter wrote:
> In the error handling, for this function, we kfree(d) without ever
> removing it from the &intc_list which would lead to a use after free.  To
> fix this, lets only add it to the list after everything has succeeded.
> 
> Fixes: 2dcec7a988a1 ("sh: intc: set_irq_wake() support")
> Signed-off-by: Dan Carpenter <[email protected]>
> ---
> This patch is highly speculative and I am not able to test it.  Please,
> review with care.
> 
>  drivers/sh/intc/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
> index 74350b5871dc..ea571eeb3078 100644
> --- a/drivers/sh/intc/core.c
> +++ b/drivers/sh/intc/core.c
> @@ -209,7 +209,6 @@ int __init register_intc_controller(struct intc_desc *desc)
>  		goto err0;
>  
>  	INIT_LIST_HEAD(&d->list);
> -	list_add_tail(&d->list, &intc_list);
>  
>  	raw_spin_lock_init(&d->lock);
>  	INIT_RADIX_TREE(&d->tree, GFP_ATOMIC);
> @@ -369,6 +368,7 @@ int __init register_intc_controller(struct intc_desc *desc)
>  
>  	d->skip_suspend = desc->skip_syscore_suspend;
>  
> +	list_add_tail(&d->list, &intc_list);
>  	nr_intc_controllers++;
>  
>  	return 0;

I think this approach is more sensible than the one suggested by Ridong Chen
and I'm therefor egoing to pick this one over the other solution.

Reviewed-by: John Paul Adrian Glaubitz <[email protected]>

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.