]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
plat/virtio: Use may_alias attribute for vring_avail_event
authorMarco Schlumpp <marco@unikraft.io>
Mon, 19 Jun 2023 07:46:18 +0000 (09:46 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:32:28 +0000 (19:32 +0300)
The macro violates the strict aliasing rules. By using the newly introduced
may_alias attribute we can prevent miscompilations because of that.

Signed-off-by: Marco Schlumpp <marco@unikraft.io>
Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
Reviewed-by: Rares Miculescu <miculescur@gmail.com>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GiHub-Closes: #1076

drivers/virtio/ring/include/virtio/virtio_ring.h

index 76222fa1c0a2765af027df5a2d1c80a0407074b4..07fe21cd16c4bc81b71f5fe9a07a0ab04682962e 100644 (file)
@@ -157,7 +157,9 @@ struct vring {
  * versa. They are at the end for backwards compatibility.
  */
 #define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
-#define vring_avail_event(vr) (*(__virtio_le16 *)&(vr)->used->ring[(vr)->num])
+typedef __virtio_le16 __may_alias __virtio_le16_ma;
+#define vring_avail_event(vr) \
+       (*(__virtio_le16_ma *)&(vr)->used->ring[(vr)->num])
 
 static inline void vring_init(struct vring *vr, unsigned int num, uint8_t *p,
                              unsigned long align)