[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 02/22] include/xen/slr-table.h: Secure Launch Resource Table definitions
On Wed, May 21, 2025 at 05:45:04PM +0200, Jan Beulich wrote: > > +/* SPDX-License-Identifier: GPL-2.0 */ > > GPL-2.0-only is, I think, the one to use for new code. Right. > > +/* > > + * Copyright (c) 2025 Apertus Solutions, LLC > > + * Copyright (c) 2025 Oracle and/or its affiliates. > > + * Copyright (c) 2025 3mdeb Sp. z o.o > > I'm curious: Considering the (just) 2 S-o-b, where's the 3rd copyright > line coming from? I'll add "Daniel P. Smith" (already in CC), not sure why his S-o-B wasn't there. > > +#include <xen/types.h> > > Looks like xen/stdint.h would suffice? It would for types, but there is also use of `NULL`. > > +#define UEFI_SLR_TABLE_GUID \ > > + { 0x877a9b2aU, 0x0385, 0x45d1, { 0xa0, 0x34, 0x9d, 0xac, 0x9c, 0x9e, > > 0x56, 0x5f } } > > I'm not sure this is a good place to put UEFI GUIDs. Considering e.g ... It's here because the GUID is related more to SLRT than to EFI. I can move it if there is a more fitting place for table GUIDs. > > +/* SLR table header values */ > > +#define SLR_TABLE_MAGIC 0x4452544d > > +#define SLR_TABLE_REVISION 1 > > + > > +/* Current revisions for the policy and UEFI config */ > > +#define SLR_POLICY_REVISION 1 > > +#define SLR_UEFI_CONFIG_REVISION 1 > > ... this, is the whole concept perhaps bound to UEFI? In which casethe > whole header may want to move to the efi/ subdir? This isn't EFI-specific, legacy boot is supported. Some types of entries are there to provide EFI-specific information. > > +/* SLR defined architectures */ > > +#define SLR_INTEL_TXT 1 > > +#define SLR_AMD_SKINIT 2 > > These are both x86, yet the header is put in the common include dir? It's x86-specific with the goal to add more architectures in the future. I don't know, maybe the header should start as arch-specific and be moved later, your call. > > +/* > > + * Primary SLR Table Header > > + */ > > +struct slr_table > > +{ > > + uint32_t magic; > > + uint16_t revision; > > + uint16_t architecture; > > + uint32_t size; > > + uint32_t max_size; > > + /* entries[] */ > > +} __packed; > > If x86-specific, the question on the need for some of the __packed arises > again. The table is used to communicate data from pre-DRTM world to DRTM-world and is produced and consumed by unrelated software components that don't necessarily pad structures the same way by default. > > +/* > > + * Prototype of a function pointed to by slr_entry_dl_info::dl_handler. > > + */ > > +typedef void (*dl_handler_func)(struct slr_bl_context *bl_context); > > It being an internal header, ... > > + uint64_t dl_handler; > > ... why can't this type be used here then? This would presumably avoid a > typecast later. It's not an internal header in my understanding of the phrase, Xen parses what a bootloader has passed to it. In principle, pointers could be 32-bit here. > > +static inline void * > > +slr_end_of_entries(struct slr_table *table) > > +{ > > + return (uint8_t *)table + table->size; > > Considering the function's return type, why not cast to void * (or perhaps > const void *, if the return type also can be such)? No particular reason other than that pointer arithmetic on pointers-to-void typically causes build issues. Can be changed for Xen. > > +static inline struct slr_entry_hdr * > > +slr_next_entry(struct slr_table *table, struct slr_entry_hdr *curr) > > +{ > > + struct slr_entry_hdr *next = (struct slr_entry_hdr *) > > + ((uint8_t *)curr + curr->size); > > + > > + if ( (void *)next >= slr_end_of_entries(table) ) > > + return NULL; > > Is this sufficient as a check? With it fulfilled, ... > > > + if ( next->tag == SLR_ENTRY_END ) > > ... this member access may still be out of bounds. IOW the question is what > level of checking is really adequate here. SLR_ENTRY_END should really end the table, but it won't hurt to check for out of bounds. Thanks, will correct the checks. > > +static inline struct slr_entry_hdr * > > +slr_next_entry_by_tag (struct slr_table *table, > > + struct slr_entry_hdr *entry, > > + uint16_t tag) > > +{ > > + if ( !entry ) /* Start from the beginning */ > > + entry = (struct slr_entry_hdr *)((uint8_t *)table + > > sizeof(*table)); > > Extending from the earlier comment - if the inner cast was to void * here, > the outer one could be dropped altogether. > > Jan Will update. Regards
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |