mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
vfio: selftests: Avoid VLAs
Allocate VFIO ioctl requests dynamically instead of using VLAs. GCC 11.5.0 rejects initialized VLAs with: error: variable-sized object may not be initialized The replaced stack u8 arrays also do not guarantee native struct alignment for the aliased pointers. Fixes:19faf6fd96("vfio: selftests: Add a helper library for VFIO selftests") Fixes:20face8c75("vfio: selftests: Add helper to set/override a vf_token") Assisted-by: Codex:gpt-5.5-high Reviewed-by: Vipin Sharma <vipinsh@google.com> Reviewed-by: David Matlack <dmatlack@google.com> Signed-off-by: Alex Mastro <amastro@fb.com> Link: https://lore.kernel.org/r/20260617-scratch-amastro-vfio-selftests-avoid-vlas-v4-2-b9f52f1e2c5a@fb.com Signed-off-by: Alex Williamson <alex@shazbot.org>
This commit is contained in:
parent
bc4be8c6fd
commit
6bc73befe1
|
|
@ -30,13 +30,11 @@
|
|||
static void vfio_pci_irq_set(struct vfio_pci_device *device,
|
||||
u32 index, u32 vector, u32 count, int *fds)
|
||||
{
|
||||
u8 buf[sizeof(struct vfio_irq_set) + sizeof(int) * count];
|
||||
struct vfio_irq_set *irq = (void *)&buf;
|
||||
int *irq_fds = (void *)&irq->data;
|
||||
size_t argsz = sizeof(struct vfio_irq_set) + sizeof(int) * count;
|
||||
struct vfio_irq_set *irq;
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
irq->argsz = sizeof(buf);
|
||||
irq = calloc_assert(1, argsz);
|
||||
irq->argsz = argsz;
|
||||
irq->flags = VFIO_IRQ_SET_ACTION_TRIGGER;
|
||||
irq->index = index;
|
||||
irq->start = vector;
|
||||
|
|
@ -44,12 +42,13 @@ static void vfio_pci_irq_set(struct vfio_pci_device *device,
|
|||
|
||||
if (count) {
|
||||
irq->flags |= VFIO_IRQ_SET_DATA_EVENTFD;
|
||||
memcpy(irq_fds, fds, sizeof(int) * count);
|
||||
memcpy(irq->data, fds, sizeof(int) * count);
|
||||
} else {
|
||||
irq->flags |= VFIO_IRQ_SET_DATA_NONE;
|
||||
}
|
||||
|
||||
ioctl_assert(device->fd, VFIO_DEVICE_SET_IRQS, irq);
|
||||
free(irq);
|
||||
}
|
||||
|
||||
void vfio_pci_irq_trigger(struct vfio_pci_device *device, u32 index, u32 vector)
|
||||
|
|
@ -118,15 +117,20 @@ static void vfio_pci_irq_get(struct vfio_pci_device *device, u32 index,
|
|||
static int vfio_device_feature_ioctl(int fd, u32 flags, void *data,
|
||||
size_t data_size)
|
||||
{
|
||||
u8 buffer[sizeof(struct vfio_device_feature) + data_size] = {};
|
||||
struct vfio_device_feature *feature = (void *)buffer;
|
||||
size_t argsz = sizeof(struct vfio_device_feature) + data_size;
|
||||
struct vfio_device_feature *feature;
|
||||
int ret;
|
||||
|
||||
feature = calloc_assert(1, argsz);
|
||||
memcpy(feature->data, data, data_size);
|
||||
|
||||
feature->argsz = sizeof(buffer);
|
||||
feature->argsz = argsz;
|
||||
feature->flags = flags;
|
||||
|
||||
return ioctl(fd, VFIO_DEVICE_FEATURE, feature);
|
||||
ret = ioctl(fd, VFIO_DEVICE_FEATURE, feature);
|
||||
free(feature);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void vfio_device_feature_set(int fd, u16 feature, void *data, size_t data_size)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user