mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
s390x: css: report errors from ccw_dstream_read/write
ccw_dstream_read/write functions returned values are sometime not taking into account and reported back to the upper level of interpretation of CCW instructions. It follows that accessing an invalid address does not trigger a subchannel status program check to the guest as it should. Let's test the return values of ccw_dstream_write[_buf] and ccw_dstream_read[_buf] and report it to the caller. Cc: qemu-stable@nongnu.org Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> Acked-by: Halil Pasic <pasic@linux.ibm.com> Message-Id: <1617899529-9329-2-git-send-email-pmorel@linux.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
d8724020dd
commit
d895d25ae2
4 changed files with 69 additions and 27 deletions
|
@ -1055,10 +1055,11 @@ static int css_interpret_ccw(SubchDev *sch, hwaddr ccw_addr,
|
|||
}
|
||||
}
|
||||
len = MIN(ccw.count, sizeof(sch->sense_data));
|
||||
ccw_dstream_write_buf(&sch->cds, sch->sense_data, len);
|
||||
ret = ccw_dstream_write_buf(&sch->cds, sch->sense_data, len);
|
||||
sch->curr_status.scsw.count = ccw_dstream_residual_count(&sch->cds);
|
||||
memset(sch->sense_data, 0, sizeof(sch->sense_data));
|
||||
ret = 0;
|
||||
if (!ret) {
|
||||
memset(sch->sense_data, 0, sizeof(sch->sense_data));
|
||||
}
|
||||
break;
|
||||
case CCW_CMD_SENSE_ID:
|
||||
{
|
||||
|
@ -1083,9 +1084,10 @@ static int css_interpret_ccw(SubchDev *sch, hwaddr ccw_addr,
|
|||
} else {
|
||||
sense_id[0] = 0;
|
||||
}
|
||||
ccw_dstream_write_buf(&sch->cds, sense_id, len);
|
||||
sch->curr_status.scsw.count = ccw_dstream_residual_count(&sch->cds);
|
||||
ret = 0;
|
||||
ret = ccw_dstream_write_buf(&sch->cds, sense_id, len);
|
||||
if (!ret) {
|
||||
sch->curr_status.scsw.count = ccw_dstream_residual_count(&sch->cds);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CCW_CMD_TIC:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue