Improve buffer overflow detection in sprintflst.c

pull/928/head
Mike Black W9MDB 2022-01-10 17:14:05 -06:00
rodzic 265be9f313
commit dfc3725de3
1 zmienionych plików z 23 dodań i 19 usunięć

Wyświetl plik

@ -41,7 +41,7 @@
// eventually should make this -RIG_EINTERNAL // eventually should make this -RIG_EINTERNAL
int check_buffer_overflow(char *str, int len, int nlen) int check_buffer_overflow(char *str, int len, int nlen)
{ {
if (len + 1 >= nlen) if (len + 32 >= nlen) // make sure at least 32 bytes are available
{ {
rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow, len=%u, nlen=%d, str='%s'\n", rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow, len=%u, nlen=%d, str='%s'\n",
__func__, len, nlen, str); __func__, len, nlen, str);
@ -71,10 +71,10 @@ int rig_sprintf_vfo(char *str, int nlen, vfo_t vfo)
if (sv && sv[0] && (strstr(sv, "None") == 0)) if (sv && sv[0] && (strstr(sv, "None") == 0))
{ {
len += sprintf(str + len, "%s ", sv); len += sprintf(str + len, "%s ", sv);
check_buffer_overflow(str, len, nlen);
} }
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -102,9 +102,9 @@ int rig_sprintf_mode(char *str, int nlen, rmode_t mode)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -149,10 +149,10 @@ int rig_sprintf_ant(char *str, int nlen, ant_t ant)
} }
len += sprintf(str + len, "%s ", ant_name); len += sprintf(str + len, "%s ", ant_name);
check_buffer_overflow(str, len, nlen);
} }
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -180,9 +180,9 @@ int rig_sprintf_func(char *str, int nlen, setting_t func)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -210,9 +210,9 @@ int rot_sprintf_func(char *str, int nlen, setting_t func)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -240,9 +240,9 @@ int rig_sprintf_level(char *str, int nlen, setting_t level)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -270,9 +270,9 @@ int rot_sprintf_level(char *str, int nlen, setting_t level)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -300,9 +300,9 @@ int amp_sprintf_level(char *str, int nlen, setting_t level)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -341,9 +341,9 @@ int sprintf_level_ext(char *str, int nlen, const struct confparams *extlevels)
/* ignore case RIG_CONF_BUTTON */ /* ignore case RIG_CONF_BUTTON */
break; break;
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -399,9 +399,9 @@ int rig_sprintf_level_gran(char *str, int nlen, setting_t level,
gran[i].max.i, gran[i].max.i,
gran[i].step.i); gran[i].step.i);
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -457,9 +457,9 @@ int rot_sprintf_level_gran(char *str, int nlen, setting_t level,
gran[i].max.i, gran[i].max.i,
gran[i].step.i); gran[i].step.i);
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -487,9 +487,9 @@ int rig_sprintf_parm(char *str, int nlen, setting_t parm)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -517,9 +517,9 @@ int rot_sprintf_parm(char *str, int nlen, setting_t parm)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -575,9 +575,9 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm,
gran[i].max.i, gran[i].max.i,
gran[i].step.i); gran[i].step.i);
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -633,9 +633,9 @@ int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm,
gran[i].max.i, gran[i].max.i,
gran[i].step.i); gran[i].step.i);
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -663,9 +663,9 @@ int rig_sprintf_vfop(char *str, int nlen, vfo_op_t op)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -693,9 +693,9 @@ int rig_sprintf_scan(char *str, int nlen, scan_t rscan)
strcat(str, ms); strcat(str, ms);
strcat(str, " "); strcat(str, " ");
len += strlen(ms) + 1; len += strlen(ms) + 1;
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -722,9 +722,9 @@ int rot_sprintf_status(char *str, int nlen, rot_status_t status)
{ {
len += sprintf(str + len, "%s ", sv); len += sprintf(str + len, "%s ", sv);
} }
check_buffer_overflow(str, len, nlen);
} }
check_buffer_overflow(str, len, nlen);
return len; return len;
} }
@ -762,6 +762,8 @@ int rig_sprintf_spectrum_modes(char *str, int nlen,
len += lentmp; len += lentmp;
check_buffer_overflow(str, len, nlen);
} }
return len; return len;
@ -791,6 +793,7 @@ int rig_sprintf_spectrum_spans(char *str, int nlen, const freq_t *spans)
} }
len += lentmp; len += lentmp;
check_buffer_overflow(str, len, nlen);
} }
return len; return len;
@ -822,6 +825,7 @@ int rig_sprintf_spectrum_avg_modes(char *str, int nlen,
} }
len += lentmp; len += lentmp;
check_buffer_overflow(str, len, nlen);
} }
return len; return len;