Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1463335
| From | Peter Chen <hzpeterchen@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() |
| Date | 2016-08-16 03:50 +0200 |
| Message-ID | <s6BFU-52d-21@gated-at.bofh.it> (permalink) |
| References | <s6uXL-F9-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Mon, Aug 15, 2016 at 11:31:10AM -0700, Vaibhav Hiremath wrote:
> In case of HUB devices connected to USB ports, we may not have DT
> node representing it inside USB, and when devices connected to hub
> gets enumerated, call to usb_of_get_child_node() leads to NULL pointer
> dereference.
>
> In the usecase we have, where EHCI port is connected to USB HUB
> device, and downward ports of HUB are connected to further USB
> devices. When those devices gets enumerated, in order,
> 1. USB HUB ->
> -> Call to usb_of_get_child_node() is OK, as
> parent->dev.of_node is pointing to host node.
> 2. Devices connected to downward port of USB HUB
> -> Call to usb_of_get_child_node() leads to NULL
> pointer dereference as parent->dev.of_node = NULL,
> as USB HUB DTS node may be empty.
>
> Fix this NULL pointer dereference by adding check for pointer
> device_node inside usb_of_get_child_node() fn.
>
> Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
> ---
> Testing: I have build tested it against mainline.
>
> drivers/usb/core/of.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/usb/core/of.c b/drivers/usb/core/of.c
> index 2289700..dc667a3 100644
> --- a/drivers/usb/core/of.c
> +++ b/drivers/usb/core/of.c
> @@ -34,6 +34,9 @@ struct device_node *usb_of_get_child_node(struct device_node *parent,
> struct device_node *node;
> u32 port;
>
> + if (!parent)
> + return NULL;
> +
> for_each_child_of_node(parent, node) {
> if (!of_property_read_u32(node, "reg", &port)) {
> if (port == portnum)
I am afraid I can't reproduce it, would you please show me your dump
when null pointer dereference occurs? From what I find the
__of_get_next_child checks null pointer for parent node.
--
Best Regards,
Peter Chen
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2016-08-15 20:40 +0200
Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Greg KH <gregkh@linuxfoundation.org> - 2016-08-15 20:50 +0200
Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2016-08-15 21:20 +0200
Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Alan Stern <stern@rowland.harvard.edu> - 2016-08-15 21:40 +0200
Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Peter Chen <hzpeterchen@gmail.com> - 2016-08-16 03:50 +0200
Re: [PATCH] USB: core: of: Check device_node before parsing in usb_of_get_child_node() Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2016-08-16 23:30 +0200
csiph-web