diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2009-07-30 18:03:43 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2009-07-30 02:33:43 -0400 |
commit | 8ef562d112c82ec539775698f8b63ac5ec1bd766 (patch) | |
tree | 4bf0997d89cb138f8d061c948dca6286ab368973 /Documentation/lguest | |
parent | f294526279cda8934b0313ebd02184a16ba888c9 (diff) |
lguest: fix descriptor corruption in example launcher
1d589bb16b825b3a7b4edd34d997f1f1f953033d "Add serial number support
for virtio_blk, V4a" extended 'struct virtio_blk_config' to 536 bytes.
Lguest and S/390 both use an 8 bit value for the feature length, and
this change broke them (if the code is naive).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: John Cooper <john.cooper@redhat.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'Documentation/lguest')
-rw-r--r-- | Documentation/lguest/lguest.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index 9ebcd6ef361b..45d7d6dcae7a 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
@@ -1105,6 +1105,9 @@ static void set_config(struct device *dev, unsigned len, const void *conf) | |||
1105 | /* Copy in the config information, and store the length. */ | 1105 | /* Copy in the config information, and store the length. */ |
1106 | memcpy(device_config(dev), conf, len); | 1106 | memcpy(device_config(dev), conf, len); |
1107 | dev->desc->config_len = len; | 1107 | dev->desc->config_len = len; |
1108 | |||
1109 | /* Size must fit in config_len field (8 bits)! */ | ||
1110 | assert(dev->desc->config_len == len); | ||
1108 | } | 1111 | } |
1109 | 1112 | ||
1110 | /* This routine does all the creation and setup of a new device, including | 1113 | /* This routine does all the creation and setup of a new device, including |
@@ -1515,7 +1518,8 @@ static void setup_block_file(const char *filename) | |||
1515 | add_feature(dev, VIRTIO_BLK_F_SEG_MAX); | 1518 | add_feature(dev, VIRTIO_BLK_F_SEG_MAX); |
1516 | conf.seg_max = cpu_to_le32(VIRTQUEUE_NUM - 2); | 1519 | conf.seg_max = cpu_to_le32(VIRTQUEUE_NUM - 2); |
1517 | 1520 | ||
1518 | set_config(dev, sizeof(conf), &conf); | 1521 | /* Don't try to put whole struct: we have 8 bit limit. */ |
1522 | set_config(dev, offsetof(struct virtio_blk_config, geometry), &conf); | ||
1519 | 1523 | ||
1520 | verbose("device %u: virtblock %llu sectors\n", | 1524 | verbose("device %u: virtblock %llu sectors\n", |
1521 | ++devices.device_num, le64_to_cpu(conf.capacity)); | 1525 | ++devices.device_num, le64_to_cpu(conf.capacity)); |