From 037f83eb4464cced3e912865a70100585b885f0d Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 12 Mar 2010 17:34:56 +0200 Subject: [PATCH] wpa_cli: Fix detach race with forked monitor process Need to kill the monitor process before running detach command on the monitor connection to avoid race where the monitor process may end up getting the detach command result. --- wpa_supplicant/wpa_cli.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c index 454852c12..924ad96a1 100644 --- a/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c @@ -255,6 +255,15 @@ static void wpa_cli_close_connection(void) if (ctrl_conn == NULL) return; +#ifdef CONFIG_WPA_CLI_FORK + if (mon_pid) { + int status; + kill(mon_pid, SIGPIPE); + wait(&status); + mon_pid = 0; + } +#endif /* CONFIG_WPA_CLI_FORK */ + if (wpa_cli_attached) { wpa_ctrl_detach(interactive ? mon_conn : ctrl_conn); wpa_cli_attached = 0; @@ -265,14 +274,6 @@ static void wpa_cli_close_connection(void) wpa_ctrl_close(mon_conn); mon_conn = NULL; } -#ifdef CONFIG_WPA_CLI_FORK - if (mon_pid) { - int status; - kill(mon_pid, SIGPIPE); - wait(&status); - mon_pid = 0; - } -#endif /* CONFIG_WPA_CLI_FORK */ }