diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2021-04-09 17:21:18 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2021-04-09 17:21:18 +0100 |
commit | 471387aa1446e2583f372f79327cc0a8c802b4b4 (patch) | |
tree | 34dafd1cc1577ab37af3a9e222b803bfc925387b /hw/char/terminal3270.c | |
parent | 285f6f57fa776c4247b29e8cf6a5dc23d40c5f35 (diff) | |
parent | d895d25ae2bb8519aa715dd2a97f09d4a66b189d (diff) |
Merge remote-tracking branch 'remotes/cohuck-gitlab/tags/s390x-20210409' into staging
One s390x fix:
- correctly handle the case where the guest ccw payload points to
invalid memory areas
# gpg: Signature made Fri 09 Apr 2021 15:43:45 BST
# gpg: using RSA key C3D0D66DC3624FF6A8C018CEDECF6B93C6F02FAF
# gpg: issuer "cohuck@redhat.com"
# gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>" [unknown]
# gpg: aka "Cornelia Huck <huckc@linux.vnet.ibm.com>" [full]
# gpg: aka "Cornelia Huck <cornelia.huck@de.ibm.com>" [full]
# gpg: aka "Cornelia Huck <cohuck@kernel.org>" [unknown]
# gpg: aka "Cornelia Huck <cohuck@redhat.com>" [unknown]
# Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0 18CE DECF 6B93 C6F0 2FAF
* remotes/cohuck-gitlab/tags/s390x-20210409:
s390x: css: report errors from ccw_dstream_read/write
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/char/terminal3270.c')
-rw-r--r-- | hw/char/terminal3270.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index a9a46c8ed3..82e85fac2e 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -200,9 +200,13 @@ static int read_payload_3270(EmulatedCcw3270Device *dev) { Terminal3270 *t = TERMINAL_3270(dev); int len; + int ret; len = MIN(ccw_dstream_avail(get_cds(t)), t->in_len); - ccw_dstream_write_buf(get_cds(t), t->inv, len); + ret = ccw_dstream_write_buf(get_cds(t), t->inv, len); + if (ret < 0) { + return ret; + } t->in_len -= len; return len; @@ -260,7 +264,10 @@ static int write_payload_3270(EmulatedCcw3270Device *dev, uint8_t cmd) t->outv[out_len++] = cmd; do { - ccw_dstream_read_buf(get_cds(t), &t->outv[out_len], len); + retval = ccw_dstream_read_buf(get_cds(t), &t->outv[out_len], len); + if (retval < 0) { + return retval; + } count = ccw_dstream_avail(get_cds(t)); out_len += len; |