Commit 1d7b33f7 authored by Inaky Perez-Gonzalez's avatar Inaky Perez-Gonzalez Committed by David S. Miller

wimax: fix oops in wimax_dev_get_by_genl_info() when looking up non-wimax iface

When a non-wimax interface is looked up by the stack, a bad pointer is
returned when the looked-up interface is not found in the list (of
registered WiMAX interfaces). This causes an oops in the caller when
trying to use the pointer.

Fix by properly setting the pointer to NULL if we don't exit from the
list_for_each() with a found entry.
Signed-off-by: default avatarInaky Perez-Gonzalez <inaky@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent df0bca04
...@@ -94,12 +94,13 @@ struct wimax_dev *wimax_dev_get_by_genl_info( ...@@ -94,12 +94,13 @@ struct wimax_dev *wimax_dev_get_by_genl_info(
list_for_each_entry(wimax_dev, &wimax_id_table, id_table_node) { list_for_each_entry(wimax_dev, &wimax_id_table, id_table_node) {
if (wimax_dev->net_dev->ifindex == ifindex) { if (wimax_dev->net_dev->ifindex == ifindex) {
dev_hold(wimax_dev->net_dev); dev_hold(wimax_dev->net_dev);
break; goto found;
} }
} }
if (wimax_dev == NULL) wimax_dev = NULL;
d_printf(1, NULL, "wimax: no devices found with ifindex %d\n", d_printf(1, NULL, "wimax: no devices found with ifindex %d\n",
ifindex); ifindex);
found:
spin_unlock(&wimax_id_table_lock); spin_unlock(&wimax_id_table_lock);
d_fnend(3, NULL, "(info %p ifindex %d) = %p\n", d_fnend(3, NULL, "(info %p ifindex %d) = %p\n",
info, ifindex, wimax_dev); info, ifindex, wimax_dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment