hw/cxl: Check that writes do not go beyond end of target attributes
In cmd_features_set_feature() the an offset + data size schemed is used to allow for large features. Ensure this does not write beyond the end fo the buffers used to accumulate the full feature attribute set. Reported-by: Esifiel <esifiel@gmail.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Message-Id: <20241101133917.27634-9-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
c0f122419f
commit
c1c4d6b38b
@ -1292,6 +1292,11 @@ static CXLRetCode cmd_features_set_feature(const struct cxl_cmd *cmd,
|
||||
|
||||
ps_set_feature = (void *)payload_in;
|
||||
ps_write_attrs = &ps_set_feature->feat_data;
|
||||
|
||||
if ((uint32_t)hdr->offset + bytes_to_copy >
|
||||
sizeof(ct3d->patrol_scrub_wr_attrs)) {
|
||||
return CXL_MBOX_INVALID_PAYLOAD_LENGTH;
|
||||
}
|
||||
memcpy((uint8_t *)&ct3d->patrol_scrub_wr_attrs + hdr->offset,
|
||||
ps_write_attrs,
|
||||
bytes_to_copy);
|
||||
@ -1314,6 +1319,11 @@ static CXLRetCode cmd_features_set_feature(const struct cxl_cmd *cmd,
|
||||
|
||||
ecs_set_feature = (void *)payload_in;
|
||||
ecs_write_attrs = ecs_set_feature->feat_data;
|
||||
|
||||
if ((uint32_t)hdr->offset + bytes_to_copy >
|
||||
sizeof(ct3d->ecs_wr_attrs)) {
|
||||
return CXL_MBOX_INVALID_PAYLOAD_LENGTH;
|
||||
}
|
||||
memcpy((uint8_t *)&ct3d->ecs_wr_attrs + hdr->offset,
|
||||
ecs_write_attrs,
|
||||
bytes_to_copy);
|
||||
|
Loading…
Reference in New Issue
Block a user