virtio-mem: Don't rely on implicit compiler padding for requests
authorDavid Hildenbrand <david@redhat.com>
Fri, 15 May 2020 10:14:02 +0000 (12:14 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 4 Jun 2020 19:36:52 +0000 (15:36 -0400)
The compiler will add padding after the last member, make that explicit.
The size of a request is always 24 bytes. The size of a response always
10 bytes. Add compile-time checks.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Cc: teawater <teawaterz@linux.alibaba.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/20200515101402.16597-1-david@redhat.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio_mem.c
include/uapi/linux/virtio_mem.h

index 9e523db3bee17f35b6c93714d02c3ea86311769f..f658fe9149beb59d4b0a3fd085be46eb338541aa 100644 (file)
@@ -1770,6 +1770,9 @@ static int virtio_mem_probe(struct virtio_device *vdev)
        struct virtio_mem *vm;
        int rc = -EINVAL;
 
+       BUILD_BUG_ON(sizeof(struct virtio_mem_req) != 24);
+       BUILD_BUG_ON(sizeof(struct virtio_mem_resp) != 10);
+
        vdev->priv = vm = kzalloc(sizeof(*vm), GFP_KERNEL);
        if (!vm)
                return -ENOMEM;
index e0a9dc7397c34b71834a0c63893db0c4e18d3879..a455c488a995c54ec919ac3e9412f2b159116c1c 100644 (file)
 struct virtio_mem_req_plug {
        __virtio64 addr;
        __virtio16 nb_blocks;
+       __virtio16 padding[3];
 };
 
 struct virtio_mem_req_unplug {
        __virtio64 addr;
        __virtio16 nb_blocks;
+       __virtio16 padding[3];
 };
 
 struct virtio_mem_req_state {
        __virtio64 addr;
        __virtio16 nb_blocks;
+       __virtio16 padding[3];
 };
 
 struct virtio_mem_req {