if (ret)
                return ret;
 
-       vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
-                         dev->dev_addr, dev->addr_len);
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
+               vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
+                                 dev->dev_addr, dev->addr_len);
 
        return 0;
 }
                vdev->config->get(vdev,
                                  offsetof(struct virtio_net_config, mac),
                                  dev->dev_addr, dev->addr_len);
-       } else {
+       } else
                random_ether_addr(dev->dev_addr);
-               vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
-                                 dev->dev_addr, dev->addr_len);
-       }
 
        /* Set up our device-specific information */
        vi = netdev_priv(dev);