]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: parser_json: fix crash while restoring secmark object
authorEric Jallot <ejallot@gmail.com>
Mon, 16 Sep 2019 10:24:44 +0000 (12:24 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 16 Sep 2019 13:53:42 +0000 (15:53 +0200)
Before patch:
 # nft -j list ruleset | tee rules.json | jq '.'
 {
   "nftables": [
     {
       "metainfo": {
         "version": "0.9.2",
         "release_name": "Scram",
         "json_schema_version": 1
       }
     },
     {
       "table": {
         "family": "inet",
         "name": "t",
         "handle": 11
       }
     },
     {
       "secmark": {
         "family": "inet",
         "name": "s",
         "table": "t",
         "handle": 1,
         "context": "system_u:object_r:ssh_server_packet_t:s0"
       }
     }
   ]
 }

 # nft flush ruleset
 # nft -j -f rules.json
 Segmentation fault

Use "&tmp" instead of "tmp" in json_unpack() while translating "context" keyword.

After patch:
 # nft -j -f rules.json
 # nft list ruleset
 table inet t {
         secmark s {
                 "system_u:object_r:ssh_server_packet_t:s0"
         }
 }

Fixes: 3bc84e5c1fdd1 ("src: add support for setting secmark")
Signed-off-by: Eric Jallot <ejallot@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/parser_json.c

index 5dd410af4b074d2d169d9528804bf212c4a82f0e..bc29dedf5b4c3c523d2b56d3fc241e1af0aaa5d7 100644 (file)
@@ -3093,7 +3093,7 @@ static struct cmd *json_parse_cmd_add_object(struct json_ctx *ctx,
                break;
        case CMD_OBJ_SECMARK:
                obj->type = NFT_OBJECT_SECMARK;
-               if (!json_unpack(root, "{s:s}", "context", tmp)) {
+               if (!json_unpack(root, "{s:s}", "context", &tmp)) {
                        int ret;
                        ret = snprintf(obj->secmark.ctx, sizeof(obj->secmark.ctx), "%s", tmp);
                        if (ret < 0 || ret >= (int)sizeof(obj->secmark.ctx)) {