Commit 72e7375c authored by Takashi Iwai's avatar Takashi Iwai Committed by Greg Kroah-Hartman

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: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200311092451.23933-2-tiwai@suse.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 234ff542
...@@ -15,7 +15,7 @@ int proc_get_drv_version(char *page, char **start, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment