Commit 4f92eb79 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: seq: Check validity before creating a port object



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: default avatarJaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20230523075358.9672-23-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7c3f0d3d
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -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) {