Skip to content

Commit

Permalink
qga: fail early for invalid time
Browse files Browse the repository at this point in the history
It's possible to set system time with dates after 2070, however, it's
not possible to set the RTC. It has limitation to up to year
2070 (1970+100). In order to keep both clock in sync and before the
kernel complains on invalid values, bail out early.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
elmarco authored and mdroth committed Jul 8, 2015
1 parent d6c5528 commit 00d2f37
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions qga/commands-posix.c
Expand Up @@ -154,6 +154,8 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)

/* If user has passed a time, validate and set it. */
if (has_time) {
GDate date = { 0, };

/* year-2038 will overflow in case time_t is 32bit */
if (time_ns / 1000000000 != (time_t)(time_ns / 1000000000)) {
error_setg(errp, "Time %" PRId64 " is too large", time_ns);
Expand All @@ -162,6 +164,11 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)

tv.tv_sec = time_ns / 1000000000;
tv.tv_usec = (time_ns % 1000000000) / 1000;
g_date_set_time_t(&date, tv.tv_sec);
if (date.year < 1970 || date.year >= 2070) {
error_setg_errno(errp, errno, "Invalid time");
return;
}

ret = settimeofday(&tv, NULL);
if (ret < 0) {
Expand Down

0 comments on commit 00d2f37

Please sign in to comment.