json: use secure un{base64,hex}mem for sensitive variants
authorKamil Szczęk <kamil@szczek.dev>
Wed, 5 Jun 2024 09:21:23 +0000 (11:21 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 5 Jun 2024 13:44:58 +0000 (14:44 +0100)
While tracing a LUKS code path in homework, I've noticed that we don't
erase buffers when doing unbase64 or unhex on JSON variants, even if the
variant is marked as sensitive.

src/shared/json.c

index e1ee98ef2d5e8a61af8b76c7675c5adf66ac2f89..4af34e521396735be05ac747df8c082fda600748 100644 (file)
@@ -5272,14 +5272,14 @@ int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) {
         if (!json_variant_is_string(v))
                 return -EINVAL;
 
-        return unbase64mem(json_variant_string(v), ret, ret_size);
+        return unbase64mem_full(json_variant_string(v), SIZE_MAX, /* secure= */ json_variant_is_sensitive(v), ret, ret_size);
 }
 
 int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
         if (!json_variant_is_string(v))
                 return -EINVAL;
 
-        return unhexmem(json_variant_string(v), ret, ret_size);
+        return unhexmem_full(json_variant_string(v), SIZE_MAX, /* secure= */ json_variant_is_sensitive(v), ret, ret_size);
 }
 
 static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = {