iproute2: fix hidden uint to uin64_t promotion in json_print
authorKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Sun, 18 Mar 2018 15:50:04 +0000 (15:50 +0000)
committerHans Dedecker <dedeckeh@gmail.com>
Mon, 19 Mar 2018 10:40:01 +0000 (11:40 +0100)
commit745d0e7f4b6e8659cc967291acd33889035127f0
treec75a023336eeb5c91a03017e59e2333c74ade2d7
parentb0b5d0aebb7e42e46d13977e0f841eeaad1745c7
iproute2: fix hidden uint to uin64_t promotion in json_print

print_int used 'int' type internally, whereas print_uint used 'uint64_t'

These helper functions eventually call vfprintf(fp, fmt, args) which is
a variable argument list function and is dependent upon 'fmt' containing
correct information about the length of the passed arguments.

Unfortunately print_int v print_uint offered no clue to the programmer
that internally passed ints to print_uint were being promoted to 64bits,
thus the format passed in 'fmt' string vs the actual passed integer
could be different lengths.  This is even more interesting on big endian
architectures where 'vfprintf' would be looking in the middle of an
int64 type.  Symptoms of this included tc qdisc showing bizarre values
for a variety of fields across a variety of qdiscs (e.g. refcnt, flows,
quantum)

print_u/int now stick with native int size.

A similar patch has been sent upstream.

Fixes FS#1425

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
package/network/utils/iproute2/Makefile
package/network/utils/iproute2/patches/910-iproute2-fix-hidden-uint-to-uin64_t-promottion-in-js.patch [new file with mode: 0644]