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