mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 20:33:54 -06:00
s390x: sclp: Report insufficient SCCB length
Return the correct error code when the SCCB buffer is too small to contain all of the output, for the Read SCP Information and Read CPU Information commands. Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: Jason J. Herne <jjherne@linux.ibm.com> Message-Id: <1569591203-15258-5-git-send-email-imbrenda@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
d959f6cf50
commit
832be0d8a3
1 changed files with 12 additions and 0 deletions
|
@ -68,6 +68,12 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
||||||
|
|
||||||
read_info->ibc_val = cpu_to_be32(s390_get_ibc_val());
|
read_info->ibc_val = cpu_to_be32(s390_get_ibc_val());
|
||||||
|
|
||||||
|
if (be16_to_cpu(sccb->h.length) <
|
||||||
|
(sizeof(ReadInfo) + cpu_count * sizeof(CPUEntry))) {
|
||||||
|
sccb->h.response_code = cpu_to_be16(SCLP_RC_INSUFFICIENT_SCCB_LENGTH);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Configuration Characteristic (Extension) */
|
/* Configuration Characteristic (Extension) */
|
||||||
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR,
|
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR,
|
||||||
read_info->conf_char);
|
read_info->conf_char);
|
||||||
|
@ -118,6 +124,12 @@ static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
|
||||||
cpu_info->offset_configured = cpu_to_be16(offsetof(ReadCpuInfo, entries));
|
cpu_info->offset_configured = cpu_to_be16(offsetof(ReadCpuInfo, entries));
|
||||||
cpu_info->nr_standby = cpu_to_be16(0);
|
cpu_info->nr_standby = cpu_to_be16(0);
|
||||||
|
|
||||||
|
if (be16_to_cpu(sccb->h.length) <
|
||||||
|
(sizeof(ReadCpuInfo) + cpu_count * sizeof(CPUEntry))) {
|
||||||
|
sccb->h.response_code = cpu_to_be16(SCLP_RC_INSUFFICIENT_SCCB_LENGTH);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* The standby offset is 16-byte for each CPU */
|
/* The standby offset is 16-byte for each CPU */
|
||||||
cpu_info->offset_standby = cpu_to_be16(cpu_info->offset_configured
|
cpu_info->offset_standby = cpu_to_be16(cpu_info->offset_configured
|
||||||
+ cpu_info->nr_configured*sizeof(CPUEntry));
|
+ cpu_info->nr_configured*sizeof(CPUEntry));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue