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.
This commit is contained in:
Michael Farrell 2018-06-04 21:54:41 +10:00 committed by pwpiwi
parent ad939de501
commit 2bb7f7e327
2 changed files with 9 additions and 5 deletions

View file

@ -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;
}

View file

@ -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);