diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2013-11-06 10:37:42 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2013-11-10 16:33:35 +0100 |
commit | aaba23a7f450d43d0062d66a712e5d0de62f7e87 (patch) | |
tree | 61cd188ce060ac926fe9c98b983ed0e8845993da | |
parent | 180563217f2579029424c9b79abe7bb2fcfeb51b (diff) |
term: fix error handling in hurdio_mdmctl
hurdio_mdmctl allows one to set and clear bits from the modem control
bit vector. However, plausible code paths exist that leave oldbits
uninitialized. Fix this by returning an error instead if retrieving
the oldbits failed and the bit set or clear operation was selected.
Found using the Clang Static Analyzer.
* term/hurdio.c (hurdio_mdmctl): Fix error handling.
-rw-r--r-- | term/hurdio.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/term/hurdio.c b/term/hurdio.c index 357ab383..b34854cd 100644 --- a/term/hurdio.c +++ b/term/hurdio.c @@ -585,10 +585,15 @@ hurdio_mdmctl (int how, int bits) { error_t err = tioctl_tiocmodg (ioport, &oldbits); if (err && (err == EMIG_BAD_ID || err == EOPNOTSUPP)) - tioc_caps &= ~TIOC_CAP_MODG; + { + tioc_caps &= ~TIOC_CAP_MODG; + return EOPNOTSUPP; + } else if (err) return err; } + else + return EOPNOTSUPP; } if (how == MDMCTL_BIS) |