batman-adv: Fix gw_bandwidth calculation on 32 bit systems
authorSven Eckelmann <sven@narfation.org>
Sun, 21 Jun 2015 17:40:09 +0000 (19:40 +0200)
committerAntonio Quartulli <antonio@meshcoding.com>
Mon, 24 Aug 2015 22:12:22 +0000 (00:12 +0200)
commit0b8336f5fc26f263821534d7a9a3633748692207
tree54e85d0494e92dc8ac92027b2c116ba1107b9fa8
parent77927b7d9dd6c9c5f59f0f49c76cda54b908090e
batman-adv: Fix gw_bandwidth calculation on 32 bit systems

The TVLV for the gw_bandwidth stores everything as u32. But the
gw_bandwidth reads the signed long which limits the maximum value to
(2 ** 31 - 1) on systems with 4 byte long. Also the input value is always
converted from either Mibit/s or Kibit/s to 100Kibit/s. This reduces the
values even further when the user sets it via the default unit Kibit/s. It
may even cause an integer overflow and end up with a value the user never
intended.

Instead read the values as u64, check for possible overflows, do the unit
adjustments and then reduce the size to u32.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
net/batman-adv/gateway_common.c