diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index d962a75..ca843f8 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -64,7 +64,7 @@ typedef struct VirtIONet
 
 static VirtIONet *to_virtio_net(VirtIODevice *vdev)
 {
-    return (VirtIONet *)vdev;
+    return container_of(vdev, VirtIONet, vdev);
 }
 
 static void virtio_net_get_config(VirtIODevice *vdev, uint8_t *config)
@@ -873,7 +873,7 @@ VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf)
 
 void virtio_net_exit(VirtIODevice *vdev)
 {
-    VirtIONet *n = DO_UPCAST(VirtIONet, vdev, vdev);
+    VirtIONet *n = to_virtio_net(vdev);
 
     qemu_purge_queued_packets(&n->nic->nc);
 
