Commit 08d1e635089f41e28fec644a8620a0e8d66b1235
1 parent
2f229a31aa
Exists in
master
and in
4 other branches
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", |