Re: [PATCH for-next v6 08/12] RDMA/efa: Implement functions that submit and complete admin commands

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

 



On 03-May-19 15:20, Jason Gunthorpe wrote:
> On Fri, May 03, 2019 at 12:37:13PM +0300, Gal Pressman wrote:
>> On 02-May-19 16:55, Jason Gunthorpe wrote:
>>> On Wed, May 01, 2019 at 01:48:20PM +0300, Gal Pressman wrote:
>>>
>>>> +static struct efa_comp_ctx *efa_com_submit_admin_cmd(struct efa_com_admin_queue *aq,
>>>> +						     struct efa_admin_aq_entry *cmd,
>>>> +						     size_t cmd_size_in_bytes,
>>>> +						     struct efa_admin_acq_entry *comp,
>>>> +						     size_t comp_size_in_bytes)
>>>> +{
>>>> +	struct efa_comp_ctx *comp_ctx;
>>>> +
>>>> +	spin_lock(&aq->sq.lock);
>>>> +	if (!test_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state)) {
>>>> +		ibdev_err(aq->efa_dev, "Admin queue is closed\n");
>>>> +		spin_unlock(&aq->sq.lock);
>>>> +		return ERR_PTR(-ENODEV);
>>>> +	}
>>>> +
>>>> +	comp_ctx = __efa_com_submit_admin_cmd(aq, cmd, cmd_size_in_bytes, comp,
>>>> +					      comp_size_in_bytes);
>>>> +	spin_unlock(&aq->sq.lock);
>>>> +	if (IS_ERR(comp_ctx))
>>>> +		clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
>>>> +
>>>> +	return comp_ctx;
>>>> +}
>>>
>>> [..]
>>>
>>>> +static void efa_com_admin_flush(struct efa_com_dev *edev)
>>>> +{
>>>> +	struct efa_com_admin_queue *aq = &edev->aq;
>>>> +
>>>> +	clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
>>>
>>> This scheme looks use after free racey to me..
>>
>> The running bit stops new admin commands from being submitted, clearly the exact
>> moment in which the bit is cleared is "racy" to submission of admin commands but
>> that is taken care of.
>>
>> The submission of an admin command is atomic as it is guarded by an admin queue
>> lock.
>> The same lock is acquired by this flow as well when flushing the admin queue.
>> After all admin commands have been aborted and we know for sure that
>> no new
> 
> The problem is the 'abort' does nothing to ensure parallel threads are
> no longer touching this memory, 

Which memory? The user threads touch the user allocated buffers which are not
being freed on admin queue destroy.

> it just plays with locks in a racy way
> for the above.

Sorry, I don't understand what that means.



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux