From: Halil Pasic Date: Mon, 17 Feb 2025 10:06:13 +0000 (+0100) Subject: s390/vfio-ap: Make mdev_types not look like a fake flex array X-Git-Tag: v6.15-rc1~113^2~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92d03904b26d330b9a20f3abaa9cb78e6aba2265;p=thirdparty%2Fkernel%2Flinux.git s390/vfio-ap: Make mdev_types not look like a fake flex array The vfio-ap driver and the vfio parent device provided by it (matrix_dev) support just a single mdev_type, and this is not likely to change any time soon. Despite that matrix_dev->mdev_types started out as a C99 flexible array presumably as a typo, and since the typo messed up the allocation, commit e2c8cee9f489 ("s390/vfio-ap: Fix memory allocation for mdev_types array") changed it to an array of size 1. And to make things worse mdev_types happens to be the last member of struct ap_matrix_dev. Now the problem with that is that before C99 the usual way to get something similar to a flexible array member was to use a trailing array of size 0 or 1. This is what I called fake flex array. For a while now the community is trying to get rid of fake flex arrays. And while mdev_types is not a fake flex array but an array of size one (to match the mdev interfaces nicer), it can easily be and was mistaken for a fake flex array. So, let us make mdev_types a pointer to struct mdev_type and pass in the address of that pointer as the 4th formal parameter of mdev_register_parent(). Signed-off-by: Halil Pasic Reviewed-by: Anthony Krowiak Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Tested-by: Anthony Krowiak Link: https://lore.kernel.org/r/20250217100614.3043620-2-pasic@linux.ibm.com Signed-off-by: Vasily Gorbik --- diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c index 155e19aef5df9..4c6a6d91a13fa 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -2316,10 +2316,10 @@ int vfio_ap_mdev_register(void) matrix_dev->mdev_type.sysfs_name = VFIO_AP_MDEV_TYPE_HWVIRT; matrix_dev->mdev_type.pretty_name = VFIO_AP_MDEV_NAME_HWVIRT; - matrix_dev->mdev_types[0] = &matrix_dev->mdev_type; + matrix_dev->mdev_types = &matrix_dev->mdev_type; ret = mdev_register_parent(&matrix_dev->parent, &matrix_dev->device, &vfio_ap_matrix_driver, - matrix_dev->mdev_types, 1); + &matrix_dev->mdev_types, 1); if (ret) goto err_driver; return 0; diff --git a/drivers/s390/crypto/vfio_ap_private.h b/drivers/s390/crypto/vfio_ap_private.h index 437a161c86598..9d16321777c8d 100644 --- a/drivers/s390/crypto/vfio_ap_private.h +++ b/drivers/s390/crypto/vfio_ap_private.h @@ -53,7 +53,7 @@ struct ap_matrix_dev { struct mutex guests_lock; /* serializes access to each KVM guest */ struct mdev_parent parent; struct mdev_type mdev_type; - struct mdev_type *mdev_types[1]; + struct mdev_type *mdev_types; }; extern struct ap_matrix_dev *matrix_dev;