[Devel] Re: [PATCH] Add two macros for build-time testing of time compatibility (v2)
Oren Laadan
orenl at cs.columbia.edu
Wed Sep 15 20:54:43 PDT 2010
Queueed for ckpt-v22-dev, thanks.
Now we need to use these everywhere :)
Oren.
On 08/06/2010 10:57 AM, Dan Smith wrote:
> We often canonicalize data from internal kernel data structures that use
> ambiguous types (int, short, long, etc) and write them to the checkpoint
> stream with unambiguous types (__u16, __u32, __u64, etc). If an internal
> structure changes a type somewhere down the road, we may not notice and
> write invalid data to the checkpoint stream as a result.
>
> This patch introduces two helper macros to make it easier to generate
> a BUILD_BUG when this happens. Examples of usage are included in the
> comment before the macros in the code.
>
> Changes in v2:
> - Fix the example to match the code
>
> Signed-off-by: Dan Smith <danms at us.ibm.com>
> ---
> include/linux/checkpoint_hdr.h | 15 +++++++++++++++
> 1 files changed, 15 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index f4f9577..e455b99 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -42,6 +42,21 @@
> #define CHECKPOINT_LSM_NAME_MAX 10
>
> /*
> + * Macros to help generate a build break if an ambiguous type changes
> + * in such a way that the size differs from the unambiguous type we
> + * actually write to the checkpoint stream.
> + *
> + * Examples:
> + *
> + * CKPT_BUILD_BUG_ON_MISMATCH(short, __u16);
> + * CKPT_BUILD_BUG_ON_MISMATCH(CKPT_STRUCT_MEMBER(mystruct, mymember),
> + * CKPT_STRUCT_MEMBER(ckpt_hdr_foo, bar));
> + *
> + */
> +#define CKPT_STRUCT_MEMBER(type, member) (((struct type *)(NULL))->member)
> +#define CKPT_BUILD_BUG_ON_MISMATCH(a, b) (BUILD_BUG_ON(sizeof(a) != sizeof(b)))
> +
> +/*
> * To maintain compatibility between 32-bit and 64-bit architecture flavors,
> * keep data 64-bit aligned: use padding for structure members, and use
> * __attribute__((aligned (8))) for the entire structure.
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list