Commit 08d1e635089f41e28fec644a8620a0e8d66b1235

Authored by Takashi Iwai
1 parent 2f229a31aa

ALSA: usb - Use strlcat() correctly

Don't pass the advanced position to strlcat() but just gives the buffer
head position so that the max size limit can be checked correctly.
Introduced a new helper function to standaralize strlcat() calls.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

Showing 1 changed file with 14 additions and 9 deletions Side-by-side Diff

sound/usb/usbmixer.c
... ... @@ -898,6 +898,11 @@
898 898 * build a feature control
899 899 */
900 900  
  901 +static size_t append_ctl_name(struct snd_kcontrol *kctl, const char *str)
  902 +{
  903 + return strlcat(kctl->id.name, str, sizeof(kctl->id.name));
  904 +}
  905 +
901 906 static void build_feature_ctl(struct mixer_build *state, unsigned char *desc,
902 907 unsigned int ctl_mask, int control,
903 908 struct usb_audio_term *iterm, int unitid)
904 909  
905 910  
... ... @@ -978,13 +983,13 @@
978 983 */
979 984 if (! mapped_name && ! (state->oterm.type >> 16)) {
980 985 if ((state->oterm.type & 0xff00) == 0x0100) {
981   - len = strlcat(kctl->id.name, " Capture", sizeof(kctl->id.name));
  986 + len = append_ctl_name(kctl, " Capture");
982 987 } else {
983   - len = strlcat(kctl->id.name + len, " Playback", sizeof(kctl->id.name));
  988 + len = append_ctl_name(kctl, " Playback");
984 989 }
985 990 }
986   - strlcat(kctl->id.name + len, control == USB_FEATURE_MUTE ? " Switch" : " Volume",
987   - sizeof(kctl->id.name));
  991 + append_ctl_name(kctl, control == USB_FEATURE_MUTE ?
  992 + " Switch" : " Volume");
988 993 if (control == USB_FEATURE_VOLUME) {
989 994 kctl->tlv.c = mixer_vol_tlv;
990 995 kctl->vd[0].access |=
... ... @@ -1143,7 +1148,7 @@
1143 1148 len = get_term_name(state, iterm, kctl->id.name, sizeof(kctl->id.name), 0);
1144 1149 if (! len)
1145 1150 len = sprintf(kctl->id.name, "Mixer Source %d", in_ch + 1);
1146   - strlcat(kctl->id.name + len, " Volume", sizeof(kctl->id.name));
  1151 + append_ctl_name(kctl, " Volume");
1147 1152  
1148 1153 snd_printdd(KERN_INFO "[%d] MU [%s] ch = %d, val = %d/%d\n",
1149 1154 cval->id, kctl->id.name, cval->channels, cval->min, cval->max);
... ... @@ -1400,8 +1405,8 @@
1400 1405 if (! len)
1401 1406 strlcpy(kctl->id.name, name, sizeof(kctl->id.name));
1402 1407 }
1403   - strlcat(kctl->id.name, " ", sizeof(kctl->id.name));
1404   - strlcat(kctl->id.name, valinfo->suffix, sizeof(kctl->id.name));
  1408 + append_ctl_name(kctl, " ");
  1409 + append_ctl_name(kctl, valinfo->suffix);
1405 1410  
1406 1411 snd_printdd(KERN_INFO "[%d] PU [%s] ch = %d, val = %d/%d\n",
1407 1412 cval->id, kctl->id.name, cval->channels, cval->min, cval->max);
1408 1413  
... ... @@ -1610,9 +1615,9 @@
1610 1615 strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name));
1611 1616  
1612 1617 if ((state->oterm.type & 0xff00) == 0x0100)
1613   - strlcat(kctl->id.name, " Capture Source", sizeof(kctl->id.name));
  1618 + append_ctl_name(kctl, " Capture Source");
1614 1619 else
1615   - strlcat(kctl->id.name, " Playback Source", sizeof(kctl->id.name));
  1620 + append_ctl_name(kctl, " Playback Source");
1616 1621 }
1617 1622  
1618 1623 snd_printdd(KERN_INFO "[%d] SU [%s] items = %d\n",