]> granicus.if.org Git - sudo/commitdiff
Check clock_gettime() return value and warn if it fails.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 24 Feb 2015 16:53:50 +0000 (09:53 -0700)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 24 Feb 2015 16:53:50 +0000 (09:53 -0700)
Currently, the timestamp will be ignored if clock_gettime() fails.

include/sudo_compat.h
plugins/sudoers/timestamp.c

index 097e6b6ba075db947222179ecb3d5eb80b2fd57c..49b6e732fade1487a56fc4bc524ee2be0ec1e077 100644 (file)
@@ -460,8 +460,10 @@ __dso_public int sudo_sig2str(int signo, char *signame);
 # define sig2str(_a, _b) sudo_sig2str((_a), (_b))
 #endif /* HAVE_SIG2STR */
 #ifndef HAVE_CLOCK_GETTIME
-# define CLOCK_REALTIME 0
-# ifdef __MACH__
+# if !defined(CLOCK_REALTIME)
+#  define CLOCK_REALTIME 0
+# endif
+# if defined(__MACH__) && !defined(CLOCK_MONOTONIC)
 #  define CLOCK_MONOTONIC 1
 # endif
 __dso_public int sudo_clock_gettime(clockid_t clock_id, struct timespec *tp);
index 39496925aaf1c47f44d05caa4ab4297bf28ee584..05e08ff1ac40378ed23db84fb52c833a38a85e13 100644 (file)
@@ -345,7 +345,10 @@ update_timestamp(struct passwd *pw)
 
     /* Fill in time stamp. */
     memcpy(&entry, &timestamp_key, sizeof(struct timestamp_entry));
-    clock_gettime(SUDO_CLOCK_MONOTONIC, &entry.ts);
+    if (clock_gettime(SUDO_CLOCK_MONOTONIC, &entry.ts) == -1) {
+       log_warning(0, "clock_gettime(%d)", SUDO_CLOCK_MONOTONIC);
+       goto done;
+    }
 
     /* Open time stamp file and lock it for exclusive access. */
     if (timestamp_uid != 0)
@@ -427,7 +430,10 @@ timestamp_status(struct passwd *pw)
            timestamp_key.u.ppid = getppid();
        }
     }
-    clock_gettime(SUDO_CLOCK_MONOTONIC, &timestamp_key.ts);
+    if (clock_gettime(SUDO_CLOCK_MONOTONIC, &timestamp_key.ts) == -1) {
+       log_warning(0, "clock_gettime(%d)", SUDO_CLOCK_MONOTONIC);
+       status = TS_ERROR;
+    }
 
     /* If the time stamp dir is missing there is nothing to do. */
     if (status == TS_MISSING)