瀏覽代碼

ALSA: seq: initialize whole fields of automatic variable with union type

Currently, automatic variable of 'union ioctl_arg' type is initialized
by designated initialization. Although, the actual effect is interpretation
of early element of int type and initialization of 'int pversion'.
Therefore the first field corresponding to int type is initialized to zero.
This is against my expectation to initialize whole fields.

This commit uses memset() to initialize the variable, instead of designated
initialization.

Fixes: 04a56dd8ed0d ('ALSA: seq: change ioctl command operation to get data in kernel space')
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Sakamoto 9 年之前
父節點
當前提交
4127e80a93
共有 1 個文件被更改,包括 5 次插入2 次删除
  1. 5 2
      sound/core/seq/seq_clientmgr.c

+ 5 - 2
sound/core/seq/seq_clientmgr.c

@@ -2084,7 +2084,7 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd,
 {
 {
 	struct snd_seq_client *client = file->private_data;
 	struct snd_seq_client *client = file->private_data;
 	/* To use kernel stack for ioctl data. */
 	/* To use kernel stack for ioctl data. */
-	union ioctl_arg {
+	union {
 		int pversion;
 		int pversion;
 		int client_id;
 		int client_id;
 		struct snd_seq_system_info	system_info;
 		struct snd_seq_system_info	system_info;
@@ -2100,7 +2100,7 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd,
 		struct snd_seq_client_pool	client_pool;
 		struct snd_seq_client_pool	client_pool;
 		struct snd_seq_remove_events	remove_events;
 		struct snd_seq_remove_events	remove_events;
 		struct snd_seq_query_subs	query_subs;
 		struct snd_seq_query_subs	query_subs;
-	} buf = {0};
+	} buf;
 	const struct ioctl_handler *handler;
 	const struct ioctl_handler *handler;
 	unsigned long size;
 	unsigned long size;
 	int err;
 	int err;
@@ -2114,6 +2114,9 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd,
 	}
 	}
 	if (handler->cmd == 0)
 	if (handler->cmd == 0)
 		return -ENOTTY;
 		return -ENOTTY;
+
+	memset(&buf, 0, sizeof(buf));
+
 	/*
 	/*
 	 * All of ioctl commands for ALSA sequencer get an argument of size
 	 * All of ioctl commands for ALSA sequencer get an argument of size
 	 * within 13 bits. We can safely pick up the size from the command.
 	 * within 13 bits. We can safely pick up the size from the command.