]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-json: limit the number of env variables to something reasonable
authorFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 29 Apr 2026 14:50:57 +0000 (16:50 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 30 Apr 2026 07:46:46 +0000 (09:46 +0200)
Let's start with 1024, as that should be plenty for all sane use cases.

src/libsystemd/sd-json/json-util.c
src/libsystemd/sd-json/json-util.h

index 27306409fe7c407d0f67aa66ddb4a7a57b0491b2..40102a69989edf5e5aa7d9be80d766b90cfc7c09 100644 (file)
@@ -653,6 +653,9 @@ int json_dispatch_strv_environment(const char *name, sd_json_variant *variant, s
         if (!sd_json_variant_is_array(variant))
                 return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
 
+        if (sd_json_variant_elements(variant) > ENVIRONMENT_ASSIGNMENTS_MAX)
+                return json_log(variant, flags, SYNTHETIC_ERRNO(E2BIG), "Too many environment variable assignments.");
+
         sd_json_variant *i;
         JSON_VARIANT_ARRAY_FOREACH(i, variant) {
                 const char *e;
index cea2d368b43db520e368857281f0f9a4f954c11f..34d79d5238aaa916afeec3d48de2204119978a29 100644 (file)
@@ -9,6 +9,8 @@
 #include "sd-forward.h"
 #include "string-util.h"        /* IWYU pragma: keep */
 
+#define ENVIRONMENT_ASSIGNMENTS_MAX 1024U
+
 #define JSON_VARIANT_REPLACE(v, q)        \
         do {                              \
                 typeof(v)* _v = &(v);     \