[Devel] [PATCH] Add two macros for build-time testing of time compatibility

Dan Smith danms at us.ibm.com
Thu Aug 5 10:55:30 PDT 2010


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.

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..75d863d 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(STRUCT_MEMBER(mystruct, mymember),
+ *                            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.
-- 
1.7.1.1

_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list