On 09/27/2012 10:28 AM, Corey Bryant wrote:


On 06/04/2012 03:37 PM, Stefan Berger wrote:
+
+/* borrowed from qemu-char.c */
+static int tpm_passthrough_unix_write(int fd, const uint8_t *buf, uint32_t len)
+{
+    return send_all(fd, buf, len);
+}
+
+static int tpm_passthrough_unix_read(int fd, uint8_t *buf, uint32_t len)

It would probably be useful to other parts of QEMU if you defined this function as recv_all() and put it in qemu-char.c (to correspond with send_all()).


Ok. I'd keep this patch to qemu-char.c inside of this patch, though, unless someone opposes.

+
+static int tpm_passthrough_startup_tpm(TPMBackend *tb)
+{
+    TPMPassthruState *tpm_pt = tb->s.tpm_pt;
+    int rc;
+
+    rc = tpm_passthrough_do_startup_tpm(tb);
+    if (rc) {
+        tpm_pt->had_startup_error = true;

tpm_passthrough_do_startup_tpm() always returns zero, so had_startup_error will never be set to true.


I am consolidating the code into tpm_passthrough_startup_tpm() but let that return an int considering that other backend drivers may return an error code.

+static void tpm_passthrough_reset(TPMBackend *tb)
+{
+    TPMPassthruState *tpm_pt = tb->s.tpm_pt;
+
+    dprintf("tpm_passthrough: CALL TO TPM_RESET!\n");
+
+    tpm_backend_thread_end(&tpm_pt->tbt);

Should the thread be restarted here?


No. If the backend needs to be restarted, the frontend will invoke the startup_tpm function.


+static bool tpm_passthrough_get_tpm_established_flag(TPMBackend *tb)
+{
+    return false;

Can a T/OS never be established with the passthrough backend?


Following the specs, this bit is set when locality 5 is used and a hash operation is started. See part 2 of the TPM specs. The establishment bit could be read from the hardware TPM's permanent flags. The question is what it means to show this bit inside the VM. I wasn't sure, so I hardcoded it to always return false.

    Stefan




Reply via email to