Re: [libvirt] [PATCH 12/18] tpm: Check whether previously found executables were updated

2019-07-09 Thread Marc-André Lureau
Hi

On Tue, Jul 9, 2019 at 9:24 PM Stefan Berger  wrote:
>
> Check whether previously found executables were updated and if
> so look for them again. This helps to use updated features of
> swtpm and its tools upon updating them.
>
> Signed-off-by: Stefan Berger 

Reviewed-by: Marc-André Lureau 


> ---
>  src/qemu/qemu_tpm.c |  1 +
>  src/tpm/virtpm.c| 34 ++
>  2 files changed, 35 insertions(+)
>
> diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c
> index 61b4f72320..2afa8db448 100644
> --- a/src/qemu/qemu_tpm.c
> +++ b/src/qemu/qemu_tpm.c
> @@ -20,6 +20,7 @@
>
>  #include 
>
> +#include 
>  #include 
>  #include 
>  #include 
> diff --git a/src/tpm/virtpm.c b/src/tpm/virtpm.c
> index 0179b1e8be..e4735f9c4d 100644
> --- a/src/tpm/virtpm.c
> +++ b/src/tpm/virtpm.c
> @@ -77,8 +77,13 @@ virTPMCreateCancelPath(const char *devpath)
>   * executables for the swtpm; to be found on the host
>   */
>  static char *swtpm_path;
> +static struct stat swtpm_stat;
> +
>  static char *swtpm_setup;
> +static struct stat swtpm_setup_stat;
> +
>  static char *swtpm_ioctl;
> +static struct stat swtpm_ioctl_stat;
>
>  const char *
>  virTPMGetSwtpm(void)
> @@ -116,18 +121,22 @@ virTPMEmulatorInit(void)
>  static const struct {
>  const char *name;
>  char **path;
> +struct stat *stat;
>  } prgs[] = {
>  {
>  .name = "swtpm",
>  .path = _path,
> +.stat = _stat,
>  },
>  {
>  .name = "swtpm_setup",
>  .path = _setup,
> +.stat = _setup_stat,
>  },
>  {
>  .name = "swtpm_ioctl",
>  .path = _ioctl,
> +.stat = _ioctl_stat,
>  }
>  };
>  size_t i;
> @@ -135,6 +144,23 @@ virTPMEmulatorInit(void)
>  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, ) < 0) {
> +virReportSystemError(errno,
> + _("Could not stat %s"), path);
> +findit = true;
> +}
> +if (!findit &&
> +memcmp(_mtim,
> +   [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
>

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

[libvirt] [PATCH 12/18] tpm: Check whether previously found executables were updated

2019-07-09 Thread Stefan Berger
Check whether previously found executables were updated and if
so look for them again. This helps to use updated features of
swtpm and its tools upon updating them.

Signed-off-by: Stefan Berger 
---
 src/qemu/qemu_tpm.c |  1 +
 src/tpm/virtpm.c| 34 ++
 2 files changed, 35 insertions(+)

diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c
index 61b4f72320..2afa8db448 100644
--- a/src/qemu/qemu_tpm.c
+++ b/src/qemu/qemu_tpm.c
@@ -20,6 +20,7 @@
 
 #include 
 
+#include 
 #include 
 #include 
 #include 
diff --git a/src/tpm/virtpm.c b/src/tpm/virtpm.c
index 0179b1e8be..e4735f9c4d 100644
--- a/src/tpm/virtpm.c
+++ b/src/tpm/virtpm.c
@@ -77,8 +77,13 @@ virTPMCreateCancelPath(const char *devpath)
  * executables for the swtpm; to be found on the host
  */
 static char *swtpm_path;
+static struct stat swtpm_stat;
+
 static char *swtpm_setup;
+static struct stat swtpm_setup_stat;
+
 static char *swtpm_ioctl;
+static struct stat swtpm_ioctl_stat;
 
 const char *
 virTPMGetSwtpm(void)
@@ -116,18 +121,22 @@ virTPMEmulatorInit(void)
 static const struct {
 const char *name;
 char **path;
+struct stat *stat;
 } prgs[] = {
 {
 .name = "swtpm",
 .path = _path,
+.stat = _stat,
 },
 {
 .name = "swtpm_setup",
 .path = _setup,
+.stat = _setup_stat,
 },
 {
 .name = "swtpm_ioctl",
 .path = _ioctl,
+.stat = _ioctl_stat,
 }
 };
 size_t i;
@@ -135,6 +144,23 @@ virTPMEmulatorInit(void)
 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, ) < 0) {
+virReportSystemError(errno,
+ _("Could not stat %s"), path);
+findit = true;
+}
+if (!findit &&
+memcmp(_mtim,
+   [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

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