From e9db937f4008f097f4ee9dc341a3afc219a96fd9 Mon Sep 17 00:00:00 2001 From: Roman Kiryanov Date: Wed, 21 Aug 2019 11:01:39 -0700 Subject: [PATCH] Fix integer overflow in make_timestamp_ns_locked timespec::tv_sec is time_t which is 32bit wide on 32bit platforms. Multipliyng 32bit integers (tv_sec and 1000) produces another 32bit integer which overflows in this case and turns into a negative value which confuses the logic downstream. This change makes the multiplication to be 64bit which prevent the overflow. Bug: 139320584 Bug: 139538727 Test: GtsIncidentManagerTestCases Change-Id: Ie956074961c7c1f08e2519920f7ce69d5c9e12d3 Signed-off-by: Roman Kiryanov --- cmds/incidentd/src/WorkDirectory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmds/incidentd/src/WorkDirectory.cpp b/cmds/incidentd/src/WorkDirectory.cpp index 0570c3a039ae..8dcb86537487 100644 --- a/cmds/incidentd/src/WorkDirectory.cpp +++ b/cmds/incidentd/src/WorkDirectory.cpp @@ -664,7 +664,7 @@ int64_t WorkDirectory::make_timestamp_ns_locked() { nanosleep(&spec, nullptr); } clock_gettime(CLOCK_REALTIME, &spec); - timestampNs = (spec.tv_sec) * 1000 + spec.tv_nsec; + timestampNs = int64_t(spec.tv_sec) * 1000 + spec.tv_nsec; } while (file_exists_locked(timestampNs)); return timestampNs; } -- 2.11.0