Re: [PATCH for-rc] RDMA/cma: fix race between addr_handler and resolve_route

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

 




> On 14 Apr 2020, at 14:50, Jason Gunthorpe <jgg@xxxxxxxxxxxx> wrote:
> 
> On Tue, Apr 14, 2020 at 12:34:35PM +0200, Håkon Bugge wrote:
> 
>>>>>> Shall I make a v2 base on next based on this idea, or do you have
>>>>>> something coming?
>>>>> 
>>>>> Sure, I have nothing :)
>>>>> 
>>>>> Also that rdma_destroy_id in addr_handler looks wrong.. ie we still
>>>>> retain pointers to the rdma_cm_id it destroys inside the struct
>>>>> ucma_context, don't we?
>>>> 
>>>> On entry from user-space, we use the u32 id and looks it up in the
>>>> XArray. But if rdma_destoy_id() is called asynchronously called
>>>> between ucma_get_ctx_dev() and the de-reference of ctx->cm_id, we
>>>> are toast.
>>> 
>>> Is that what happens on the addr_handler path?
>> 
>> No, there, the main problem is the revert of the state
>> transitions. The first transition enables rdma_resolve_route() to
>> pass its gate (i.e. state == ADDR_RESOLVED). Then it thinks the
>> address is resolved, but the addr_handler changes its mind
>> afterwards.
> 
> That is a problem, but the call to rdma_destroy_id looks like another
> problem

I am not sure. Almost all events/incoming packets, can, after the cm_id's event_handler is called from cma_ib_handler(), call rdma_destroy_id(). I assume the refcounting takes care of this.


Thxs, Håkon






[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