mirror of https://github.com/proxmox/mirror_qemu
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>master
parent
d959f6cf50
commit
832be0d8a3
|
@ -68,6 +68,12 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
|||
|
||||
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) */
|
||||
s390_get_feat_block(S390_FEAT_TYPE_SCLP_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->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 */
|
||||
cpu_info->offset_standby = cpu_to_be16(cpu_info->offset_configured
|
||||
+ cpu_info->nr_configured*sizeof(CPUEntry));
|
||||
|
|
Loading…
Reference in New Issue