From: Michael Farrell Date: Mon, 4 Jun 2018 11:54:41 +0000 (+1000) Subject: Fixes a double-free issue in CloseProxmark: (#617) X-Git-Tag: v3.1.0~45 X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/2bb7f7e327df13f288b2b98a71bb390c516cc982 Fixes a double-free issue in CloseProxmark: (#617) - CloseProxmark now clears global state. - CloseProxmark now checks for a non-null serial_port before calling uart_close, to avoid unintentional double-free'ing serial_port. - main now calls CloseProxmark once. --- diff --git a/client/comms.c b/client/comms.c index eeaff79c..be0cfd10 100644 --- a/client/comms.c +++ b/client/comms.c @@ -334,13 +334,21 @@ bool OpenProxmark(void *port, bool wait_for_port, int timeout, bool flash_mode) void CloseProxmark(void) { conn.run = false; pthread_join(USB_communication_thread, NULL); - uart_close(sp); + + if (sp) { + uart_close(sp); + } + #ifdef __linux__ // Fix for linux, it seems that it is extremely slow to release the serial port file descriptor /dev/* if (serial_port_name) { unlink(serial_port_name); } #endif + + // Clean up our state + sp = NULL; + serial_port_name = NULL; } diff --git a/client/proxmark3.c b/client/proxmark3.c index 40c46613..6fb066e8 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -131,10 +131,6 @@ main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) { } write_history(".history"); - - if (usb_present) { - CloseProxmark(); - } if (script_file) { fclose(script_file);