diff options
author | Takashi Iwai <tiwai@suse.de> | 2021-01-15 12:57:58 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2021-01-15 13:05:20 +0300 |
commit | e8afdfdc8125801b1e28b5a54d2bd94cf2d59965 (patch) | |
tree | d609b1772ec9bf56cc1af94290d6e1b0583bab43 /sound/usb/mixer.c | |
parent | 75b1a8f9d62e50f05d0e4e9f3c8bcde32527ffc1 (diff) | |
download | linux-e8afdfdc8125801b1e28b5a54d2bd94cf2d59965.tar.xz |
ALSA: usb-audio: Convert remaining strlcpy() to strscpy()
USB-audio driver still contains two calls of strlcpy() because the
return size is evaluated. Basically it just checks whether the string
is copied or not, but since strcpy() may return a negative error code,
we should check the negative value and treat as filled.
Link: https://lore.kernel.org/r/20210115095758.19707-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/mixer.c')
-rw-r--r-- | sound/usb/mixer.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 85fed017710e..c7da38348035 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -115,11 +115,14 @@ find_map(const struct usbmix_name_map *p, int unitid, int control) static int check_mapped_name(const struct usbmix_name_map *p, char *buf, int buflen) { + int len; + if (!p || !p->name) return 0; buflen--; - return strlcpy(buf, p->name, buflen); + len = strscpy(buf, p->name, buflen); + return len < 0 ? buflen : len; } /* ignore the error value if ignore_ctl_error flag is set */ @@ -151,12 +154,15 @@ static int check_mapped_selector_name(struct mixer_build *state, int unitid, int index, char *buf, int buflen) { const struct usbmix_selector_map *p; + int len; if (!state->selector_map) return 0; for (p = state->selector_map; p->id; p++) { - if (p->id == unitid && index < p->count) - return strlcpy(buf, p->names[index], buflen); + if (p->id == unitid && index < p->count) { + len = strscpy(buf, p->names[index], buflen); + return len < 0 ? buflen : len; + } } return 0; } |