[PATCH] util: fix cache invalidation of swtpm capabilities

Daniel P. Berrangé posted 1 patch 1 week, 4 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20211124105838.243746-1-berrange@redhat.com
src/util/virtpm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

[PATCH] util: fix cache invalidation of swtpm capabilities

Posted by Daniel P. Berrangé 1 week, 4 days ago
The check for whether the swtpm binary was modified is checking pointers
to the mtime field in two distinct structs, so will always compare
different. This resulted in re-probing swtpm capabilities every time,
as many as 20 times for a single VM launch.

Fixes:

  commit 01cf7a1bb9f1da27ad8bcbaa82c4f7a948c6a793
  Author: Stefan Berger <stefanb@us.ibm.com>
  Date:   Thu Jul 25 14:22:04 2019 -0400

    tpm: Check whether previously found executables were updated

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/util/virtpm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/util/virtpm.c b/src/util/virtpm.c
index 8a77ba98ff..ffec23a535 100644
--- a/src/util/virtpm.c
+++ b/src/util/virtpm.c
@@ -301,7 +301,7 @@ virTPMEmulatorInit(void)
                 findit = true;
 
             if (!findit &&
-                &statbuf.st_mtime != &prgs[i].stat->st_mtime)
+                statbuf.st_mtime != prgs[i].stat->st_mtime)
                 findit = true;
         }
 
-- 
2.33.1

Re: [PATCH] util: fix cache invalidation of swtpm capabilities

Posted by Michal Prívozník 1 week, 4 days ago
On 11/24/21 11:58, Daniel P. Berrangé wrote:
> The check for whether the swtpm binary was modified is checking pointers
> to the mtime field in two distinct structs, so will always compare
> different. This resulted in re-probing swtpm capabilities every time,
> as many as 20 times for a single VM launch.
> 
> Fixes:
> 
>   commit 01cf7a1bb9f1da27ad8bcbaa82c4f7a948c6a793
>   Author: Stefan Berger <stefanb@us.ibm.com>
>   Date:   Thu Jul 25 14:22:04 2019 -0400
> 
>     tpm: Check whether previously found executables were updated
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  src/util/virtpm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/util/virtpm.c b/src/util/virtpm.c
> index 8a77ba98ff..ffec23a535 100644
> --- a/src/util/virtpm.c
> +++ b/src/util/virtpm.c
> @@ -301,7 +301,7 @@ virTPMEmulatorInit(void)
>                  findit = true;
>  
>              if (!findit &&
> -                &statbuf.st_mtime != &prgs[i].stat->st_mtime)
> +                statbuf.st_mtime != prgs[i].stat->st_mtime)
>                  findit = true;
>          }
>  
> 

Well, if the function ends up on the same position in stack every time
it's called then this works :-)

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>

Michal