mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-09-13 11:07:46 +10:00
NFC: nci: uart: Set tty->disc_data only in success path
commitfc27ab4890
upstream. Setting tty->disc_data before opening the NCI device means we need to clean it up on error paths. This also opens some short window if device starts sending data, even before NCIUARTSETDRIVER IOCTL succeeded (broken hardware?). Close the window by exposing tty->disc_data only on the success path, when opening of the NCI device and try_module_get() succeeds. The code differs in error path in one aspect: tty->disc_data won't be ever assigned thus NULL-ified. This however should not be relevant difference, because of "tty->disc_data=NULL" in nci_uart_tty_open(). Cc: Linus Torvalds <torvalds@linuxfoundation.org> Fixes:9961127d4b
("NFC: nci: add generic uart support") Cc: <stable@vger.kernel.org> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patch.msgid.link/20250618073649.25049-2-krzysztof.kozlowski@linaro.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d9a55869d8
commit
a514fca2b8
@ -131,22 +131,22 @@ static int nci_uart_set_driver(struct tty_struct *tty, unsigned int driver)
|
||||
|
||||
memcpy(nu, nci_uart_drivers[driver], sizeof(struct nci_uart));
|
||||
nu->tty = tty;
|
||||
tty->disc_data = nu;
|
||||
skb_queue_head_init(&nu->tx_q);
|
||||
INIT_WORK(&nu->write_work, nci_uart_write_work);
|
||||
spin_lock_init(&nu->rx_lock);
|
||||
|
||||
ret = nu->ops.open(nu);
|
||||
if (ret) {
|
||||
tty->disc_data = NULL;
|
||||
kfree(nu);
|
||||
return ret;
|
||||
} else if (!try_module_get(nu->owner)) {
|
||||
nu->ops.close(nu);
|
||||
tty->disc_data = NULL;
|
||||
kfree(nu);
|
||||
return -ENOENT;
|
||||
}
|
||||
return ret;
|
||||
tty->disc_data = nu;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------ LDISC part ------ */
|
||||
|
Loading…
Reference in New Issue
Block a user