diff options
author | Corey Minyard <cminyard@mvista.com> | 2022-07-31 17:58:09 -0500 |
---|---|---|
committer | Corey Minyard <cminyard@mvista.com> | 2022-08-01 06:40:50 -0500 |
commit | 3fde641e7286f9b968bdb3b4b922c6465f2a9abc (patch) | |
tree | 93976fc3c0c606515221aae4f182e635aa29bc2f /hw/ipmi | |
parent | cc42559ab129a15554cc485ea9265e34dde7ab5b (diff) |
ipmi:smbus: Add a check around a memcpy
In one case:
memcpy(sid->inmsg + sid->inlen, buf, len);
if len == 0 then sid->inmsg + sig->inlen can point to one past the inmsg
array if the array is full. We have to allow len == 0 due to some
vagueness in the spec, but we don't have to call memcpy.
Found by Coverity. This is not a problem in practice, but the results
are technically (maybe) undefined. So make Coverity happy.
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/ipmi')
-rw-r--r-- | hw/ipmi/smbus_ipmi.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/ipmi/smbus_ipmi.c b/hw/ipmi/smbus_ipmi.c index 9ef9112dd5..d0991ab7f9 100644 --- a/hw/ipmi/smbus_ipmi.c +++ b/hw/ipmi/smbus_ipmi.c @@ -281,7 +281,9 @@ static int ipmi_write_data(SMBusDevice *dev, uint8_t *buf, uint8_t len) */ send = true; } - memcpy(sid->inmsg + sid->inlen, buf, len); + if (len > 0) { + memcpy(sid->inmsg + sid->inlen, buf, len); + } sid->inlen += len; break; } |