|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Limit timeoffset to valid values
timeoffset is expressed in +/- seconds from UTC. This translates to
43200. Log out of range values and ignore the timeoffset.
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenagent/service.cpp | 30 ++++++++++++++++++++++--------
src/xenagent/service.h | 2 +-
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/src/xenagent/service.cpp b/src/xenagent/service.cpp
index a77ff23..2c034b8 100644
--- a/src/xenagent/service.cpp
+++ b/src/xenagent/service.cpp
@@ -40,6 +40,9 @@
#include "service.h"
#include "messages.h"
+// 12 hours in seconds
+#define MAX_TIME_OFFSET (12 * 60 * 60)
+
class CCritSec
{
public:
@@ -404,17 +407,23 @@ bool CXenIfaceCreator::IsRTCInUTC()
return val;
}
-void CXenIfaceCreator::AdjustXenTimeToUTC(FILETIME* now)
+long CXenIfaceCreator::AdjustXenTimeToUTC(FILETIME* now)
{
std::string vm;
if (!m_device->StoreRead("vm", vm))
- return;
+ return 0;
std::string offs;
if (!m_device->StoreRead(vm + "/rtc/timeoffset", offs))
- return;
+ return 0;
long offset = (long)atoi(offs.c_str());
+ if (offset > MAX_TIME_OFFSET || offset < -MAX_TIME_OFFSET) {
+ CXenAgent::Log("Invalid offset \"%s\" (%+d), using 0 offset\n",
+ offs.c_str(),
+ offset);
+ return 0;
+ }
ULARGE_INTEGER lnow;
lnow.LowPart = now->dwLowDateTime;
@@ -424,11 +433,14 @@ void CXenIfaceCreator::AdjustXenTimeToUTC(FILETIME* now)
now->dwLowDateTime = lnow.LowPart;
now->dwHighDateTime = lnow.HighPart;
+
+ return offset;
}
void CXenIfaceCreator::SetXenTime()
{
bool IsUTC = IsRTCInUTC();
+ long offset = 0;
SYSTEMTIME cur = { 0 };
if (IsUTC)
@@ -441,7 +453,7 @@ void CXenIfaceCreator::SetXenTime()
return;
if (IsUTC)
- AdjustXenTimeToUTC(&now);
+ offset = AdjustXenTimeToUTC(&now);
SYSTEMTIME sys = { 0 };
if (!FileTimeToSystemTime(&now, &sys))
@@ -451,12 +463,14 @@ void CXenIfaceCreator::SetXenTime()
return;
CXenAgent::Log("RTC is in %s\n", IsUTC ? "UTC" : "local time");
- CXenAgent::Log("Time Now = %d/%d/%d %d:%02d:%02d.%d\n",
+ CXenAgent::Log("Time Now = %d/%d/%d %d:%02d:%02d.%d (%+d)\n",
cur.wYear, cur.wMonth, cur.wDay,
- cur.wHour, cur.wMinute, cur.wSecond, cur.wMilliseconds);
- CXenAgent::Log("New Time = %d/%d/%d %d:%02d:%02d.%d\n",
+ cur.wHour, cur.wMinute, cur.wSecond, cur.wMilliseconds,
+ offset);
+ CXenAgent::Log("New Time = %d/%d/%d %d:%02d:%02d.%d (%+d)\n",
sys.wYear, sys.wMonth, sys.wDay,
- sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
+ sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds,
+ offset);
if (IsUTC)
SetSystemTime(&sys);
diff --git a/src/xenagent/service.h b/src/xenagent/service.h
index 9547177..e8d2ef5 100644
--- a/src/xenagent/service.h
+++ b/src/xenagent/service.h
@@ -86,7 +86,7 @@ private:
void StopSlateModeWatch();
void AcquireShutdownPrivilege();
bool IsRTCInUTC();
- void AdjustXenTimeToUTC(FILETIME* time);
+ long AdjustXenTimeToUTC(FILETIME* time);
void SetXenTime();
private:
--
2.16.2.windows.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |