All of lore.kernel.org
 help / color / mirror / Atom feed
* ibmvtpm byteswapping inconsistency
@ 2017-01-26 20:22 Michal Suchánek
  2017-01-26 22:05   ` Jason Gunthorpe
                   ` (2 more replies)
  0 siblings, 3 replies; 40+ messages in thread
From: Michal Suchánek @ 2017-01-26 20:22 UTC (permalink / raw)
  To: Ashley Lai, Benjamin Herrenschmidt, Paul Mackerras,
	Michael Ellerman, Peter Huewe, Marcel Selhorst, Jarkko Sakkinen,
	Jason Gunthorpe, tpmdd-devel, linuxppc-dev, linux-kernel

Hello,

building ibmvtpm I noticed gcc warning complaining that second word of
struct ibmvtpm_crq in tpm_ibmvtpm_suspend is uninitialized.

The structure is defined as 

struct ibmvtpm_crq {
        u8 valid;
        u8 msg;
        __be16 len;
        __be32 data;
        __be64 reserved;
} __attribute__((packed, aligned(8)));

initialized as

        struct ibmvtpm_crq crq;
        u64 *buf = (u64 *) &crq;
...
        crq.valid = (u8)IBMVTPM_VALID_CMD;
        crq.msg = (u8)VTPM_PREPARE_TO_SUSPEND;

and submitted with

        rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]),
                              cpu_to_be64(buf[1]));

which means that the second word indeed contains purely garbage.

This is repeated a few times in the driver so I added memset to quiet
gcc and make behavior deterministic in case the unused fields get some
meaning in the future.

However, in tpm_ibmvtpm_send the structure is initialized as

	struct ibmvtpm_crq crq;
        __be64 *word = (__be64 *)&crq;
...
        crq.valid = (u8)IBMVTPM_VALID_CMD;
        crq.msg = (u8)VTPM_TPM_COMMAND;
        crq.len = cpu_to_be16(count);
        crq.data = cpu_to_be32(ibmvtpm->rtce_dma_handle);

and submitted with

	rc = ibmvtpm_send_crq(ibmvtpm->vdev, be64_to_cpu(word[0]),
                              be64_to_cpu(word[1]));
meaning it is swapped twice.


Where is the interface defined? Are the command arguments passed as BE
subfields (the second case was correct before adding the extra whole
word swap) or BE words (the first case doing whole word swap is
correct)?

Thanks

Michal

^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2017-02-02 15:17 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-26 20:22 ibmvtpm byteswapping inconsistency Michal Suchánek
2017-01-26 22:05 ` Jason Gunthorpe
2017-01-26 22:05   ` Jason Gunthorpe
2017-01-26 22:43   ` Michal Suchanek
2017-01-26 22:58   ` Ashley Lai
2017-02-02  4:24     ` Vicky
2017-02-02  4:24       ` Vicky
2017-02-02  4:40     ` Vicky
2017-02-02  4:40       ` Vicky
2017-02-02  4:40       ` Vicky
2017-02-02 10:55       ` Michael Ellerman
2017-02-02 10:55         ` Michael Ellerman
2017-02-02 10:55         ` Michael Ellerman
2017-02-02 11:29       ` Michal Suchánek
2017-02-02 11:29         ` Michal Suchánek
2017-02-02 15:17         ` David Laight
2017-02-02 15:17           ` David Laight
2017-02-02 15:17           ` David Laight
2017-01-27  1:42 ` Tyrel Datwyler
2017-01-27  1:50   ` Benjamin Herrenschmidt
2017-01-27  9:03     ` Michal Suchanek
2017-01-27  9:03       ` Michal Suchanek
2017-01-27  9:03       ` Michal Suchanek
2017-01-27 21:19       ` Tyrel Datwyler
2017-01-30  4:32         ` Michael Ellerman
2017-01-30  4:32           ` Michael Ellerman
2017-01-30 20:34           ` Tyrel Datwyler
2017-01-31  8:38             ` Michael Ellerman
2017-01-31  8:38               ` Michael Ellerman
2017-01-27 18:02     ` Tyrel Datwyler
2017-01-27 19:58       ` Benjamin Herrenschmidt
2017-01-27 19:58         ` Benjamin Herrenschmidt
2017-01-27 20:32         ` Tyrel Datwyler
2017-01-28  0:35           ` msuchanek
2017-01-28  4:28           ` Benjamin Herrenschmidt
2017-01-28  4:28             ` Benjamin Herrenschmidt
2017-01-30 14:42       ` David Laight
2017-01-30 14:42         ` David Laight
2017-01-27 11:18 ` David Laight
2017-01-27 11:18   ` David Laight

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.