Struct uvc_frame and uvc_format are packaged together on streaming->formats on a sigle allocation. This is working fine because both structures have a field with a pointer, but it will stop working when the sizeof() of any of those structs is not a muliple of the sizeof(void*). Make that aligment contract explicit. Signed-off-by: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> --- This is better than 3 allocations, and do not have any performance penalty. --- drivers/media/usb/uvc/uvcvideo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 9a596c8d894a..03e8a543c8e6 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -252,7 +252,7 @@ struct uvc_frame { u8 bFrameIntervalType; u32 dwDefaultFrameInterval; u32 *dwFrameInterval; -}; +} __aligned(sizeof(void *)); /* uvc_frame is packed on streaming->formats. */ struct uvc_format { u8 type; @@ -266,7 +266,7 @@ struct uvc_format { unsigned int nframes; struct uvc_frame *frame; -}; +} __aligned(sizeof(void *)); /* uvc_format is packed on streaming->formats. */ struct uvc_streaming_header { u8 bNumFormats; --- base-commit: 58390c8ce1bddb6c623f62e7ed36383e7fa5c02f change-id: 20230501-uvc-align-6ff202b68dab Best regards, -- Ricardo Ribalda <ribalda@xxxxxxxxxxxx>