Re: [PATCH] nfc/nci: fix task hung in nfc_targets_found

From: Tetsuo Handa
Date: Mon Jan 15 2024 - 06:09:21 EST


On 2024/01/15 18:36, Krzysztof Kozlowski wrote:
>> diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
>> index 6c9592d05120..9a277228a875 100644
>> --- a/net/nfc/nci/core.c
>> +++ b/net/nfc/nci/core.c
>> @@ -145,6 +145,8 @@ inline int nci_request(struct nci_dev *ndev,
>> {
>> int rc;
>>
>> + if (test_bit(NCI_UNREG, &ndev->flags))
>> + return -ENODEV;
>
> nci_close_device() clears the NCI_UP, which is tested here, just after
> acquiring mutex. And there is explicit comment about it just below your
> code. Why it is not relevant?

Because the deadlock happens at mutex_lock(&ndev->req_lock), which is
before test_bit(NCI_UP, &ndev->flags) is called. Please see
https://lkml.kernel.org/r/d314e471-0251-461e-988d-70add0c6ebf6@xxxxxxxxxxxxxxxxxxx .

>
> Your code looks really unnecessary, at least with that code flow from
> commit msg. Especially considering you do it outside of mutex, so how
> does it solve anything?
>
> Best regards,
> Krzysztof
>