diff options
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/intel_sst/intel_sst_app_interface.c | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/drivers/staging/intel_sst/intel_sst_app_interface.c b/drivers/staging/intel_sst/intel_sst_app_interface.c index 463e5cba8307..a0d13ee190e5 100644 --- a/drivers/staging/intel_sst/intel_sst_app_interface.c +++ b/drivers/staging/intel_sst/intel_sst_app_interface.c | |||
@@ -885,41 +885,39 @@ long intel_sst_ioctl(struct file *file_ptr, unsigned int cmd, unsigned long arg) | |||
885 | break; | 885 | break; |
886 | } | 886 | } |
887 | case _IOC_NR(SNDRV_SST_SET_VOL): { | 887 | case _IOC_NR(SNDRV_SST_SET_VOL): { |
888 | struct snd_sst_vol *set_vol; | 888 | struct snd_sst_vol set_vol; |
889 | struct snd_sst_vol *rec_vol = (struct snd_sst_vol *)arg; | 889 | |
890 | if (copy_from_user(&set_vol, (void __user *)arg, | ||
891 | sizeof(set_vol))) { | ||
892 | pr_debug("sst: copy failed\n"); | ||
893 | retval = -EFAULT; | ||
894 | break; | ||
895 | } | ||
890 | pr_debug("sst: SET_VOLUME recieved for %d!\n", | 896 | pr_debug("sst: SET_VOLUME recieved for %d!\n", |
891 | rec_vol->stream_id); | 897 | set_vol.stream_id); |
892 | if (minor == STREAM_MODULE && rec_vol->stream_id == 0) { | 898 | if (minor == STREAM_MODULE && set_vol.stream_id == 0) { |
893 | pr_debug("sst: invalid operation!\n"); | 899 | pr_debug("sst: invalid operation!\n"); |
894 | retval = -EPERM; | 900 | retval = -EPERM; |
895 | break; | 901 | break; |
896 | } | 902 | } |
897 | set_vol = kzalloc(sizeof(*set_vol), GFP_ATOMIC); | 903 | retval = sst_set_vol(&set_vol); |
898 | if (!set_vol) { | ||
899 | pr_debug("sst: mem allocation failed\n"); | ||
900 | retval = -ENOMEM; | ||
901 | break; | ||
902 | } | ||
903 | if (copy_from_user(set_vol, rec_vol, sizeof(*set_vol))) { | ||
904 | pr_debug("sst: copy failed\n"); | ||
905 | retval = -EFAULT; | ||
906 | break; | ||
907 | } | ||
908 | retval = sst_set_vol(set_vol); | ||
909 | kfree(set_vol); | ||
910 | break; | 904 | break; |
911 | } | 905 | } |
912 | case _IOC_NR(SNDRV_SST_GET_VOL): { | 906 | case _IOC_NR(SNDRV_SST_GET_VOL): { |
913 | struct snd_sst_vol *rec_vol = (struct snd_sst_vol *)arg; | ||
914 | struct snd_sst_vol get_vol; | 907 | struct snd_sst_vol get_vol; |
908 | |||
909 | if (copy_from_user(&get_vol, (void __user *)arg, | ||
910 | sizeof(get_vol))) { | ||
911 | retval = -EFAULT; | ||
912 | break; | ||
913 | } | ||
915 | pr_debug("sst: IOCTL_GET_VOLUME recieved for stream = %d!\n", | 914 | pr_debug("sst: IOCTL_GET_VOLUME recieved for stream = %d!\n", |
916 | rec_vol->stream_id); | 915 | get_vol.stream_id); |
917 | if (minor == STREAM_MODULE && rec_vol->stream_id == 0) { | 916 | if (minor == STREAM_MODULE && get_vol.stream_id == 0) { |
918 | pr_debug("sst: invalid operation!\n"); | 917 | pr_debug("sst: invalid operation!\n"); |
919 | retval = -EPERM; | 918 | retval = -EPERM; |
920 | break; | 919 | break; |
921 | } | 920 | } |
922 | get_vol.stream_id = rec_vol->stream_id; | ||
923 | retval = sst_get_vol(&get_vol); | 921 | retval = sst_get_vol(&get_vol); |
924 | if (retval) { | 922 | if (retval) { |
925 | retval = -EIO; | 923 | retval = -EIO; |
@@ -938,25 +936,20 @@ long intel_sst_ioctl(struct file *file_ptr, unsigned int cmd, unsigned long arg) | |||
938 | } | 936 | } |
939 | 937 | ||
940 | case _IOC_NR(SNDRV_SST_MUTE): { | 938 | case _IOC_NR(SNDRV_SST_MUTE): { |
941 | struct snd_sst_mute *set_mute; | 939 | struct snd_sst_mute set_mute; |
942 | struct snd_sst_vol *rec_mute = (struct snd_sst_vol *)arg; | 940 | |
943 | pr_debug("sst: SNDRV_SST_SET_VOLUME recieved for %d!\n", | 941 | if (copy_from_user(&set_mute, (void __user *)arg, |
944 | rec_mute->stream_id); | 942 | sizeof(set_mute))) { |
945 | if (minor == STREAM_MODULE && rec_mute->stream_id == 0) { | 943 | retval = -EFAULT; |
946 | retval = -EPERM; | ||
947 | break; | ||
948 | } | ||
949 | set_mute = kzalloc(sizeof(*set_mute), GFP_ATOMIC); | ||
950 | if (!set_mute) { | ||
951 | retval = -ENOMEM; | ||
952 | break; | 944 | break; |
953 | } | 945 | } |
954 | if (copy_from_user(set_mute, rec_mute, sizeof(*set_mute))) { | 946 | pr_debug("sst: SNDRV_SST_SET_VOLUME recieved for %d!\n", |
955 | retval = -EFAULT; | 947 | set_mute.stream_id); |
948 | if (minor == STREAM_MODULE && set_mute.stream_id == 0) { | ||
949 | retval = -EPERM; | ||
956 | break; | 950 | break; |
957 | } | 951 | } |
958 | retval = sst_set_mute(set_mute); | 952 | retval = sst_set_mute(&set_mute); |
959 | kfree(set_mute); | ||
960 | break; | 953 | break; |
961 | } | 954 | } |
962 | case _IOC_NR(SNDRV_SST_STREAM_GET_PARAMS): { | 955 | case _IOC_NR(SNDRV_SST_STREAM_GET_PARAMS): { |