diff options
author | Vojtech Kral <vojtech@kral.hk> | 2019-02-27 18:32:17 +0300 |
---|---|---|
committer | Vojtech Kral <vojtech@kral.hk> | 2019-03-01 15:15:20 +0300 |
commit | b7941345d1f641b7a726a317fe055b5d7ed74e3a (patch) | |
tree | 47ddc3b3fbddd8622a55f686aec54d98a3205e85 /src/avrdude | |
parent | a61a72cc943ebaa4b6143aa69f6d77b3e37e3471 (diff) |
avrdude: Fix serial port handle leak in many places
Diffstat (limited to 'src/avrdude')
-rw-r--r-- | src/avrdude/arduino.c | 4 | ||||
-rw-r--r-- | src/avrdude/jtagmkII.c | 26 | ||||
-rw-r--r-- | src/avrdude/stk500.c | 8 | ||||
-rw-r--r-- | src/avrdude/stk500v2.c | 8 | ||||
-rw-r--r-- | src/avrdude/wiring.c | 4 |
5 files changed, 38 insertions, 12 deletions
diff --git a/src/avrdude/arduino.c b/src/avrdude/arduino.c index 5a9cb465e..53e5ed822 100644 --- a/src/avrdude/arduino.c +++ b/src/avrdude/arduino.c @@ -158,8 +158,10 @@ static int arduino_open(PROGRAMMER * pgm, char * port) return -1; } - if (stk500_getsync(pgm) < 0) + if (stk500_getsync(pgm) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } diff --git a/src/avrdude/jtagmkII.c b/src/avrdude/jtagmkII.c index 78c412ce6..d14c4ce74 100644 --- a/src/avrdude/jtagmkII.c +++ b/src/avrdude/jtagmkII.c @@ -1527,8 +1527,10 @@ static int jtagmkII_open(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -1579,8 +1581,10 @@ static int jtagmkII_open_dw(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -1631,8 +1635,10 @@ static int jtagmkII_open_pdi(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -1684,8 +1690,10 @@ static int jtagmkII_dragon_open(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -1737,8 +1745,10 @@ static int jtagmkII_dragon_open_dw(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -1790,8 +1800,10 @@ static int jtagmkII_dragon_open_pdi(PROGRAMMER * pgm, char * port) */ jtagmkII_drain(pgm, 0); - if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) + if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } @@ -3370,6 +3382,8 @@ static int jtagmkII_open32(PROGRAMMER * pgm, char * port) status = jtagmkII_getsync(pgm, -1); if(status < 0) return -1; + // FIXME: Error handling is bad here: memory leak in resp (?) and port not closed + // AVR32 "special" buf[0] = CMND_SET_PARAMETER; buf[1] = 0x2D; diff --git a/src/avrdude/stk500.c b/src/avrdude/stk500.c index 63deb228f..efb7078bc 100644 --- a/src/avrdude/stk500.c +++ b/src/avrdude/stk500.c @@ -669,11 +669,15 @@ static int stk500_open(PROGRAMMER * pgm, char * port) // MIB510 init if (strcmp(ldata(lfirst(pgm->id)), "mib510") == 0 && - mib510_isp(pgm, 1) != 0) + mib510_isp(pgm, 1) != 0) { + serial_close(&pgm->fd); return -1; + } - if (stk500_getsync(pgm) < 0) + if (stk500_getsync(pgm) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } diff --git a/src/avrdude/stk500v2.c b/src/avrdude/stk500v2.c index 691152b46..9bc629ba4 100644 --- a/src/avrdude/stk500v2.c +++ b/src/avrdude/stk500v2.c @@ -1695,8 +1695,10 @@ static int stk500v2_open(PROGRAMMER * pgm, char * port) stk500v2_drain(pgm, 0); if (pgm->bitclock != 0.0) { - if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) + if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) { + serial_close(&pgm->fd); return -1; + } } return 0; @@ -1753,8 +1755,10 @@ static int stk600_open(PROGRAMMER * pgm, char * port) stk500v2_drain(pgm, 0); if (pgm->bitclock != 0.0) { - if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) + if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) { + serial_close(&pgm->fd); return -1; + } } return 0; diff --git a/src/avrdude/wiring.c b/src/avrdude/wiring.c index 562a3f17c..85a8532d2 100644 --- a/src/avrdude/wiring.c +++ b/src/avrdude/wiring.c @@ -192,8 +192,10 @@ static int wiring_open(PROGRAMMER * pgm, char * port) /* drain any extraneous input */ stk500v2_drain(pgm, 0); - if (stk500v2_getsync(pgm) < 0) + if (stk500v2_getsync(pgm) < 0) { + serial_close(&pgm->fd); return -1; + } return 0; } |