diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 788a4c7..47c57d8 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -26,8 +26,26 @@
 #endif
 
 static VirtIOFeature feature_sizes[] = {
-    {.flags = 0xffffffff, /* dummy table -- all features included */
-     .end = sizeof(struct virtio_blk_config)},
+    {.flags = 1 << VIRTIO_BLK_F_BARRIER,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_SIZE_MAX,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_SEG_MAX,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_GEOMETRY,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_RO,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_BLK_SIZE,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_SCSI,
+     .end = endof(struct virtio_blk_config, sectors)},
+    {.flags = 1 << VIRTIO_BLK_F_WCE,
+     .end = endof(struct virtio_blk_config, blk_size)},
+    {.flags = 1 << VIRTIO_BLK_F_TOPOLOGY,
+     .end = endof(struct virtio_blk_config, opt_io_size)},
+    {.flags = 1 << VIRTIO_BLK_F_CONFIG_WCE,
+     .end = endof(struct virtio_blk_config, wce)},
     {}
 };
 
