-
Bug
-
Resolution: Won't Do
-
Normal
-
None
-
rhel-8.10.z
-
None
-
No
-
Low
-
1
-
rhel-net-firewall
-
ssg_networking
-
7
-
False
-
False
-
-
None
-
NST-firewall-25W16-19
-
None
-
None
-
None
Coverity tool noticed how error path in JSON parser does not free allocated memory at all times. All cases should be fixed by:
47e18c0eba51a ("parser_json: fix handle memleak from error path")
For it to apply cleanly, one could backport the following dependencies (all more or less fixes to the JSON parser):
8efab5527cbcb ("parser_json: fix device parsing in netdev family")
bd976ab13b4d5 ("json: allow to specify comment on chain")
4dfb5b2010917 ("json: deal appropriately with multidevice in chain")
34c1337296807 ("parser_json: Proper ct expectation attribute parsing")
d73e269f7bffc ("parser_json: Fix synproxy object mss/wscale parsing")
Full log here:
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2812:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2812:3: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:2832:3: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 2830| json_error(ctx, "Invalid chain hook '%s'.", hookstr);
# 2831| chain_free(chain);
# 2832|-> return NULL;
# 2833| }
# 2834|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2810:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2810:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:2832:3: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 2830| json_error(ctx, "Invalid chain hook '%s'.", hookstr);
# 2831| chain_free(chain);
# 2832|-> return NULL;
# 2833| }
# 2834|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2812:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2812:3: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:2852:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 2850| json_error(ctx, "Unknown policy '%s'.", policy);
# 2851| chain_free(chain);
# 2852|-> return NULL;
# 2853| }
# 2854| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2810:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2810:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:2852:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 2850| json_error(ctx, "Unknown policy '%s'.", policy);
# 2851| chain_free(chain);
# 2852|-> return NULL;
# 2853| }
# 2854| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2893:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2893:2: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:2900:3: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 2898| if (!json_is_array(tmp)) {
# 2899| json_error(ctx, "Value of property \"expr\" must be an array.");
# 2900|-> return NULL;
# 2901| }
# 2902|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2892:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2892:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:2900:3: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 2898| if (!json_is_array(tmp)) {
# 2899| json_error(ctx, "Value of property \"expr\" must be an array.");
# 2900|-> return NULL;
# 2901| }
# 2902|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2893:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2893:2: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:2920:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 2918| json_typename(value));
# 2919| rule_free(rule);
# 2920|-> return NULL;
# 2921| }
# 2922|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2892:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2892:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:2920:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 2918| json_typename(value));
# 2919| rule_free(rule);
# 2920|-> return NULL;
# 2921| }
# 2922|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2893:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2893:2: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:2928:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 2926| json_error(ctx, "Parsing expr array at index %zd failed.", index);
# 2927| rule_free(rule);
# 2928|-> return NULL;
# 2929| }
# 2930|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:2892:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:2892:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:2928:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 2926| json_error(ctx, "Parsing expr array at index %zd failed.", index);
# 2927| rule_free(rule);
# 2928|-> return NULL;
# 2929| }
# 2930|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3338:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3336| tmp, sizeof(obj->secmark.ctx));
# 3337| obj_free(obj);
# 3338|-> return NULL;
# 3339| }
# 3340| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3338:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3336| tmp, sizeof(obj->secmark.ctx));
# 3337| obj_free(obj);
# 3338|-> return NULL;
# 3339| }
# 3340| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3355:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3353| tmp, sizeof(obj->ct_helper.name));
# 3354| obj_free(obj);
# 3355|-> return NULL;
# 3356| }
# 3357| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3355:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3353| tmp, sizeof(obj->ct_helper.name));
# 3354| obj_free(obj);
# 3355|-> return NULL;
# 3356| }
# 3357| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3366:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3364| json_error(ctx, "Invalid ct helper protocol '%s'.", tmp);
# 3365| obj_free(obj);
# 3366|-> return NULL;
# 3367| }
# 3368| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3366:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3364| json_error(ctx, "Invalid ct helper protocol '%s'.", tmp);
# 3365| obj_free(obj);
# 3366|-> return NULL;
# 3367| }
# 3368| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3373:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3371| json_error(ctx, "Invalid ct helper l3proto '%s'.", tmp);
# 3372| obj_free(obj);
# 3373|-> return NULL;
# 3374| }
# 3375| obj->ct_helper.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3373:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3371| json_error(ctx, "Invalid ct helper l3proto '%s'.", tmp);
# 3372| obj_free(obj);
# 3373|-> return NULL;
# 3374| }
# 3375| obj->ct_helper.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3388:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3386| json_error(ctx, "Invalid ct timeout protocol '%s'.", tmp);
# 3387| obj_free(obj);
# 3388|-> return NULL;
# 3389| }
# 3390| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3388:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3386| json_error(ctx, "Invalid ct timeout protocol '%s'.", tmp);
# 3387| obj_free(obj);
# 3388|-> return NULL;
# 3389| }
# 3390| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3395:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3393| json_error(ctx, "Invalid ct timeout l3proto '%s'.", tmp);
# 3394| obj_free(obj);
# 3395|-> return NULL;
# 3396| }
# 3397| obj->ct_helper.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3395:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3393| json_error(ctx, "Invalid ct timeout l3proto '%s'.", tmp);
# 3394| obj_free(obj);
# 3395|-> return NULL;
# 3396| }
# 3397| obj->ct_helper.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3402:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3400| if (json_parse_ct_timeout_policy(ctx, root, obj)) {
# 3401| obj_free(obj);
# 3402|-> return NULL;
# 3403| }
# 3404| break;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3402:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3400| if (json_parse_ct_timeout_policy(ctx, root, obj)) {
# 3401| obj_free(obj);
# 3402|-> return NULL;
# 3403| }
# 3404| break;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3412:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3410| json_error(ctx, "Invalid ct expectation l3proto '%s'.", tmp);
# 3411| obj_free(obj);
# 3412|-> return NULL;
# 3413| }
# 3414| obj->ct_expect.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3412:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3410| json_error(ctx, "Invalid ct expectation l3proto '%s'.", tmp);
# 3411| obj_free(obj);
# 3412|-> return NULL;
# 3413| }
# 3414| obj->ct_expect.l3proto = l3proto;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3423:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3421| json_error(ctx, "Invalid ct expectation protocol '%s'.", tmp);
# 3422| obj_free(obj);
# 3423|-> return NULL;
# 3424| }
# 3425| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3423:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3421| json_error(ctx, "Invalid ct expectation protocol '%s'.", tmp);
# 3422| obj_free(obj);
# 3423|-> return NULL;
# 3424| }
# 3425| }
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3438:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3436| "per", &tmp)) {
# 3437| obj_free(obj);
# 3438|-> return NULL;
# 3439| }
# 3440| json_unpack(root, "{s:s}", "rate_unit", &rate_unit);
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3438:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3436| "per", &tmp)) {
# 3437| obj_free(obj);
# 3438|-> return NULL;
# 3439| }
# 3440| json_unpack(root, "{s:s}", "rate_unit", &rate_unit);
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3463:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3461| "wscale", &obj->synproxy.wscale)) {
# 3462| obj_free(obj);
# 3463|-> return NULL;
# 3464| }
# 3465| obj->synproxy.flags |= NF_SYNPROXY_OPT_MSS;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3463:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3461| "wscale", &obj->synproxy.wscale)) {
# 3462| obj_free(obj);
# 3463|-> return NULL;
# 3464| }
# 3465| obj->synproxy.flags |= NF_SYNPROXY_OPT_MSS;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3304:3: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3304:3: var_assign: Assigning: "h.obj.name" = storage returned from "xstrdup(h.obj.name)".
nftables-1.0.4/src/parser_json.c:3471:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.obj.name" points to.
# 3469| if (flags < 0) {
# 3470| obj_free(obj);
# 3471|-> return NULL;
# 3472| }
# 3473| obj->synproxy.flags |= flags;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3302:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3302:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3471:5: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3469| if (flags < 0) {
# 3470| obj_free(obj);
# 3471|-> return NULL;
# 3472| }
# 3473| obj->synproxy.flags |= flags;
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3584:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3584:2: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:3598:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 3596| json_typename(value));
# 3597| rule_free(rule);
# 3598|-> return NULL;
# 3599| }
# 3600|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3583:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3583:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3598:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3596| json_typename(value));
# 3597| rule_free(rule);
# 3598|-> return NULL;
# 3599| }
# 3600|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3584:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3584:2: var_assign: Assigning: "h.chain.name" = storage returned from "xstrdup(h.chain.name)".
nftables-1.0.4/src/parser_json.c:3607:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.chain.name" points to.
# 3605| index);
# 3606| rule_free(rule);
# 3607|-> return NULL;
# 3608| }
# 3609|
Error: RESOURCE_LEAK (CWE-772):
nftables-1.0.4/src/parser_json.c:3583:2: alloc_fn: Storage is returned from allocation function "xstrdup".
nftables-1.0.4/src/parser_json.c:3583:2: var_assign: Assigning: "h.table.name" = storage returned from "xstrdup(h.table.name)".
nftables-1.0.4/src/parser_json.c:3607:4: leaked_storage: Variable "h" going out of scope leaks the storage "h.table.name" points to.
# 3605| index);
# 3606| rule_free(rule);
# 3607|-> return NULL;
# 3608| }
# 3609|