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 <rkir@google.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user