summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens2019-09-13 20:04:03 +0000
committerHauke Mehrtens2019-09-19 20:29:24 +0000
commitc844ace9729a906f98d5508dcf145204cbff10dc (patch)
tree4fb74aa6f39b466d87d2aba53514ed2a5ddd99d6
parent62dc8c0efe1e8acd694b893effd973a295c5b676 (diff)
downloadprocd-c844ace9729a906f98d5508dcf145204cbff10dc.tar.gz
system: Fix possible integer overflows
This multiplication was done on 32 bit integers before, explicitly cast them to 64 bit values before to make sure the multiplication is done on 64 bit numbers. Coverity: #1412417, #1412410, #1412409, #1412411, #1412424, #1412407 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--system.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/system.c b/system.c
index 4068e64..751a016 100644
--- a/system.c
+++ b/system.c
@@ -254,15 +254,21 @@ static int system_info(struct ubus_context *ctx, struct ubus_object *obj,
blobmsg_close_array(&b, c);
c = blobmsg_open_table(&b, "memory");
- blobmsg_add_u64(&b, "total", info.mem_unit * info.totalram);
- blobmsg_add_u64(&b, "free", info.mem_unit * info.freeram);
- blobmsg_add_u64(&b, "shared", info.mem_unit * info.sharedram);
- blobmsg_add_u64(&b, "buffered", info.mem_unit * info.bufferram);
+ blobmsg_add_u64(&b, "total",
+ (uint64_t)info.mem_unit * (uint64_t)info.totalram);
+ blobmsg_add_u64(&b, "free",
+ (uint64_t)info.mem_unit * (uint64_t)info.freeram);
+ blobmsg_add_u64(&b, "shared",
+ (uint64_t)info.mem_unit * (uint64_t)info.sharedram);
+ blobmsg_add_u64(&b, "buffered",
+ (uint64_t)info.mem_unit * (uint64_t)info.bufferram);
blobmsg_close_table(&b, c);
c = blobmsg_open_table(&b, "swap");
- blobmsg_add_u64(&b, "total", info.mem_unit * info.totalswap);
- blobmsg_add_u64(&b, "free", info.mem_unit * info.freeswap);
+ blobmsg_add_u64(&b, "total",
+ (uint64_t)info.mem_unit * (uint64_t)info.totalswap);
+ blobmsg_add_u64(&b, "free",
+ (uint64_t)info.mem_unit * (uint64_t)info.freeswap);
blobmsg_close_table(&b, c);
#endif