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@xxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers