]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ALSA: seq: Check validity before creating a port object
authorTakashi Iwai <tiwai@suse.de>
Tue, 23 May 2023 07:53:43 +0000 (09:53 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 23 May 2023 10:11:18 +0000 (12:11 +0200)
The client type and the port info validity check should be done before
actually creating a port, instead of unnecessary create-and-scratch.

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20230523075358.9672-23-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/seq/seq_clientmgr.c

index 06743114cabfb185bb8426fbdbf206d81c59b7f9..2dac8c3355fd252b48700cca70e2e00ae4c00535 100644 (file)
@@ -1199,6 +1199,8 @@ static int snd_seq_ioctl_create_port(struct snd_seq_client *client, void *arg)
        /* it is not allowed to create the port for an another client */
        if (info->addr.client != client->number)
                return -EPERM;
+       if (client->type == USER_CLIENT && info->kernel)
+               return -EINVAL;
 
        if (info->flags & SNDRV_SEQ_PORT_FLG_GIVEN_PORT)
                port_idx = info->addr.port;
@@ -1208,12 +1210,6 @@ static int snd_seq_ioctl_create_port(struct snd_seq_client *client, void *arg)
        if (err < 0)
                return err;
 
-       if (client->type == USER_CLIENT && info->kernel) {
-               port_idx = port->addr.port;
-               snd_seq_port_unlock(port);
-               snd_seq_delete_port(client, port_idx);
-               return -EINVAL;
-       }
        if (client->type == KERNEL_CLIENT) {
                callback = info->kernel;
                if (callback) {