mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 20:32:22 +00:00
staging: rtl8188eu: Use scnprintf() for avoiding potential buffer overflow
Since snprintf() returns the would-be-output size instead of the actual output size, the succeeding calls may go beyond the given buffer limit. Fix it by replacing with scnprintf(). Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20200311092451.23933-2-tiwai@suse.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
234ff54287
commit
72e7375caf
@ -15,7 +15,7 @@ int proc_get_drv_version(char *page, char **start,
|
|||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
len += snprintf(page + len, count - len, "%s\n", DRIVERVERSION);
|
len += scnprintf(page + len, count - len, "%s\n", DRIVERVERSION);
|
||||||
|
|
||||||
*eof = 1;
|
*eof = 1;
|
||||||
return len;
|
return len;
|
||||||
@ -86,16 +86,16 @@ int proc_get_read_reg(char *page, char **start,
|
|||||||
|
|
||||||
switch (proc_get_read_len) {
|
switch (proc_get_read_len) {
|
||||||
case 1:
|
case 1:
|
||||||
len += snprintf(page + len, count - len, "usb_read8(0x%x)=0x%x\n", proc_get_read_addr, usb_read8(padapter, proc_get_read_addr));
|
len += scnprintf(page + len, count - len, "usb_read8(0x%x)=0x%x\n", proc_get_read_addr, usb_read8(padapter, proc_get_read_addr));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
len += snprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr));
|
len += scnprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
len += snprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr));
|
len += scnprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
len += snprintf(page + len, count - len, "error read length=%d\n", proc_get_read_len);
|
len += scnprintf(page + len, count - len, "error read length=%d\n", proc_get_read_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ int proc_get_adapter_state(char *page, char **start,
|
|||||||
struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
|
struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
len += snprintf(page + len, count - len, "bSurpriseRemoved=%d, bDriverStopped=%d\n",
|
len += scnprintf(page + len, count - len, "bSurpriseRemoved=%d, bDriverStopped=%d\n",
|
||||||
padapter->bSurpriseRemoved, padapter->bDriverStopped);
|
padapter->bSurpriseRemoved, padapter->bDriverStopped);
|
||||||
|
|
||||||
*eof = 1;
|
*eof = 1;
|
||||||
@ -170,11 +170,11 @@ int proc_get_best_channel(char *page, char **start,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* debug */
|
/* debug */
|
||||||
len += snprintf(page + len, count - len, "The rx cnt of channel %3d = %d\n",
|
len += scnprintf(page + len, count - len, "The rx cnt of channel %3d = %d\n",
|
||||||
pmlmeext->channel_set[i].ChannelNum, pmlmeext->channel_set[i].rx_count);
|
pmlmeext->channel_set[i].ChannelNum, pmlmeext->channel_set[i].rx_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
len += snprintf(page + len, count - len, "best_channel_24G = %d\n", best_channel_24G);
|
len += scnprintf(page + len, count - len, "best_channel_24G = %d\n", best_channel_24G);
|
||||||
|
|
||||||
*eof = 1;
|
*eof = 1;
|
||||||
return len;
|
return len;
|
||||||
|
@ -193,12 +193,12 @@ static char *translate_scan(struct adapter *padapter,
|
|||||||
/*Add basic and extended rates */
|
/*Add basic and extended rates */
|
||||||
max_rate = 0;
|
max_rate = 0;
|
||||||
p = custom;
|
p = custom;
|
||||||
p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
|
p += scnprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
|
||||||
while (pnetwork->network.SupportedRates[i] != 0) {
|
while (pnetwork->network.SupportedRates[i] != 0) {
|
||||||
rate = pnetwork->network.SupportedRates[i]&0x7F;
|
rate = pnetwork->network.SupportedRates[i]&0x7F;
|
||||||
if (rate > max_rate)
|
if (rate > max_rate)
|
||||||
max_rate = rate;
|
max_rate = rate;
|
||||||
p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
|
p += scnprintf(p, MAX_CUSTOM_LEN - (p - custom),
|
||||||
"%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
|
"%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user