aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-12-06 13:49:14 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-12-06 13:49:14 -0500
commitf9efc944474742ad952c15c092a901d88ed83c71 (patch)
treecbd6e7b4ce3a81301340195385604a62251f309d
parent328b4ed93b69a6f2083d52f31a240a09e5de386a (diff)
parent362bca57f5d78220f8b5907b875961af9436e229 (diff)
Merge tag 'sound-4.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "All fixes are small and for stable: - a PCM ioctl race fix - yet another USB-audio hardening for malicious descriptors - Realtek ALC257 codec support" * tag 'sound-4.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: pcm: prevent UAF in snd_pcm_info ALSA: hda/realtek - New codec support for ALC257 ALSA: usb-audio: Add check return value for usb_string() ALSA: usb-audio: Fix out-of-bound error ALSA: seq: Remove spurious WARN_ON() at timer check
-rw-r--r--sound/core/pcm.c2
-rw-r--r--sound/core/seq/seq_timer.c2
-rw-r--r--sound/pci/hda/patch_realtek.c8
-rw-r--r--sound/usb/mixer.c13
4 files changed, 20 insertions, 5 deletions
diff --git a/sound/core/pcm.c b/sound/core/pcm.c
index 9070f277f8db..09ee8c6b9f75 100644
--- a/sound/core/pcm.c
+++ b/sound/core/pcm.c
@@ -153,7 +153,9 @@ static int snd_pcm_control_ioctl(struct snd_card *card,
153 err = -ENXIO; 153 err = -ENXIO;
154 goto _error; 154 goto _error;
155 } 155 }
156 mutex_lock(&pcm->open_mutex);
156 err = snd_pcm_info_user(substream, info); 157 err = snd_pcm_info_user(substream, info);
158 mutex_unlock(&pcm->open_mutex);
157 _error: 159 _error:
158 mutex_unlock(&register_mutex); 160 mutex_unlock(&register_mutex);
159 return err; 161 return err;
diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
index 37d9cfbc29f9..b80985fbc334 100644
--- a/sound/core/seq/seq_timer.c
+++ b/sound/core/seq/seq_timer.c
@@ -355,7 +355,7 @@ static int initialize_timer(struct snd_seq_timer *tmr)
355 unsigned long freq; 355 unsigned long freq;
356 356
357 t = tmr->timeri->timer; 357 t = tmr->timeri->timer;
358 if (snd_BUG_ON(!t)) 358 if (!t)
359 return -EINVAL; 359 return -EINVAL;
360 360
361 freq = tmr->preferred_resolution; 361 freq = tmr->preferred_resolution;
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 921a10eff43a..4b21f71d685c 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -330,6 +330,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
330 case 0x10ec0236: 330 case 0x10ec0236:
331 case 0x10ec0255: 331 case 0x10ec0255:
332 case 0x10ec0256: 332 case 0x10ec0256:
333 case 0x10ec0257:
333 case 0x10ec0282: 334 case 0x10ec0282:
334 case 0x10ec0283: 335 case 0x10ec0283:
335 case 0x10ec0286: 336 case 0x10ec0286:
@@ -2772,6 +2773,7 @@ enum {
2772 ALC269_TYPE_ALC298, 2773 ALC269_TYPE_ALC298,
2773 ALC269_TYPE_ALC255, 2774 ALC269_TYPE_ALC255,
2774 ALC269_TYPE_ALC256, 2775 ALC269_TYPE_ALC256,
2776 ALC269_TYPE_ALC257,
2775 ALC269_TYPE_ALC215, 2777 ALC269_TYPE_ALC215,
2776 ALC269_TYPE_ALC225, 2778 ALC269_TYPE_ALC225,
2777 ALC269_TYPE_ALC294, 2779 ALC269_TYPE_ALC294,
@@ -2805,6 +2807,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
2805 case ALC269_TYPE_ALC298: 2807 case ALC269_TYPE_ALC298:
2806 case ALC269_TYPE_ALC255: 2808 case ALC269_TYPE_ALC255:
2807 case ALC269_TYPE_ALC256: 2809 case ALC269_TYPE_ALC256:
2810 case ALC269_TYPE_ALC257:
2808 case ALC269_TYPE_ALC215: 2811 case ALC269_TYPE_ALC215:
2809 case ALC269_TYPE_ALC225: 2812 case ALC269_TYPE_ALC225:
2810 case ALC269_TYPE_ALC294: 2813 case ALC269_TYPE_ALC294:
@@ -6867,6 +6870,10 @@ static int patch_alc269(struct hda_codec *codec)
6867 spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */ 6870 spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
6868 alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/ 6871 alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/
6869 break; 6872 break;
6873 case 0x10ec0257:
6874 spec->codec_variant = ALC269_TYPE_ALC257;
6875 spec->gen.mixer_nid = 0;
6876 break;
6870 case 0x10ec0215: 6877 case 0x10ec0215:
6871 case 0x10ec0285: 6878 case 0x10ec0285:
6872 case 0x10ec0289: 6879 case 0x10ec0289:
@@ -7914,6 +7921,7 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
7914 HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269), 7921 HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269),
7915 HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269), 7922 HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269),
7916 HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269), 7923 HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269),
7924 HDA_CODEC_ENTRY(0x10ec0257, "ALC257", patch_alc269),
7917 HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260), 7925 HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260),
7918 HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262), 7926 HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262),
7919 HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268), 7927 HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268),
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 61b348383de8..7c9e361b2200 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -204,6 +204,10 @@ static int snd_usb_copy_string_desc(struct mixer_build *state,
204 int index, char *buf, int maxlen) 204 int index, char *buf, int maxlen)
205{ 205{
206 int len = usb_string(state->chip->dev, index, buf, maxlen - 1); 206 int len = usb_string(state->chip->dev, index, buf, maxlen - 1);
207
208 if (len < 0)
209 return 0;
210
207 buf[len] = 0; 211 buf[len] = 0;
208 return len; 212 return len;
209} 213}
@@ -2174,13 +2178,14 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
2174 if (len) 2178 if (len)
2175 ; 2179 ;
2176 else if (nameid) 2180 else if (nameid)
2177 snd_usb_copy_string_desc(state, nameid, kctl->id.name, 2181 len = snd_usb_copy_string_desc(state, nameid, kctl->id.name,
2178 sizeof(kctl->id.name)); 2182 sizeof(kctl->id.name));
2179 else { 2183 else
2180 len = get_term_name(state, &state->oterm, 2184 len = get_term_name(state, &state->oterm,
2181 kctl->id.name, sizeof(kctl->id.name), 0); 2185 kctl->id.name, sizeof(kctl->id.name), 0);
2182 if (!len) 2186
2183 strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name)); 2187 if (!len) {
2188 strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name));
2184 2189
2185 if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR) 2190 if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR)
2186 append_ctl_name(kctl, " Clock Source"); 2191 append_ctl_name(kctl, " Clock Source");