[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <84cf637f-4cda-a7ad-a5d1-484254ef16a5@suse.de>
Date: Mon, 15 Nov 2021 17:32:35 +0300
From: Denis Kirjanov <dkirjanov@...e.de>
To: Lin Ma <linma@....edu.cn>, netdev@...r.kernel.org
Cc: krzysztof.kozlowski@...onical.com, davem@...emloft.net,
kuba@...nel.org, jirislaby@...nel.org, gregkh@...uxfoundation.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v0] NFC: reorganize the functions in nci_request
11/15/21 5:29 PM, Lin Ma пишет:
> There is a possible data race as shown below:
>
> thread-A in nci_request() | thread-B in nci_close_device()
> | mutex_lock(&ndev->req_lock);
> test_bit(NCI_UP, &ndev->flags); |
> ... | test_and_clear_bit(NCI_UP, &ndev->flags)
> mutex_lock(&ndev->req_lock); |
> |
>
> This race will allow __nci_request() to be awaked while the device is
> getting removed.
>
> Similar to commit e2cb6b891ad2 ("bluetooth: eliminate the potential race
> condition when removing the HCI controller"). this patch alters the
> function sequence in nci_request() to prevent the data races between the
> nci_close_device().
Please add Fixes tag
>
> Signed-off-by: Lin Ma <linma@....edu.cn>
> ---
> net/nfc/nci/core.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
> index 6fd873aa86be..2ab2d6a1a143 100644
> --- a/net/nfc/nci/core.c
> +++ b/net/nfc/nci/core.c
> @@ -144,12 +144,15 @@ inline int nci_request(struct nci_dev *ndev,
> {
> int rc;
>
> - if (!test_bit(NCI_UP, &ndev->flags))
> - return -ENETDOWN;
> -
> /* Serialize all requests */
> mutex_lock(&ndev->req_lock);
> - rc = __nci_request(ndev, req, opt, timeout);
> + /* check the state after obtaing the lock against any races
> + * from nci_close_device when the device gets removed.
> + */
> + if (test_bit(NCI_UP, &ndev->flags))
> + rc = __nci_request(ndev, req, opt, timeout);
> + else
> + rc = -ENETDOWN;
> mutex_unlock(&ndev->req_lock);
>
> return rc;
>
Powered by blists - more mailing lists