diff mbox series

[1/2] tpm_emulator: Use latest tpm_ioctl.h from swtpm project

Message ID 20220826154602.362516-2-stefanb@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series tpm_emulator: Signal swtpm to re-lock storage | expand

Commit Message

Stefan Berger Aug. 26, 2022, 3:46 p.m. UTC
Use the latest tpm_ioctl.h from upstream swtpm project.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
---
 backends/tpm/tpm_ioctl.h | 96 +++++++++++++++++++++++++++++++---------
 1 file changed, 76 insertions(+), 20 deletions(-)

Comments

Marc-André Lureau Aug. 31, 2022, 11:36 a.m. UTC | #1
On Fri, Aug 26, 2022 at 7:52 PM Stefan Berger <stefanb@linux.ibm.com> wrote:

> Use the latest tpm_ioctl.h from upstream swtpm project.
>
> Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  backends/tpm/tpm_ioctl.h | 96 +++++++++++++++++++++++++++++++---------
>  1 file changed, 76 insertions(+), 20 deletions(-)
>
> diff --git a/backends/tpm/tpm_ioctl.h b/backends/tpm/tpm_ioctl.h
> index bd6c12cb86..20b1c7965a 100644
> --- a/backends/tpm/tpm_ioctl.h
> +++ b/backends/tpm/tpm_ioctl.h
> @@ -5,11 +5,16 @@
>   *
>   * This file is licensed under the terms of the 3-clause BSD license
>   */
> +#ifndef _TPM_IOCTL_H_
> +#define _TPM_IOCTL_H_
>
> -#ifndef TPM_IOCTL_H
> -#define TPM_IOCTL_H
> +#if defined(__CYGWIN__)
> +# define __USE_LINUX_IOCTL_DEFS
> +#endif
>
> +#include <stdint.h>
>  #include <sys/uio.h>
> +#include <sys/types.h>
>  #include <sys/ioctl.h>
>
>  #ifdef HAVE_SYS_IOCCOM_H
> @@ -194,6 +199,48 @@ struct ptm_setbuffersize {
>      } u;
>  };
>
> +#define PTM_GETINFO_SIZE (3 * 1024)
> +/*
> + * PTM_GET_INFO: Get info about the TPM implementation (from libtpms)
> + *
> + * This request allows to indirectly call TPMLIB_GetInfo(flags) and
> + * retrieve information from libtpms.
> + * Only one transaction is currently necessary for returning results
> + * to a client. Therefore, totlength and length will be the same if
> + * offset is 0.
> + */
> +struct ptm_getinfo {
> +    union {
> +        struct {
> +            uint64_t flags;
> +            uint32_t offset;      /* offset from where to read */
> +            uint32_t pad;         /* 32 bit arch */
> +        } req; /* request */
> +        struct {
> +            ptm_res tpm_result;
> +            uint32_t totlength;
> +            uint32_t length;
> +            char buffer[PTM_GETINFO_SIZE];
> +        } resp; /* response */
> +    } u;
> +};
> +
> +#define SWTPM_INFO_TPMSPECIFICATION ((uint64_t)1 << 0)
> +#define SWTPM_INFO_TPMATTRIBUTES    ((uint64_t)1 << 1)
> +
> +/*
> + * PTM_LOCK_STORAGE: Lock the storage and retry n times
> + */
> +struct ptm_lockstorage {
> +    union {
> +        struct {
> +            uint32_t retries; /* number of retries */
> +        } req; /* request */
> +        struct {
> +            ptm_res tpm_result;
> +        } resp; /* reponse */
> +    } u;
> +};
>
>  typedef uint64_t ptm_cap;
>  typedef struct ptm_est ptm_est;
> @@ -205,6 +252,8 @@ typedef struct ptm_getstate ptm_getstate;
>  typedef struct ptm_setstate ptm_setstate;
>  typedef struct ptm_getconfig ptm_getconfig;
>  typedef struct ptm_setbuffersize ptm_setbuffersize;
> +typedef struct ptm_getinfo ptm_getinfo;
> +typedef struct ptm_lockstorage ptm_lockstorage;
>
>  /* capability flags returned by PTM_GET_CAPABILITY */
>  #define PTM_CAP_INIT               (1)
> @@ -221,6 +270,9 @@ typedef struct ptm_setbuffersize ptm_setbuffersize;
>  #define PTM_CAP_GET_CONFIG         (1 << 11)
>  #define PTM_CAP_SET_DATAFD         (1 << 12)
>  #define PTM_CAP_SET_BUFFERSIZE     (1 << 13)
> +#define PTM_CAP_GET_INFO           (1 << 14)
> +#define PTM_CAP_SEND_COMMAND_HEADER (1 << 15)
> +#define PTM_CAP_LOCK_STORAGE       (1 << 16)
>
>  enum {
>      PTM_GET_CAPABILITY     = _IOR('P', 0, ptm_cap),
> @@ -240,6 +292,8 @@ enum {
>      PTM_GET_CONFIG         = _IOR('P', 14, ptm_getconfig),
>      PTM_SET_DATAFD         = _IOR('P', 15, ptm_res),
>      PTM_SET_BUFFERSIZE     = _IOWR('P', 16, ptm_setbuffersize),
> +    PTM_GET_INFO           = _IOWR('P', 17, ptm_getinfo),
> +    PTM_LOCK_STORAGE       = _IOWR('P', 18, ptm_lockstorage),
>  };
>
>  /*
> @@ -253,23 +307,25 @@ enum {
>   * and ptm_set_state:u.req.data) are 0xffffffff.
>   */
>  enum {
> -    CMD_GET_CAPABILITY = 1,
> -    CMD_INIT,
> -    CMD_SHUTDOWN,
> -    CMD_GET_TPMESTABLISHED,
> -    CMD_SET_LOCALITY,
> -    CMD_HASH_START,
> -    CMD_HASH_DATA,
> -    CMD_HASH_END,
> -    CMD_CANCEL_TPM_CMD,
> -    CMD_STORE_VOLATILE,
> -    CMD_RESET_TPMESTABLISHED,
> -    CMD_GET_STATEBLOB,
> -    CMD_SET_STATEBLOB,
> -    CMD_STOP,
> -    CMD_GET_CONFIG,
> -    CMD_SET_DATAFD,
> -    CMD_SET_BUFFERSIZE,
> +    CMD_GET_CAPABILITY = 1,   /* 0x01 */
> +    CMD_INIT,                 /* 0x02 */
> +    CMD_SHUTDOWN,             /* 0x03 */
> +    CMD_GET_TPMESTABLISHED,   /* 0x04 */
> +    CMD_SET_LOCALITY,         /* 0x05 */
> +    CMD_HASH_START,           /* 0x06 */
> +    CMD_HASH_DATA,            /* 0x07 */
> +    CMD_HASH_END,             /* 0x08 */
> +    CMD_CANCEL_TPM_CMD,       /* 0x09 */
> +    CMD_STORE_VOLATILE,       /* 0x0a */
> +    CMD_RESET_TPMESTABLISHED, /* 0x0b */
> +    CMD_GET_STATEBLOB,        /* 0x0c */
> +    CMD_SET_STATEBLOB,        /* 0x0d */
> +    CMD_STOP,                 /* 0x0e */
> +    CMD_GET_CONFIG,           /* 0x0f */
> +    CMD_SET_DATAFD,           /* 0x10 */
> +    CMD_SET_BUFFERSIZE,       /* 0x11 */
> +    CMD_GET_INFO,             /* 0x12 */
> +    CMD_LOCK_STORAGE,         /* 0x13 */
>  };
>
> -#endif /* TPM_IOCTL_H */
> +#endif /* _TPM_IOCTL_H_ */
> --
> 2.37.2
>
>
>
Stefan Berger Sept. 1, 2022, 4:08 p.m. UTC | #2
On 8/31/22 07:36, Marc-André Lureau wrote:

> 
> On Fri, Aug 26, 2022 at 7:52 PM Stefan Berger <stefanb@linux.ibm.com 
> <mailto:stefanb@linux.ibm.com>> wrote:
> 
>     Use the latest tpm_ioctl.h from upstream swtpm project.
> 
>     Signed-off-by: Stefan Berger <stefanb@linux.ibm.com
>     <mailto:stefanb@linux.ibm.com>>
> 
> 
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com 
> <mailto:marcandre.lureau@redhat.com>>


Thanks. I had to rebase and modify it a bit now that the PR with the 
_WIN32 changes is merged and will post a v2 soon. Any comments on 2/2?

    Stefan
diff mbox series

Patch

diff --git a/backends/tpm/tpm_ioctl.h b/backends/tpm/tpm_ioctl.h
index bd6c12cb86..20b1c7965a 100644
--- a/backends/tpm/tpm_ioctl.h
+++ b/backends/tpm/tpm_ioctl.h
@@ -5,11 +5,16 @@ 
  *
  * This file is licensed under the terms of the 3-clause BSD license
  */
+#ifndef _TPM_IOCTL_H_
+#define _TPM_IOCTL_H_
 
-#ifndef TPM_IOCTL_H
-#define TPM_IOCTL_H
+#if defined(__CYGWIN__)
+# define __USE_LINUX_IOCTL_DEFS
+#endif
 
+#include <stdint.h>
 #include <sys/uio.h>
+#include <sys/types.h>
 #include <sys/ioctl.h>
 
 #ifdef HAVE_SYS_IOCCOM_H
@@ -194,6 +199,48 @@  struct ptm_setbuffersize {
     } u;
 };
 
+#define PTM_GETINFO_SIZE (3 * 1024)
+/*
+ * PTM_GET_INFO: Get info about the TPM implementation (from libtpms)
+ *
+ * This request allows to indirectly call TPMLIB_GetInfo(flags) and
+ * retrieve information from libtpms.
+ * Only one transaction is currently necessary for returning results
+ * to a client. Therefore, totlength and length will be the same if
+ * offset is 0.
+ */
+struct ptm_getinfo {
+    union {
+        struct {
+            uint64_t flags;
+            uint32_t offset;      /* offset from where to read */
+            uint32_t pad;         /* 32 bit arch */
+        } req; /* request */
+        struct {
+            ptm_res tpm_result;
+            uint32_t totlength;
+            uint32_t length;
+            char buffer[PTM_GETINFO_SIZE];
+        } resp; /* response */
+    } u;
+};
+
+#define SWTPM_INFO_TPMSPECIFICATION ((uint64_t)1 << 0)
+#define SWTPM_INFO_TPMATTRIBUTES    ((uint64_t)1 << 1)
+
+/*
+ * PTM_LOCK_STORAGE: Lock the storage and retry n times
+ */
+struct ptm_lockstorage {
+    union {
+        struct {
+            uint32_t retries; /* number of retries */
+        } req; /* request */
+        struct {
+            ptm_res tpm_result;
+        } resp; /* reponse */
+    } u;
+};
 
 typedef uint64_t ptm_cap;
 typedef struct ptm_est ptm_est;
@@ -205,6 +252,8 @@  typedef struct ptm_getstate ptm_getstate;
 typedef struct ptm_setstate ptm_setstate;
 typedef struct ptm_getconfig ptm_getconfig;
 typedef struct ptm_setbuffersize ptm_setbuffersize;
+typedef struct ptm_getinfo ptm_getinfo;
+typedef struct ptm_lockstorage ptm_lockstorage;
 
 /* capability flags returned by PTM_GET_CAPABILITY */
 #define PTM_CAP_INIT               (1)
@@ -221,6 +270,9 @@  typedef struct ptm_setbuffersize ptm_setbuffersize;
 #define PTM_CAP_GET_CONFIG         (1 << 11)
 #define PTM_CAP_SET_DATAFD         (1 << 12)
 #define PTM_CAP_SET_BUFFERSIZE     (1 << 13)
+#define PTM_CAP_GET_INFO           (1 << 14)
+#define PTM_CAP_SEND_COMMAND_HEADER (1 << 15)
+#define PTM_CAP_LOCK_STORAGE       (1 << 16)
 
 enum {
     PTM_GET_CAPABILITY     = _IOR('P', 0, ptm_cap),
@@ -240,6 +292,8 @@  enum {
     PTM_GET_CONFIG         = _IOR('P', 14, ptm_getconfig),
     PTM_SET_DATAFD         = _IOR('P', 15, ptm_res),
     PTM_SET_BUFFERSIZE     = _IOWR('P', 16, ptm_setbuffersize),
+    PTM_GET_INFO           = _IOWR('P', 17, ptm_getinfo),
+    PTM_LOCK_STORAGE       = _IOWR('P', 18, ptm_lockstorage),
 };
 
 /*
@@ -253,23 +307,25 @@  enum {
  * and ptm_set_state:u.req.data) are 0xffffffff.
  */
 enum {
-    CMD_GET_CAPABILITY = 1,
-    CMD_INIT,
-    CMD_SHUTDOWN,
-    CMD_GET_TPMESTABLISHED,
-    CMD_SET_LOCALITY,
-    CMD_HASH_START,
-    CMD_HASH_DATA,
-    CMD_HASH_END,
-    CMD_CANCEL_TPM_CMD,
-    CMD_STORE_VOLATILE,
-    CMD_RESET_TPMESTABLISHED,
-    CMD_GET_STATEBLOB,
-    CMD_SET_STATEBLOB,
-    CMD_STOP,
-    CMD_GET_CONFIG,
-    CMD_SET_DATAFD,
-    CMD_SET_BUFFERSIZE,
+    CMD_GET_CAPABILITY = 1,   /* 0x01 */
+    CMD_INIT,                 /* 0x02 */
+    CMD_SHUTDOWN,             /* 0x03 */
+    CMD_GET_TPMESTABLISHED,   /* 0x04 */
+    CMD_SET_LOCALITY,         /* 0x05 */
+    CMD_HASH_START,           /* 0x06 */
+    CMD_HASH_DATA,            /* 0x07 */
+    CMD_HASH_END,             /* 0x08 */
+    CMD_CANCEL_TPM_CMD,       /* 0x09 */
+    CMD_STORE_VOLATILE,       /* 0x0a */
+    CMD_RESET_TPMESTABLISHED, /* 0x0b */
+    CMD_GET_STATEBLOB,        /* 0x0c */
+    CMD_SET_STATEBLOB,        /* 0x0d */
+    CMD_STOP,                 /* 0x0e */
+    CMD_GET_CONFIG,           /* 0x0f */
+    CMD_SET_DATAFD,           /* 0x10 */
+    CMD_SET_BUFFERSIZE,       /* 0x11 */
+    CMD_GET_INFO,             /* 0x12 */
+    CMD_LOCK_STORAGE,         /* 0x13 */
 };
 
-#endif /* TPM_IOCTL_H */
+#endif /* _TPM_IOCTL_H_ */