From e6f6ffc7c5f1ec2a5cbf95a82fe35520e16b32da Mon Sep 17 00:00:00 2001 From: stefanct Date: Tue, 27 May 2014 22:10:15 +0000 Subject: CID1129998/1129999: Unchecked return value from library. Check return values of various fcntl() invocations in serialport_config(), serialport_read_nonblock() and serialport_write_nonblock(). Also, remove some superfluous print conversion specifiers and refine messages. Signed-off-by: Stefan Reinauer Acked-by: Stefan Tauner git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1803 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- serial.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/serial.c b/serial.c index f7d8e5e..e4e911d 100644 --- a/serial.c +++ b/serial.c @@ -181,7 +181,10 @@ int serialport_config(fdtype fd, unsigned int baud) msg_pdbg("Baud rate is %ld.\n", dcb.BaudRate); #else struct termios wanted, observed; - fcntl(fd, F_SETFL, 0); + if (fcntl(fd, F_SETFL, 0) != 0) { + msg_perr_strerror("Could not clear serial port mode: "); + return 1; + } if (tcgetattr(fd, &observed) != 0) { msg_perr_strerror("Could not fetch original serial port configuration: "); return 1; @@ -419,14 +422,21 @@ int serialport_read_nonblock(unsigned char *c, unsigned int readcnt, unsigned in return -1; } if(!SetCommTimeouts(sp_fd, &newTimeout)) { + msg_perr_strerror("Could not set serial port timeout settings: "); + return -1; + } #else ssize_t rv; const int flags = fcntl(sp_fd, F_GETFL); + if (flags == -1) { + msg_perr_strerror("Could not get serial port mode: "); + return -1; + } if (fcntl(sp_fd, F_SETFL, flags | O_NONBLOCK) != 0) { -#endif - msg_perr_strerror("Could not set serial port timeout settings %s"); + msg_perr_strerror("Could not set serial port mode to non-blocking: "); return -1; } +#endif int i; int rd_bytes = 0; @@ -458,12 +468,15 @@ int serialport_read_nonblock(unsigned char *c, unsigned int readcnt, unsigned in /* restore original blocking behavior */ #ifdef _WIN32 if (!SetCommTimeouts(sp_fd, &oldTimeout)) { + msg_perr_strerror("Could not restore serial port timeout settings: "); + ret = -1; + } #else if (fcntl(sp_fd, F_SETFL, flags) != 0) { -#endif - msg_perr_strerror("Could not restore serial port timeout settings: %s\n"); + msg_perr_strerror("Could not restore serial port mode to blocking: "); ret = -1; } +#endif return ret; } @@ -495,7 +508,14 @@ int serialport_write_nonblock(const unsigned char *buf, unsigned int writecnt, u #else ssize_t rv; const int flags = fcntl(sp_fd, F_GETFL); - fcntl(sp_fd, F_SETFL, flags | O_NONBLOCK); + if (flags == -1) { + msg_perr_strerror("Could not get serial port mode: "); + return -1; + } + if (fcntl(sp_fd, F_SETFL, flags | O_NONBLOCK) != 0) { + msg_perr_strerror("Could not set serial port mode to non-blocking: "); + return -1; + } #endif int i; @@ -531,10 +551,13 @@ int serialport_write_nonblock(const unsigned char *buf, unsigned int writecnt, u #ifdef _WIN32 if (!SetCommTimeouts(sp_fd, &oldTimeout)) { msg_perr_strerror("Could not restore serial port timeout settings: "); + return -1; + } #else if (fcntl(sp_fd, F_SETFL, flags) != 0) { -#endif + msg_perr_strerror("Could not restore serial port blocking behavior: "); return -1; } +#endif return ret; } -- cgit v1.2.1