]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
json: add an assert_cc() check that validates _JSON_VARIANT_MAGIC_MAX
authorLennart Poettering <lennart@poettering.net>
Fri, 12 Oct 2018 14:53:04 +0000 (16:53 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 18 Oct 2018 14:44:51 +0000 (16:44 +0200)
src/basic/json-internal.h

index 98e53ede10cea0db60417161ffad98117605422f..bf158bff0d438ac673cb88152cd75fcdba1ef35e 100644 (file)
@@ -37,6 +37,11 @@ assert_cc(sizeof(JsonValue) == 16U);
 #define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((JsonVariant*) 9)
 #define _JSON_VARIANT_MAGIC_MAX ((JsonVariant*) 10)
 
+/* This is only safe as long as we don't define more than 4K magic pointers, i.e. the page size of the simplest
+ * architectures we support. That's because we rely on the fact that malloc() will never allocate from the first memory
+ * page, as it is a faulting page for catching NULL pointer dereferences. */
+assert_cc((uintptr_t) _JSON_VARIANT_MAGIC_MAX < 4096U);
+
 enum { /* JSON tokens */
         JSON_TOKEN_END,
         JSON_TOKEN_COLON,