Thread (22 messages) 22 messages, 9 authors, 2017-02-02

RE: ibmvtpm byteswapping inconsistency

From: David Laight <hidden>
Date: 2017-01-30 14:42:46
Also in: linuxppc-dev

From: Tyrel Datwyler
Sent: 27 January 2017 18:03
On 01/26/2017 05:50 PM, Benjamin Herrenschmidt wrote:
quoted
On Thu, 2017-01-26 at 17:42 -0800, Tyrel Datwyler wrote:
quoted
On 01/26/2017 12:22 PM, Michal Suchnek wrote:
quoted
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]));
Isn't the real fubar here the use of that memory layout structure at all?
It would probably all be better if the call looked like:
	rc = ibmvtpm_send_crq(ibmvtpm->vdev, MAKE_REQ(IBMVTPM_VALID_CMD,
		VTPM_PREPARE_TO_SUSPEND, xxx_len, xxx_data), 0);
and MAKE_REQ() did all the required endian independant shifts to generate
the correct 32bit value.

	David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help