libbinder: uptimeMillis returns int64_t!

This was limiting device uptime to ~1 month. Certainly, devices should
update more frequently, but that decision should not be because of
ubsan!

This is a partial copy of the change
Ifa00c32ee184795b03e16b39ac70ff41ebf00331 here.

Bug: 197336441
Test: TH
Merged-In: Ifa00c32ee184795b03e16b39ac70ff41ebf00331
Change-Id: Ib9f3e63e968ac77f0f6ea6447d586db588e9dbe4
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp
index 4896f68..034d5a4 100644
--- a/libs/binder/IServiceManager.cpp
+++ b/libs/binder/IServiceManager.cpp
@@ -148,7 +148,8 @@
 
         const bool isVendorService =
             strcmp(ProcessState::self()->getDriverName().c_str(), "/dev/vndbinder") == 0;
-        const long timeout = uptimeMillis() + 5000;
+        const long timeout = 5000;
+        int64_t startTime = uptimeMillis();
         if (!gSystemBootCompleted && !isVendorService) {
             // Vendor code can't access system properties
             char bootCompleted[PROPERTY_VALUE_MAX];
@@ -159,7 +160,7 @@
         const long sleepTime = gSystemBootCompleted ? 1000 : 100;
 
         int n = 0;
-        while (uptimeMillis() < timeout) {
+        while (uptimeMillis() - startTime < timeout) {
             n++;
             if (isVendorService) {
                 ALOGI("Waiting for vendor service %s...", String8(name).string());