qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [REPOST] [PATCH] tpm: adapt sysfs cancel path for new TPM d


From: Stefan Berger
Subject: [Qemu-devel] [REPOST] [PATCH] tpm: adapt sysfs cancel path for new TPM driver
Date: Wed, 18 Nov 2015 17:12:40 -0500

This patch addresses BZ 1281413.

Adapt the sysfs TPM command cancel path for the TPM driver that
does not use a miscdevice anymore since Linux 4.0. Support old
and new paths.

Signed-off-by: Stefan Berger <address@hidden>
---
 hw/tpm/tpm_passthrough.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
index 8d8523a..424d7e3 100644
--- a/hw/tpm/tpm_passthrough.c
+++ b/hw/tpm/tpm_passthrough.c
@@ -353,6 +353,8 @@ static int tpm_passthrough_open_sysfs_cancel(TPMBackend *tb)
     int fd = -1;
     char *dev;
     char path[PATH_MAX];
+    const char *prefix[] = {"misc/", "tpm/"};
+    int i;
 
     if (tb->cancel_path) {
         fd = qemu_open(tb->cancel_path, O_WRONLY);
@@ -366,16 +368,21 @@ static int tpm_passthrough_open_sysfs_cancel(TPMBackend 
*tb)
     dev = strrchr(tpm_pt->tpm_dev, '/');
     if (dev) {
         dev++;
-        if (snprintf(path, sizeof(path), "/sys/class/misc/%s/device/cancel",
-                     dev) < sizeof(path)) {
-            fd = qemu_open(path, O_WRONLY);
-            if (fd >= 0) {
-                tb->cancel_path = g_strdup(path);
-            } else {
-                error_report("tpm_passthrough: Could not open TPM cancel "
-                             "path %s : %s", path, strerror(errno));
+        for (i = 0; i < ARRAY_SIZE(prefix); i++) {
+            if (snprintf(path, sizeof(path),
+                         "/sys/class/%s%s/device/cancel",
+                         prefix[i], dev) < sizeof(path)) {
+                fd = qemu_open(path, O_WRONLY);
+                if (fd >= 0) {
+                    tb->cancel_path = g_strdup(path);
+                    break;
+                }
             }
         }
+        if (fd < 0) {
+            error_report("tpm_passthrough: Could not open TPM cancel "
+                         "path %s : %s", path, strerror(errno));
+        }
     } else {
        error_report("tpm_passthrough: Bad TPM device path %s",
                     tpm_pt->tpm_dev);
-- 
2.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]