On 7/24/19 1:02 PM, Daniel P. Berrangé wrote:
On Fri, Jul 12, 2019 at 12:23:43PM -0400, Stefan Berger wrote:

      for (i = 0; i < ARRAY_CARDINALITY(prgs); i++) {
          char *path;
          bool findit = *prgs[i].path == NULL;
+        struct stat statbuf;
+        char *tmp;
+
+        if (!findit) {
+            /* has executables changed? */
+            if (stat(*prgs[i].path, &statbuf) < 0) {
+                virReportSystemError(errno,
+                                     _("Could not stat %s"), path);
+                findit = true;
If we can't stat the binary, then I we should reset ourselves
back to fully uninitialized state. Certainly if we intend to
call virReportSystemError, then we must ensure the caller
treats it as a fatal error. Currently I believe its still
treated as success by the caller since progs[i].path is
already non-NULL at this point.


Removed the virReportError() here since we will try to find it again below and report errors there then.



+            }
+            if (!findit &&
+                memcmp(&statbuf.st_mtim,
+                       &prgs[i].stat->st_mtime,
+                       sizeof(statbuf.st_mtim))) {
+                findit = true;
+            }
+        }
if (findit) {
              path = virFindFileInPath(prgs[i].name);
@@ -151,7 +177,15 @@ virTPMEmulatorInit(void)
                  VIR_FREE(path);
                  return -1;
              }
+            if (stat(path, prgs[i].stat) < 0) {
+                virReportSystemError(errno,
+                                     _("Could not stat %s"), path);
+                VIR_FREE(path);
+                return -1;
+            }
+            tmp = *prgs[i].path;
              *prgs[i].path = path;
+            VIR_FREE(tmp);
          }
      }
--
2.20.1

Regards,
Daniel


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to