Re: [PATCH] usb: gadget: f_fs: Fix use-after-free

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 14 2016, Lars-Peter Clausen wrote:
> Calling the ki_complete() callback will free the underlying data structure.
> Make sure that it is no longer accessed beyond that point, otherwise
> undefined behaviour might occur.

To be honest I have trouble tracking what ki_complete is.  Could you
describe the path that leads to the bug in a little more detail?

> Fixes: 2e4c7553cd6f ("usb: gadget: f_fs: add aio support")
> Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx>
> ---
>  drivers/usb/gadget/function/f_fs.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
> index e21ca2bd..15b648c 100644
> --- a/drivers/usb/gadget/function/f_fs.c
> +++ b/drivers/usb/gadget/function/f_fs.c
> @@ -646,6 +646,7 @@ static void ffs_user_copy_worker(struct work_struct *work)
>  						   work);
>  	int ret = io_data->req->status ? io_data->req->status :
>  					 io_data->req->actual;
> +	bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD;
>  
>  	if (io_data->read && ret > 0) {
>  		use_mm(io_data->mm);
> @@ -657,13 +658,11 @@ static void ffs_user_copy_worker(struct work_struct *work)
>  
>  	io_data->kiocb->ki_complete(io_data->kiocb, ret, ret);
>  
> -	if (io_data->ffs->ffs_eventfd &&
> -	    !(io_data->kiocb->ki_flags & IOCB_EVENTFD))
> +	if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd)
>  		eventfd_signal(io_data->ffs->ffs_eventfd, 1);
>  
>  	usb_ep_free_request(io_data->ep, io_data->req);
>  
> -	io_data->kiocb->private = NULL;
>  	if (io_data->read)
>  		kfree(io_data->to_free);
>  	kfree(io_data->buf);
> -- 
> 2.1.4
>

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux