[alsa-devel] [PATCH 06/39] ALSA: seq: obsolete address mode in compatibility layer

Takashi Iwai tiwai at suse.de
Mon Aug 8 09:09:44 CEST 2016


On Sun, 07 Aug 2016 11:48:42 +0200,
Takashi Sakamoto wrote:
> 
> In a 32/64 bit compatibility layer of ALSA sequencer core, data for some
> ioctls is copied to kernel stack and passed to core operations. Then,
> address limit of running task is changed because core implementation
> expected arguments in userspace.
> 
> In this case, snd_seq_kernel_client_ctl() is available. This commit
> replaces with it.
> 
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
> ---
>  sound/core/seq/seq_compat.c | 25 +++++++++++++------------
>  1 file changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/sound/core/seq/seq_compat.c b/sound/core/seq/seq_compat.c
> index 70d3ddb..6cc7302 100644
> --- a/sound/core/seq/seq_compat.c
> +++ b/sound/core/seq/seq_compat.c
> @@ -42,13 +42,11 @@ struct snd_seq_port_info32 {
>  	char reserved[59];		/* for future use */
>  };
>  
> -static int seq_call_port_info_ioctl(struct snd_seq_client *client,
> -				    unsigned int cmd,
> +static int seq_call_port_info_ioctl(int clientid, unsigned int cmd,
>  				    struct snd_seq_port_info32 __user *data32)
>  {
>  	int err = -EFAULT;
>  	struct snd_seq_port_info *data;
> -	mm_segment_t fs;
>  
>  	data = kmalloc(sizeof(*data), GFP_KERNEL);
>  	if (!data)
> @@ -60,9 +58,7 @@ static int seq_call_port_info_ioctl(struct snd_seq_client *client,
>  		goto error;
>  	data->kernel = NULL;
>  
> -	fs = snd_enter_user();
> -	err = seq_do_ioctl(client, cmd, data);
> -	snd_leave_user(fs);
> +	err = snd_seq_kernel_client_ctl(clientid, cmd, data);
>  	if (err < 0)
>  		goto error;

It's better to pass a snd_seq_client pointer to this function and
evaluate client->port in the function instead of referencing to
client->port from each caller.


Takashi


More information about the Alsa-devel mailing list