On 23.05.2025 21:51, Sergii Dmytruk wrote:
> On Wed, May 21, 2025 at 05:19:57PM +0200, Jan Beulich wrote:
>>> +/*
>>> + * Secure Launch defined OS/MLE TXT Heap table
>>> + */
>>> +struct txt_os_mle_data {
>>> +    uint32_t version;
>>> +    uint32_t reserved;
>>> +    uint64_t slrt;
>>> +    uint64_t txt_info;
>>> +    uint32_t ap_wake_block;
>>> +    uint32_t ap_wake_block_size;
>>> +    uint8_t mle_scratch[64];
>>> +} __packed;
>>
>> This being x86-specific, what's the __packed intended to achieve here?
> 
> This structure is passed to Xen by a bootloader, __packed makes sure the
> structure has a compatible layout.

And it won't have a compatible layout without the attribute?

>>> +/*
>>> + * TXT specification defined BIOS data TXT Heap table
>>> + */
>>> +struct txt_bios_data {
>>> +    uint32_t version; /* Currently 5 for TPM 1.2 and 6 for TPM 2.0 */
>>> +    uint32_t bios_sinit_size;
>>> +    uint64_t reserved1;
>>> +    uint64_t reserved2;
>>> +    uint32_t num_logical_procs;
>>> +    /* Versions >= 3 && < 5 */
>>> +    uint32_t sinit_flags;
>>> +    /* Versions >= 5 with updates in version 6 */
>>> +    uint32_t mle_flags;
>>> +    /* Versions >= 4 */
>>> +    /* Ext Data Elements */
>>> +} __packed;
>>
>> It does affect sizeof() here, which I'm unsure is going to matter.
> 
> It doesn't hurt anything and makes sure offsets match those in the
> specification.

It similarly doesn't appear to hurt anything if the attribute was omitted.
Imo we ought to use compiler extensions on when there is a need to do so.

>>> +static inline uint64_t txt_bios_data_size(void *heap)
>>
>> Here, below, and in general: Please try to have code be const-correct, i.e.
>> use pointers-to-const wherever applicable.
> 
> I assume this doesn't apply to functions returning `void *`.  The
> approach used in libc is to accept pointers-to-const but then cast the
> constness away for the return value, but this header isn't a widely-used
> code.

Which is, from all I know, bad practice not only by my own view.

Jan

Reply via email to