提交 c1d99200 编写于 作者: M Marc-André Lureau 提交者: Stefan Berger

tests/tpm: fix tpm_util_swtpm_has_tpm2()

Using g_spawn_async_with_pipes() is more complicated than running the
sync version. The async version returns a file descriptor for stdout, which may
not be fully read. Sometime "--tpm2" will failed to be read, and will
cause the related test to be silently skipped.

Use g_spawn_sync() instead, simplifying the code and fixing the race.
Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: NStefan Berger <stefanb@linux.vnet.ibm.com>
Signed-off-by: NStefan Berger <stefanb@linux.vnet.ibm.com>
上级 a4d71025
...@@ -145,39 +145,33 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx, ...@@ -145,39 +145,33 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx,
g_assert_cmpmem(buffer, exp_resp_size, exp_resp, exp_resp_size); g_assert_cmpmem(buffer, exp_resp_size, exp_resp, exp_resp_size);
} }
static gboolean tpm_util_swtpm_has_tpm2(void) static bool tpm_util_swtpm_has_tpm2(void)
{ {
gint mystdout; bool has_tpm2 = false;
gboolean succ; char *out = NULL;
unsigned i; static const char *argv[] = {
char buffer[10240]; "swtpm", "socket", "--help", NULL
ssize_t n;
gchar *swtpm_argv[] = {
g_strdup("swtpm"), g_strdup("socket"), g_strdup("--help"), NULL
}; };
succ = g_spawn_async_with_pipes(NULL, swtpm_argv, NULL, if (!g_spawn_sync(NULL /* working_dir */,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, (char **)argv,
NULL, &mystdout, NULL, NULL); NULL /* envp */,
if (!succ) { G_SPAWN_SEARCH_PATH,
goto cleanup; NULL /* child_setup */,
NULL /* user_data */,
&out,
NULL /* err */,
NULL /* exit_status */,
NULL)) {
return false;
} }
n = read(mystdout, buffer, sizeof(buffer) - 1); if (strstr(out, "--tpm2")) {
if (n < 0) { has_tpm2 = true;
goto cleanup;
}
buffer[n] = 0;
if (!strstr(buffer, "--tpm2")) {
succ = false;
}
cleanup:
for (i = 0; swtpm_argv[i]; i++) {
g_free(swtpm_argv[i]);
} }
return succ; g_free(out);
return has_tpm2;
} }
gboolean tpm_util_swtpm_start(const char *path, GPid *pid, gboolean tpm_util_swtpm_start(const char *path, GPid *pid,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册