[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.


More information about the Containers mailing list