mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-07 21:51:17 -07:00
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:
parent
ad939de501
commit
2bb7f7e327
2 changed files with 9 additions and 5 deletions
|
@ -334,13 +334,21 @@ bool OpenProxmark(void *port, bool wait_for_port, int timeout, bool flash_mode)
|
||||||
void CloseProxmark(void) {
|
void CloseProxmark(void) {
|
||||||
conn.run = false;
|
conn.run = false;
|
||||||
pthread_join(USB_communication_thread, NULL);
|
pthread_join(USB_communication_thread, NULL);
|
||||||
uart_close(sp);
|
|
||||||
|
if (sp) {
|
||||||
|
uart_close(sp);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
// Fix for linux, it seems that it is extremely slow to release the serial port file descriptor /dev/*
|
// Fix for linux, it seems that it is extremely slow to release the serial port file descriptor /dev/*
|
||||||
if (serial_port_name) {
|
if (serial_port_name) {
|
||||||
unlink(serial_port_name);
|
unlink(serial_port_name);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Clean up our state
|
||||||
|
sp = NULL;
|
||||||
|
serial_port_name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -132,10 +132,6 @@ main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) {
|
||||||
|
|
||||||
write_history(".history");
|
write_history(".history");
|
||||||
|
|
||||||
if (usb_present) {
|
|
||||||
CloseProxmark();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (script_file) {
|
if (script_file) {
|
||||||
fclose(script_file);
|
fclose(script_file);
|
||||||
script_file = NULL;
|
script_file = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue