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