|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 4/4] xen/public: Use -Wpadding for public headers
On Mon, 15 Apr 2024, Andrew Cooper wrote:
> RFC. In theory this is a great way to avoid some of the spiketraps involved
> with C being the official representation.
>
> However, this doesn't build. gnttab_transfer has a layout that requires a
> CONFIG_COMPAT if we want to satisfy -Wpadding for both forms of the structure.
>
> Thoughts on whether this cross-check is worthwhile-enough to warrant the
> ifdefary?
I like this patch and I think we have no choice but going in this
direction and adding all the padding explicitly with any related
necessary ifdefary.
The only question for me is whether to:
1) add -Wpadding
2) add __packed__
3) do both
I think it is important to add __packed__ to the headers to clear out
any misconceptions about possible hidden paddings and get a
correct-by-default behavior for anyone that would import the headers
into their own projects.
The only issue is that __packed__ makes -Wpadding not useful. We could
technically add both if we disable __packed__ for the -Wpadding build.
For instance we could use __packed which is defined by Xen, and change
the definition of __packed to nothing for the -Wpadding build.
That way we get both the nice -Wpadding checks and also the nice
obvious-by-default __packed__.
> ~Andrew
> ---
> CC: George Dunlap <George.Dunlap@xxxxxxxxxx>
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> CC: Julien Grall <julien@xxxxxxx>
> ---
> xen/common/Makefile | 1 +
> xen/common/hdr-chk.c | 13 +++++++++++++
> xen/include/public/grant_table.h | 7 +++++++
> 3 files changed, 21 insertions(+)
> create mode 100644 xen/common/hdr-chk.c
>
> diff --git a/xen/common/Makefile b/xen/common/Makefile
> index d512cad5243f..dbbda70829f1 100644
> --- a/xen/common/Makefile
> +++ b/xen/common/Makefile
> @@ -15,6 +15,7 @@ obj-y += event_fifo.o
> obj-$(CONFIG_GRANT_TABLE) += grant_table.o
> obj-y += guestcopy.o
> obj-y += gzip/
> +obj-y += hdr-chk.o
> obj-$(CONFIG_HYPFS) += hypfs.o
> obj-$(CONFIG_IOREQ_SERVER) += ioreq.o
> obj-y += irq.o
> diff --git a/xen/common/hdr-chk.c b/xen/common/hdr-chk.c
> new file mode 100644
> index 000000000000..1c7a509dcd06
> --- /dev/null
> +++ b/xen/common/hdr-chk.c
> @@ -0,0 +1,13 @@
> +#include <xen/stdint.h>
> +
> +#include <public/xen.h>
> +
> +#pragma GCC diagnostic error "-Wpadded"
> +
> +#include <public/grant_table.h>
> +
> +#ifdef CONFIG_COMPAT
> +
> +#include <compat/grant_table.h>
> +
> +#endif /* CONFIG_COMPAT */
> diff --git a/xen/include/public/grant_table.h
> b/xen/include/public/grant_table.h
> index 1dfa17a6d02a..a66c77d0166c 100644
> --- a/xen/include/public/grant_table.h
> +++ b/xen/include/public/grant_table.h
> @@ -355,6 +355,7 @@ struct gnttab_unmap_grant_ref {
> grant_handle_t handle;
> /* OUT parameters. */
> int16_t status; /* => enum grant_status */
> + uint16_t _pad0;
> };
> typedef struct gnttab_unmap_grant_ref gnttab_unmap_grant_ref_t;
> DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
> @@ -371,6 +372,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t);
> struct gnttab_setup_table {
> /* IN parameters. */
> domid_t dom;
> + uint16_t _pad0;
> uint32_t nr_frames;
> /* OUT parameters. */
> int16_t status; /* => enum grant_status */
> @@ -409,9 +411,12 @@ struct gnttab_transfer {
> /* IN parameters. */
> xen_pfn_t mfn;
> domid_t domid;
> + uint16_t _pad0;
> grant_ref_t ref;
> /* OUT parameters. */
> int16_t status;
> + uint16_t _pad1;
> + /* XXX compat-dependent padding. */
> };
> typedef struct gnttab_transfer gnttab_transfer_t;
> DEFINE_XEN_GUEST_HANDLE(gnttab_transfer_t);
> @@ -468,10 +473,12 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_copy_t);
> struct gnttab_query_size {
> /* IN parameters. */
> domid_t dom;
> + uint16_t _ign1;
> /* OUT parameters. */
> uint32_t nr_frames;
> uint32_t max_nr_frames;
> int16_t status; /* => enum grant_status */
> + uint16_t _ign2;
> };
> typedef struct gnttab_query_size gnttab_query_size_t;
> DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t);
> --
> 2.30.2
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |