]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: rc: xbox_remote: heed DMA restrictions
authorOliver Neukum <oneukum@suse.com>
Wed, 11 Feb 2026 18:09:44 +0000 (19:09 +0100)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 17 Mar 2026 13:43:57 +0000 (14:43 +0100)
The buffer for IO must not be part of the device structure
because that violates the DMA coherency rules.

Fixes: 02d32bdad3123 ("media: rc: add driver for Xbox DVD Movie Playback Kit")
Cc: stable@vger.kernel.org
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/rc/xbox_remote.c

index c64123e9d16a5eb9b70dc54f43de0e9f960de4d4..d2cb88b8f1ca8ce4bebaa74f1ad192f0bc649f6c 100644 (file)
@@ -55,7 +55,7 @@ struct xbox_remote {
        struct usb_interface *interface;
 
        struct urb *irq_urb;
-       unsigned char inbuf[DATA_BUFSIZE] __aligned(sizeof(u16));
+       u8 *inbuf;
 
        char rc_name[NAME_BUFSIZE];
        char rc_phys[NAME_BUFSIZE];
@@ -218,6 +218,10 @@ static int xbox_remote_probe(struct usb_interface *interface,
        if (!xbox_remote || !rc_dev)
                goto exit_free_dev_rdev;
 
+       xbox_remote->inbuf = kzalloc(DATA_BUFSIZE, GFP_KERNEL);
+       if (!xbox_remote->inbuf)
+               goto exit_free_inbuf;
+
        /* Allocate URB buffer */
        xbox_remote->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!xbox_remote->irq_urb)
@@ -262,6 +266,8 @@ exit_kill_urbs:
        usb_kill_urb(xbox_remote->irq_urb);
 exit_free_buffers:
        usb_free_urb(xbox_remote->irq_urb);
+exit_free_inbuf:
+       kfree(xbox_remote->inbuf);
 exit_free_dev_rdev:
        rc_free_device(rc_dev);
        kfree(xbox_remote);
@@ -287,6 +293,7 @@ static void xbox_remote_disconnect(struct usb_interface *interface)
        usb_kill_urb(xbox_remote->irq_urb);
        rc_free_device(xbox_remote->rdev);
        usb_free_urb(xbox_remote->irq_urb);
+       kfree(xbox_remote->inbuf);
        kfree(xbox_remote);
 }