2019-05-27 09:55:05 +03:00
// SPDX-License-Identifier: GPL-2.0-or-later
2005-04-17 02:20:36 +04:00
/*
* 32 bit - > 64 bit ioctl wrapper for timer API
* Copyright ( c ) by Takashi Iwai < tiwai @ suse . de >
*/
/* This file included from timer.c */
# include <linux/compat.h>
2016-03-23 02:03:59 +03:00
/*
* ILP32 / LP64 has different size for ' long ' type . Additionally , the size
* of storage alignment differs depending on architectures . Here , ' __packed '
* qualifier is used so that the size of this structure is multiple of 4 and
* it fits to any architectures with 32 bit storage alignment .
*/
struct snd_timer_gparams32 {
struct snd_timer_id tid ;
u32 period_num ;
u32 period_den ;
unsigned char reserved [ 32 ] ;
} __packed ;
2005-11-17 15:56:05 +03:00
struct snd_timer_info32 {
2005-04-17 02:20:36 +04:00
u32 flags ;
s32 card ;
unsigned char id [ 64 ] ;
unsigned char name [ 80 ] ;
u32 reserved0 ;
u32 resolution ;
unsigned char reserved [ 64 ] ;
} ;
2016-03-23 02:03:59 +03:00
static int snd_timer_user_gparams_compat ( struct file * file ,
struct snd_timer_gparams32 __user * user )
{
struct snd_timer_gparams gparams ;
if ( copy_from_user ( & gparams . tid , & user - > tid , sizeof ( gparams . tid ) ) | |
get_user ( gparams . period_num , & user - > period_num ) | |
get_user ( gparams . period_den , & user - > period_den ) )
return - EFAULT ;
return timer_set_gparams ( & gparams ) ;
}
2005-04-17 02:20:36 +04:00
static int snd_timer_user_info_compat ( struct file * file ,
2005-11-17 15:56:05 +03:00
struct snd_timer_info32 __user * _info )
2005-04-17 02:20:36 +04:00
{
2005-11-17 15:56:05 +03:00
struct snd_timer_user * tu ;
struct snd_timer_info32 info ;
struct snd_timer * t ;
2005-04-17 02:20:36 +04:00
tu = file - > private_data ;
2017-11-21 18:36:11 +03:00
if ( ! tu - > timeri )
return - EBADFD ;
2005-04-17 02:20:36 +04:00
t = tu - > timeri - > timer ;
2017-11-21 18:36:11 +03:00
if ( ! t )
return - EBADFD ;
2005-04-17 02:20:36 +04:00
memset ( & info , 0 , sizeof ( info ) ) ;
info . card = t - > card ? t - > card - > number : - 1 ;
if ( t - > hw . flags & SNDRV_TIMER_HW_SLAVE )
info . flags | = SNDRV_TIMER_FLG_SLAVE ;
ALSA: Convert strlcpy to strscpy when return value is unused
strlcpy is deprecated. see: Documentation/process/deprecated.rst
Change the calls that do not use the strlcpy return value to the
preferred strscpy.
Done with cocci script:
@@
expression e1, e2, e3;
@@
- strlcpy(
+ strscpy(
e1, e2, e3);
This cocci script leaves the instances where the return value is
used unchanged.
After this patch, sound/ has 3 uses of strlcpy() that need to be
manually inspected for conversion and changed one day.
$ git grep -w strlcpy sound/
sound/usb/card.c: len = strlcpy(card->longname, s, sizeof(card->longname));
sound/usb/mixer.c: return strlcpy(buf, p->name, buflen);
sound/usb/mixer.c: return strlcpy(buf, p->names[index], buflen);
Miscellenea:
o Remove trailing whitespace in conversion of sound/core/hwdep.c
Link: https://lore.kernel.org/lkml/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
Signed-off-by: Joe Perches <joe@perches.com>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/22b393d1790bb268769d0bab7bacf0866dcb0c14.camel@perches.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-01-04 20:17:34 +03:00
strscpy ( info . id , t - > id , sizeof ( info . id ) ) ;
strscpy ( info . name , t - > name , sizeof ( info . name ) ) ;
2005-04-17 02:20:36 +04:00
info . resolution = t - > hw . resolution ;
if ( copy_to_user ( _info , & info , sizeof ( * _info ) ) )
return - EFAULT ;
return 0 ;
}
enum {
2016-03-23 02:03:59 +03:00
SNDRV_TIMER_IOCTL_GPARAMS32 = _IOW ( ' T ' , 0x04 , struct snd_timer_gparams32 ) ,
2005-11-17 15:56:05 +03:00
SNDRV_TIMER_IOCTL_INFO32 = _IOR ( ' T ' , 0x11 , struct snd_timer_info32 ) ,
2018-04-24 15:06:09 +03:00
SNDRV_TIMER_IOCTL_STATUS_COMPAT32 = _IOW ( ' T ' , 0x14 , struct snd_timer_status32 ) ,
SNDRV_TIMER_IOCTL_STATUS_COMPAT64 = _IOW ( ' T ' , 0x14 , struct snd_timer_status64 ) ,
2005-04-17 02:20:36 +04:00
} ;
2017-10-29 13:02:04 +03:00
static long __snd_timer_user_ioctl_compat ( struct file * file , unsigned int cmd ,
unsigned long arg )
2005-04-17 02:20:36 +04:00
{
void __user * argp = compat_ptr ( arg ) ;
switch ( cmd ) {
case SNDRV_TIMER_IOCTL_PVERSION :
2018-04-24 15:06:13 +03:00
case SNDRV_TIMER_IOCTL_TREAD_OLD :
case SNDRV_TIMER_IOCTL_TREAD64 :
2005-04-17 02:20:36 +04:00
case SNDRV_TIMER_IOCTL_GINFO :
case SNDRV_TIMER_IOCTL_GSTATUS :
case SNDRV_TIMER_IOCTL_SELECT :
case SNDRV_TIMER_IOCTL_PARAMS :
case SNDRV_TIMER_IOCTL_START :
2005-05-15 17:43:54 +04:00
case SNDRV_TIMER_IOCTL_START_OLD :
2005-04-17 02:20:36 +04:00
case SNDRV_TIMER_IOCTL_STOP :
2005-05-15 17:43:54 +04:00
case SNDRV_TIMER_IOCTL_STOP_OLD :
2005-04-17 02:20:36 +04:00
case SNDRV_TIMER_IOCTL_CONTINUE :
2005-05-15 17:43:54 +04:00
case SNDRV_TIMER_IOCTL_CONTINUE_OLD :
2005-05-15 17:04:14 +04:00
case SNDRV_TIMER_IOCTL_PAUSE :
2005-05-15 17:43:54 +04:00
case SNDRV_TIMER_IOCTL_PAUSE_OLD :
2005-04-17 02:20:36 +04:00
case SNDRV_TIMER_IOCTL_NEXT_DEVICE :
2018-04-24 15:06:13 +03:00
return __snd_timer_user_ioctl ( file , cmd , ( unsigned long ) argp , true ) ;
2016-03-23 02:03:59 +03:00
case SNDRV_TIMER_IOCTL_GPARAMS32 :
return snd_timer_user_gparams_compat ( file , argp ) ;
2005-04-17 02:20:36 +04:00
case SNDRV_TIMER_IOCTL_INFO32 :
return snd_timer_user_info_compat ( file , argp ) ;
2018-04-24 15:06:09 +03:00
case SNDRV_TIMER_IOCTL_STATUS_COMPAT32 :
return snd_timer_user_status32 ( file , argp ) ;
case SNDRV_TIMER_IOCTL_STATUS_COMPAT64 :
return snd_timer_user_status64 ( file , argp ) ;
2005-04-17 02:20:36 +04:00
}
return - ENOIOCTLCMD ;
}
2017-10-29 13:02:04 +03:00
static long snd_timer_user_ioctl_compat ( struct file * file , unsigned int cmd ,
unsigned long arg )
{
struct snd_timer_user * tu = file - > private_data ;
long ret ;
mutex_lock ( & tu - > ioctl_lock ) ;
ret = __snd_timer_user_ioctl_compat ( file , cmd , arg ) ;
mutex_unlock ( & tu - > ioctl_lock ) ;
return ret ;
}