[Devel] [PATCH 2/3] Add two macros for build-time testing of time compatibility
Dan Smith
danms at us.ibm.com
Thu Aug 5 10:54:48 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