]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
staging: vchiq: Fix bulk userdata handling
authorPhil Elwell <phil@raspberrypi.com>
Tue, 5 Jan 2021 16:20:28 +0000 (16:20 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Jan 2021 15:56:43 +0000 (16:56 +0100)
The addition of the local 'userdata' pointer to
vchiq_irq_queue_bulk_tx_rx omitted the case where neither BLOCKING nor
WAITING modes are used, in which case the value provided by the
caller is not returned to them as expected, but instead it is replaced
with a NULL. This lack of a suitable context may cause the application
to crash or otherwise malfunction.

Fixes: 4184da4f316a ("staging: vchiq: fix __user annotations")
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Acked-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Link: https://lore.kernel.org/r/20210105162030.1415213-2-phil@raspberrypi.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index 54770a9b4735abddb97896bbd4fef4b78d55ba2e..4d645afeb50f9d0423d1ebc01b4cbc7461a9454f 100644 (file)
@@ -958,7 +958,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
        struct vchiq_service *service;
        struct bulk_waiter_node *waiter = NULL;
        bool found = false;
-       void *userdata = NULL;
+       void *userdata;
        int status = 0;
        int ret;
 
@@ -997,6 +997,8 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
                        "found bulk_waiter %pK for pid %d", waiter,
                        current->pid);
                userdata = &waiter->bulk_waiter;
+       } else {
+               userdata = args->userdata;
        }
 
        status = vchiq_bulk_transfer(args->handle, NULL, args->data, args->size,