mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
usb: host: max3421-hcd: Replace snprintf() with the safer scnprintf() variant
There is a general misunderstanding amongst engineers that {v}snprintf() returns the length of the data *actually* encoded into the destination array. However, as per the C99 standard {v}snprintf() really returns the length of the data that *would have been* written if there were enough space for it. This misunderstanding has led to buffer-overruns in the past. It's generally considered safer to use the {v}scnprintf() variants in their place (or even sprintf() in simple cases). So let's do that. Link: https://lwn.net/Articles/69419/ Link: https://github.com/KSPP/linux/issues/105 Cc: Cristian Birsan <cristian.birsan@microchip.com> Cc: Nicolas Ferre <nicolas.ferre@microchip.com> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev> Cc: <linux-arm-kernel@lists.infradead.org> Signed-off-by: Lee Jones <lee@kernel.org> Link: https://lore.kernel.org/r/20231213164246.1021885-8-lee@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
01dc7f7c29
commit
a6eef67cdb
@ -1158,12 +1158,12 @@ dump_eps(struct usb_hcd *hcd)
|
||||
end = dp + sizeof(ubuf);
|
||||
*dp = '\0';
|
||||
list_for_each_entry(urb, &ep->urb_list, urb_list) {
|
||||
ret = snprintf(dp, end - dp, " %p(%d.%s %d/%d)", urb,
|
||||
usb_pipetype(urb->pipe),
|
||||
usb_urb_dir_in(urb) ? "IN" : "OUT",
|
||||
urb->actual_length,
|
||||
urb->transfer_buffer_length);
|
||||
if (ret < 0 || ret >= end - dp)
|
||||
ret = scnprintf(dp, end - dp, " %p(%d.%s %d/%d)", urb,
|
||||
usb_pipetype(urb->pipe),
|
||||
usb_urb_dir_in(urb) ? "IN" : "OUT",
|
||||
urb->actual_length,
|
||||
urb->transfer_buffer_length);
|
||||
if (ret == end - dp - 1)
|
||||
break; /* error or buffer full */
|
||||
dp += ret;
|
||||
}
|
||||
@ -1255,9 +1255,9 @@ max3421_handle_irqs(struct usb_hcd *hcd)
|
||||
end = sbuf + sizeof(sbuf);
|
||||
*dp = '\0';
|
||||
for (i = 0; i < 16; ++i) {
|
||||
int ret = snprintf(dp, end - dp, " %lu",
|
||||
max3421_hcd->err_stat[i]);
|
||||
if (ret < 0 || ret >= end - dp)
|
||||
int ret = scnprintf(dp, end - dp, " %lu",
|
||||
max3421_hcd->err_stat[i]);
|
||||
if (ret == end - dp - 1)
|
||||
break; /* error or buffer full */
|
||||
dp += ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user