NFC: fix device allocation and nfcmrvl crashes
Subsystems (4)
v2 cover NFC: fix device allocation and nfcmrvl crashes
This started out with the observation that the nfcmrvl_uart driver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).
While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the n_hci line discipline for different ttys without any actual NFC hardware connected.
Johan
Changes in v2
- fix typo in commit message (1/8)
- release reset gpio in error paths (3/8)
- fix description of patch impact (3/8)
- allow gpio 0 to be used for reset signalling (8/8, new)
Johan Hovold (8):
NFC: fix broken device allocation
NFC: nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC: nfcmrvl_uart: fix device-node leak during probe
NFC: nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
drivers/nfc/nfcmrvl/fw_dnld.c | 7 ++++-- drivers/nfc/nfcmrvl/main.c | 40 +++++++++++++++++++---------------- drivers/nfc/nfcmrvl/uart.c | 11 ++++++---- drivers/nfc/nfcmrvl/usb.c | 4 +--- include/linux/platform_data/nfcmrvl.h | 2 +- net/nfc/core.c | 31 +++++++++++++++------------ net/nfc/nci/core.c | 3 +-- 7 files changed, 55 insertions(+), 43 deletions(-)
Signature · 1 line
2.12.2
PATCH v2 1/8 NFC: fix broken device allocation
Commit 7eda8b8e9677 ("NFC: Use IDR library to assing NFC devices IDs") moved device-id allocation and struct-device initialisation from nfc_allocate_device() to nfc_register_device().
This broke just about every nfc-device-registration error path, which continue to call nfc_free_device() that tries to put the device reference of the now uninitialised (but zeroed) struct device:
kobject: '(null)' (ce316420): is not initialized, yet kobject_put() is being called.
The late struct-device initialisation also meant that various work queues whose names are derived from the nfc device name were also misnamed:
421 root 0 SW< [(null)_nci_cmd_] 422 root 0 SW< [(null)_nci_rx_w] 423 root 0 SW< [(null)_nci_tx_w]
Move the id-allocation and struct-device initialisation back to nfc_allocate_device() and fix up the single call site which did not use nfc_free_device() in its error path.
--- net/nfc/core.c | 31 ++++++++++++++++++------------- net/nfc/nci/core.c | 3 +-- 2 files changed, 19 insertions(+), 15 deletions(-)
net/nfc/core.c +18 -13
@@ -982,6 +982,8 @@ static void nfc_release(struct device *d)kfree (se); } +ida_simple_remove (&nfc_index_ida, dev->idx); +kfree (dev); }
@@ -1056,6 +1058,7 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops, int tx_headroom, int tx_tailroom) {struct nfc_dev *dev; +int rc;if (!ops->start_poll || !ops->stop_poll || !ops->activate_target || !ops->deactivate_target || !ops->im_transceive)
@@ -1068,6 +1071,15 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops,if (!dev)return NULL ; + rc =ida_simple_get (&nfc_index_ida,0 ,0 ,GFP_KERNEL ); +if (rc <0 ) + goto err_free_dev; + dev->idx = rc; + + dev->dev.class = &nfc_class; +dev_set_name (&dev->dev,"nfc%d" , dev->idx); +device_initialize (&dev->dev); + dev->ops = ops; dev->supported_protocols = supported_protocols; dev->tx_headroom = tx_headroom;
@@ -1090,6 +1102,11 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops, }return dev; + +err_free_dev: +kfree (dev); + +return ERR_PTR (rc); }EXPORT_SYMBOL (nfc_allocate_device);
@@ -1104,14 +1121,6 @@ int nfc_register_device(struct nfc_dev *dev)pr_debug ("dev_name=%s\n" ,dev_name (&dev->dev)); - dev->idx =ida_simple_get (&nfc_index_ida,0 ,0 ,GFP_KERNEL ); -if (dev->idx <0 ) -return dev->idx; - - dev->dev.class = &nfc_class; -dev_set_name (&dev->dev,"nfc%d" , dev->idx); -device_initialize (&dev->dev); -mutex_lock (&nfc_devlist_mutex); nfc_devlist_generation++; rc =device_add (&dev->dev);
@@ -1149,12 +1158,10 @@ EXPORT_SYMBOL(nfc_register_device);*/ void nfc_unregister_device (struct nfc_dev *dev) { -int rc, id; +int rc;pr_debug ("dev_name=%s\n" ,dev_name (&dev->dev)); - id = dev->idx; -if (dev->rfkill) {rfkill_unregister (dev->rfkill);rfkill_destroy (dev->rfkill);
@@ -1179,8 +1186,6 @@ void nfc_unregister_device(struct nfc_dev *dev) nfc_devlist_generation++;device_del (&dev->dev);mutex_unlock (&nfc_devlist_mutex); - -ida_simple_remove (&nfc_index_ida, id); }EXPORT_SYMBOL (nfc_unregister_device);
net/nfc/nci/core.c +1 -2
@@ -1173,8 +1173,7 @@ struct nci_dev *nci_allocate_device(struct nci_ops *ops,return ndev; free_nfc: -kfree (ndev->nfc_dev); - +nfc_free_device (ndev->nfc_dev); free_nci:kfree (ndev);return NULL ;
Signature · 1 line
2.12.2
PATCH v2 2/8 NFC: nfcmrvl_uart: add missing tty-device sanity check
In reply to Johan HovoldMake sure to check the tty-device pointer before trying to access the parent device to avoid dereferencing a NULL-pointer when the tty is one end of a Unix98 pty.
--- drivers/nfc/nfcmrvl/uart.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/nfc/nfcmrvl/uart.c +4 -4
@@ -109,6 +109,7 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu)struct nfcmrvl_private *priv;struct nfcmrvl_platform_data *pdata =NULL ;struct nfcmrvl_platform_data config; +struct device *dev = nu->tty->dev;/* * Platform data cannot be used here since usually it is already used
@@ -116,9 +117,8 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu)* and check if DT entries were added. */ -if (nu->tty->dev->parent && nu->tty->dev->parent->of_node) -if (nfcmrvl_uart_parse_dt (nu->tty->dev->parent->of_node, - &config) ==0 ) +if (dev && dev->parent && dev->parent->of_node) +if (nfcmrvl_uart_parse_dt (dev->parent->of_node, &config) ==0 ) pdata = &config;if (!pdata) {
@@ -131,7 +131,7 @@ static int nfcmrvl_nci_uart_open(struct nci_uart *nu) } priv =nfcmrvl_nci_register_dev (NFCMRVL_PHY_UART , nu, &uart_ops, - nu->tty->dev, pdata); + dev, pdata);if (IS_ERR (priv))return PTR_ERR (priv);
Signature · 1 line
2.12.2
PATCH v2 3/8 NFC: nfcmrvl: do not use device-managed resources
In reply to Johan HovoldThis specifically fixes resource leaks in the registration error paths.
Device-managed resources is a bad fit for this driver as devices can be registered from the n_nci line discipline. Firstly, a tty may not even have a corresponding device (should it be part of a Unix98 pty) something which would lead to a NULL-pointer dereference when registering resources.
Secondly, if the tty has a class device, its lifetime exceeds that of the line discipline, which means that resources would leak every time the line discipline is closed (or if registration fails).
Currently, the devres interface was only being used to request a reset gpio despite the fact that it was already explicitly freed in nfcmrvl_nci_unregister_dev() (along with the private data), something which also prevented the resource leak at close.
Note that the driver treats gpio number 0 as invalid despite it being perfectly valid. This will be addressed in a follow-up patch.
--- drivers/nfc/nfcmrvl/main.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
drivers/nfc/nfcmrvl/main.c +11 -8
@@ -124,12 +124,13 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,memcpy (&priv->config, pdata,sizeof (*pdata));if (priv->config.reset_n_io) { - rc =devm_gpio_request_one (dev, - priv->config.reset_n_io, -GPIOF_OUT_INIT_LOW , -"nfcmrvl_reset_n" ); -if (rc <0 ) + rc =gpio_request_one (priv->config.reset_n_io, +GPIOF_OUT_INIT_LOW , +"nfcmrvl_reset_n" ); +if (rc <0 ) { + priv->config.reset_n_io =0 ;nfc_err (dev,"failed to request reset_n io\n" ); + } }if (phy ==NFCMRVL_PHY_SPI ) {
@@ -154,7 +155,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,if (!priv->ndev) {nfc_err (dev,"nci_allocate_device failed\n" ); rc = -ENOMEM ; - goto error; + goto error_free_gpio; }nci_set_drvdata (priv->ndev, priv);
@@ -179,7 +180,9 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy, error_free_dev:nci_free_device (priv->ndev); -error: +error_free_gpio: +if (priv->config.reset_n_io) +gpio_free (priv->config.reset_n_io);kfree (priv);return ERR_PTR (rc); }
@@ -195,7 +198,7 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv)nfcmrvl_fw_dnld_deinit (priv);if (priv->config.reset_n_io) -devm_gpio_free (priv->dev, priv->config.reset_n_io); +gpio_free (priv->config.reset_n_io);nci_unregister_device (ndev);nci_free_device (ndev);
Signature · 1 line
2.12.2
PATCH v2 4/8 NFC: nfcmrvl: use nfc-device for firmware download
In reply to Johan HovoldUse the nfc- rather than phy-device in firmware-management code that needs a valid struct device.
This specifically fixes a NULL-pointer dereference in nfcmrvl_fw_dnld_init() during registration when the underlying tty is one end of a Unix98 pty.
Note that the driver still uses the phy device for any debugging, which is fine for now.
--- drivers/nfc/nfcmrvl/fw_dnld.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/nfc/nfcmrvl/fw_dnld.c +5 -2
@@ -459,7 +459,7 @@ int nfcmrvl_fw_dnld_init(struct nfcmrvl_private *priv)INIT_WORK (&priv->fw_dnld.rx_work, fw_dnld_rx_work);snprintf (name,sizeof (name),"%s_nfcmrvl_fw_dnld_rx_wq" , -dev_name (priv->dev)); +dev_name (&priv->ndev->nfc_dev->dev)); priv->fw_dnld.rx_wq =create_singlethread_workqueue (name);if (!priv->fw_dnld.rx_wq)return -ENOMEM ;
@@ -496,6 +496,7 @@ int nfcmrvl_fw_dnld_start(struct nci_dev *ndev, const char *firmware_name) {struct nfcmrvl_private *priv =nci_get_drvdata (ndev);struct nfcmrvl_fw_dnld *fw_dnld = &priv->fw_dnld; +int res;if (!priv->support_fw_dnld)return -ENOTSUPP ;
@@ -511,7 +512,9 @@ int nfcmrvl_fw_dnld_start(struct nci_dev *ndev, const char *firmware_name)*/ /* Retrieve FW binary */ -if (request_firmware (&fw_dnld->fw, firmware_name, priv->dev) <0 ) { + res =request_firmware (&fw_dnld->fw, firmware_name, + &ndev->nfc_dev->dev); +if (res <0 ) {nfc_err (priv->dev,"failed to retrieve FW %s" , firmware_name);return -ENOENT ; }
Signature · 1 line
2.12.2
PATCH v2 5/8 NFC: nfcmrvl: fix firmware-management initialisation
In reply to Johan HovoldThe nci-device was never deregistered in the event that fw-initialisation failed.
Fix this by moving the firmware initialisation before device registration since the firmware work queue should be available before registering.
Note that this depends on a recent fix that moved device-name initialisation back to to nci_allocate_device() as the firmware-workqueue name is now derived from the nfc-device name.
--- drivers/nfc/nfcmrvl/main.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/nfc/nfcmrvl/main.c +7 -6
@@ -158,26 +158,28 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy, goto error_free_gpio; } + rc =nfcmrvl_fw_dnld_init (priv); +if (rc) { +nfc_err (dev,"failed to initialize FW download %d\n" , rc); + goto error_free_dev; + } +nci_set_drvdata (priv->ndev, priv); rc =nci_register_device (priv->ndev);if (rc) {nfc_err (dev,"nci_register_device failed %d\n" , rc); - goto error_free_dev; + goto error_fw_dnld_deinit; }/* Ensure that controller is powered off */ nfcmrvl_chip_halt (priv); - rc =nfcmrvl_fw_dnld_init (priv); -if (rc) { -nfc_err (dev,"failed to initialize FW download %d\n" , rc); - goto error_free_dev; - }
PATCH v2 6/8 NFC: nfcmrvl_uart: fix device-node leak during probe
In reply to Johan HovoldMake sure to release the device-node reference when done parsing the node.
--- drivers/nfc/nfcmrvl/uart.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/nfc/nfcmrvl/uart.c +3 -0
@@ -84,6 +84,7 @@ static int nfcmrvl_uart_parse_dt(struct device_node *node, ret =nfcmrvl_parse_dt (matched_node, pdata);if (ret <0 ) {pr_err ("Failed to get generic entries\n" ); +of_node_put (matched_node);return ret; }
@@ -97,6 +98,8 @@ static int nfcmrvl_uart_parse_dt(struct device_node *node,else pdata->break_control =0 ; +of_node_put (matched_node); +return 0 ; }
Signature · 1 line
2.12.2
PATCH v2 7/8 NFC: nfcmrvl_usb: use interface as phy device
In reply to Johan HovoldUse the USB-interface rather than parent USB-device device, which is what this driver binds to, when registering the nci device.
Note that using the right device is important when dealing with device- managed resources as the interface can be unbound independently of the parent device.
Also note that private device pointer had already been set by nfcmrvl_nci_register_dev() so the redundant assignment can therefore be removed.
--- drivers/nfc/nfcmrvl/usb.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/nfc/nfcmrvl/usb.c +1 -3
@@ -341,15 +341,13 @@ static int nfcmrvl_probe(struct usb_interface *intf,init_usb_anchor (&drv_data->deferred); priv =nfcmrvl_nci_register_dev (NFCMRVL_PHY_USB , drv_data, &usb_ops, - &drv_data->udev->dev, &config); + &intf->dev, &config);if (IS_ERR (priv))return PTR_ERR (priv); drv_data->priv = priv; drv_data->priv->support_fw_dnld = false; - priv->dev = &drv_data->udev->dev; -usb_set_intfdata (intf, drv_data);return 0 ;
Signature · 1 line
2.12.2
PATCH v2 8/8 NFC: nfcmrvl: allow gpio 0 for reset signalling
In reply to Johan HovoldAllow gpio 0 to be used for reset signalling, and instead use negative errnos to disable the reset functionality.
--- drivers/nfc/nfcmrvl/main.c | 9 ++++----- include/linux/platform_data/nfcmrvl.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-)
drivers/nfc/nfcmrvl/main.c +4 -5
@@ -123,12 +123,12 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,memcpy (&priv->config, pdata,sizeof (*pdata)); -if (priv->config.reset_n_io) { +if (gpio_is_valid (priv->config.reset_n_io)) { rc =gpio_request_one (priv->config.reset_n_io,GPIOF_OUT_INIT_LOW ,"nfcmrvl_reset_n" );if (rc <0 ) { - priv->config.reset_n_io =0 ; + priv->config.reset_n_io = -EINVAL ;nfc_err (dev,"failed to request reset_n io\n" ); } }
@@ -183,7 +183,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy, error_free_dev:nci_free_device (priv->ndev); error_free_gpio: -if (priv->config.reset_n_io) +if (gpio_is_valid (priv->config.reset_n_io))gpio_free (priv->config.reset_n_io);kfree (priv);return ERR_PTR (rc);
@@ -199,7 +199,7 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv)nfcmrvl_fw_dnld_deinit (priv); -if (priv->config.reset_n_io) +if (gpio_is_valid (priv->config.reset_n_io))gpio_free (priv->config.reset_n_io);nci_unregister_device (ndev);
@@ -267,7 +267,6 @@ int nfcmrvl_parse_dt(struct device_node *node, reset_n_io =of_get_named_gpio (node,"reset-n-io" ,0 );if (reset_n_io <0 ) {pr_info ("no reset-n-io config\n" ); - reset_n_io =0 ; }else if (!gpio_is_valid (reset_n_io)) {pr_err ("invalid reset-n-io GPIO\n" );return reset_n_io;
include/linux/platform_data/nfcmrvl.h +1 -1
@@ -23,7 +23,7 @@ struct nfcmrvl_platform_data {*/ /* GPIO that is wired to RESET_N signal */ -unsigned int reset_n_io; +int reset_n_io;/* Tell if transport is muxed in HCI one */ unsigned int hci_muxed;
Signature · 1 line
2.12.2
Quoted 13 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.
Quoted 9 lines
Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Any chance of getting these into 4.12, Samuel?
Note that patches 2 and 4 fixes NULL-derefs that can be triggered by an unprivileged user.
Thanks,
Johan
Hi Johan,
Quoted 24 lines · Johan Hovold
Quoted 13 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.Quoted 9 lines
Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Quoted 1 line
Any chance of getting these into 4.12, Samuel?
I have yours and Mark Greer patchset pending. I'll push them to nfc-next and see if I can send another pull request to Dave by the end of this week.
Cheers,
Samuel.
Quoted 25 lines · Samuel Ortiz
Quoted 24 lines · Johan Hovold
Quoted 22 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Quoted 5 lines
Quoted 1 line
Any chance of getting these into 4.12, Samuel?
I have yours and Mark Greer patchset pending. I'll push them to nfc-next and see if I can send another pull request to Dave by the end of this week.
Any progress on this now that we got another week?
Thanks,
Johan
Samuel Ortiz
AppliedHi Johan,
Quoted 23 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.Johan
Changes in v2
- fix typo in commit message (1/8)
- release reset gpio in error paths (3/8)
- fix description of patch impact (3/8)
- allow gpio 0 to be used for reset signalling (8/8, new)
Quoted 9 lines
Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Applied, thanks.
Cheers,
Samuel.
Hi Samuel,
Quoted 35 lines · Samuel Ortiz
Hi Johan,
Quoted 23 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.Johan
Changes in v2
- fix typo in commit message (1/8)
- release reset gpio in error paths (3/8)
- fix description of patch impact (3/8)
- allow gpio 0 to be used for reset signalling (8/8, new)Quoted 9 lines
Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Quoted 1 line
Applied, thanks.
These never made it into net-next and 4.12-rc1, so will you be sending them on as fixes for 4.12-rc instead?
Thanks,
Johan
Hi Samuel,
Quoted 36 lines · Johan Hovold
Quoted 35 lines · Samuel Ortiz
Hi Johan,
Quoted 32 lines · Johan Hovold
This started out with the observation that the
nfcmrvl_uartdriver unconditionally dereferenced the tty class device despite the fact that not every tty has an associated struct device (Unix98 ptys). Some further changes were needed in the common nfcmrvl code to fully address this, some of which also incidentally fixed a few related bugs (e.g. resource leaks in error paths).While fixing this I stumbled over a regression in NFC core that lead to broken registration error paths and misnamed workqueues.
Note that this has only been tested by configuring the
n_hciline discipline for different ttys without any actual NFC hardware connected.Johan
Changes in v2
- fix typo in commit message (1/8)
- release reset gpio in error paths (3/8)
- fix description of patch impact (3/8)
- allow gpio 0 to be used for reset signalling (8/8, new)Johan Hovold (8):
NFC: fix broken device allocation
NFC:nfcmrvl_uart: add missing tty-device sanity check
NFC: nfcmrvl: do not use device-managed resources
NFC: nfcmrvl: use nfc-device for firmware download
NFC: nfcmrvl: fix firmware-management initialisation
NFC:nfcmrvl_uart: fix device-node leak during probe
NFC:nfcmrvl_usb: use interface as phy device
NFC: nfcmrvl: allow gpio 0 for reset signalling
Quoted 4 lines
Quoted 1 line
Applied, thanks.
These never made it into net-next and 4.12-rc1, so will you be sending them on as fixes for 4.12-rc instead?
Thought I'd send another reminder: will you forward these fixes (that are still in your nfc-next tree) for 4.12?
As this series fix a crash that can be triggered by an unprivileged user, I really think the first five patches at least need to go into 4.12.
Thanks,
Johan