[PATCH V1] netifd: fix wdev->data lifetime
John Crispin
john at phrozen.org
Tue Jun 23 15:48:31 EDT 2020
On 23.06.20 11:40, John Crispin wrote:
> The reconf patch breaks wifi down under certain conditions. The root cause
> is that during reload the wdev state gets flushed. This has the effect, that
> the phy is lost from the state resulting in teardown breaking.
> Fix this by changing the lifetime of wdev->data.
>
> Signed-off-by: John Crispin <john at phrozen.org>
> ---
> Changes in V2
> * free() call was in the wrong place
>
> wireless.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/wireless.c b/wireless.c
> index efb7992..e295f28 100644
> --- a/wireless.c
> +++ b/wireless.c
> @@ -275,8 +275,6 @@ wireless_device_free_state(struct wireless_device *wdev)
> uloop_timeout_cancel(&wdev->script_check);
> uloop_timeout_cancel(&wdev->timeout);
> wireless_complete_kill_request(wdev);
> - free(wdev->data);
> - wdev->data = NULL;
> vlist_for_each_element(&wdev->interfaces, vif, node) {
> free(vif->data);
> vif->data = NULL;
> @@ -460,6 +458,7 @@ wireless_device_free(struct wireless_device *wdev)
> vlist_flush_all(&wdev->vlans);
> vlist_flush_all(&wdev->stations);
> avl_delete(&wireless_devices.avl, &wdev->node.avl);
> + free(wdev->data);
> free(wdev->config);
> free(wdev->prev_config);
> free(wdev);
> @@ -1414,6 +1413,8 @@ wireless_device_notify(struct wireless_device *wdev, struct blob_attr *data,
> if (*pdata)
> return UBUS_STATUS_INVALID_ARGUMENT;
>
> + if (*pdata)
> + free(*pdata);
> *pdata = blob_memdup(cur);
> if (vif)
> wireless_interface_set_data(vif);
>
thx, looks like the rest of the patch fixes the issue, been stress testing this today, will have a closer look tomorrow ..
John
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
http://lists.infradead.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list