tc util: Fix possible buffer overflow when print class id
Use correct handle buffer length. Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
This commit is contained in:
parent
782cf01dc0
commit
46679bbbe8
19
tc/tc_util.c
19
tc/tc_util.c
|
|
@ -128,30 +128,31 @@ ok:
|
|||
return 0;
|
||||
}
|
||||
|
||||
int print_tc_classid(char *buf, int len, __u32 h)
|
||||
int print_tc_classid(char *buf, int blen, __u32 h)
|
||||
{
|
||||
char handle[40] = {};
|
||||
SPRINT_BUF(handle) = {};
|
||||
int hlen = SPRINT_BSIZE - 1;
|
||||
|
||||
if (h == TC_H_ROOT)
|
||||
sprintf(handle, "root");
|
||||
else if (h == TC_H_UNSPEC)
|
||||
snprintf(handle, len, "none");
|
||||
snprintf(handle, hlen, "none");
|
||||
else if (TC_H_MAJ(h) == 0)
|
||||
snprintf(handle, len, ":%x", TC_H_MIN(h));
|
||||
snprintf(handle, hlen, ":%x", TC_H_MIN(h));
|
||||
else if (TC_H_MIN(h) == 0)
|
||||
snprintf(handle, len, "%x:", TC_H_MAJ(h) >> 16);
|
||||
snprintf(handle, hlen, "%x:", TC_H_MAJ(h) >> 16);
|
||||
else
|
||||
snprintf(handle, len, "%x:%x", TC_H_MAJ(h) >> 16, TC_H_MIN(h));
|
||||
snprintf(handle, hlen, "%x:%x", TC_H_MAJ(h) >> 16, TC_H_MIN(h));
|
||||
|
||||
if (use_names) {
|
||||
char clname[IDNAME_MAX] = {};
|
||||
|
||||
if (id_to_name(cls_names, h, clname))
|
||||
snprintf(buf, len, "%s#%s", clname, handle);
|
||||
snprintf(buf, blen, "%s#%s", clname, handle);
|
||||
else
|
||||
snprintf(buf, len, "%s", handle);
|
||||
snprintf(buf, blen, "%s", handle);
|
||||
} else {
|
||||
snprintf(buf, len, "%s", handle);
|
||||
snprintf(buf, blen, "%s", handle);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue