From patchwork Tue May 29 10:01:19 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: P2P:Fixing the supplicant crash if a group interface has been removed in the event handler itself Date: Tue, 29 May 2012 00:01:19 -0000 From: Neeraj Garg X-Patchwork-Id: 161724 Message-Id: To: "hostap@lists.shmoo.com" We hit a scenario where a PBC overlap was detected in the context of EVENT_SCAN_RESULTS. When in the event handler of do_process_drv_event, an overlap is detected, it will cause GROUP-FORMATION-FAILURE and that will remove the group interface and then corresponding drv pointer from the list global->interfaces will also get removed. (code path wpas_p2p_group_delete->wpa_supplicant_remove_iface -> wpa_supplicant_deinit_iface -> wpa_drv_deinit ->wpa_driver_nl80211_deinit) In my opinion it is safe to do break, as the event had an ifidx no. and once that has been found, event is completed. There is no need to go for checking other interfaces. Plz let me know if my understanding is wrong. >From 01b4bf60d99f3b3fa41b057e7bae184db08f5707 Mon Sep 17 00:00:00 2001 From: Neeraj Garg Date: Tue, 29 May 2012 15:23:51 +0530 Subject: [PATCH] P2P:Fixing the supplicant crash if a group interface has been removed in the event handler itself Signed-off-by: Neeraj Garg --- src/drivers/driver_nl80211.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 693a885..a6cb0b8 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -2210,8 +2210,10 @@ static int process_global_event(struct nl_msg *msg, void *arg) dl_list_for_each(drv, &global->interfaces, struct wpa_driver_nl80211_data, list) { if (ifidx == -1 || ifidx == drv->ifindex || - have_ifidx(drv, ifidx)) + have_ifidx(drv, ifidx)) { do_process_drv_event(drv, gnlh->cmd, tb); + break; + } } return NL_SKIP;