lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Wed,  5 Jun 2019 21:17:06 +0200
From:   Krzesimir Nowak <>
Cc:     Alban Crequy <>,
        Iago López Galeiras <>,
        Krzesimir Nowak <>,
        Quentin Monnet <>,
        Alexei Starovoitov <>,
        Daniel Borkmann <>,
        Martin KaFai Lau <>,
        Song Liu <>, Yonghong Song <>,
        Jakub Kicinski <>,
        Stanislav Fomichev <>,
        Prashant Bhole <>,
        Okash Khawaja <>,
        David Calavera <>,,
Subject: [BPF v1] tools: bpftool: Fix JSON output when lookup fails

In commit 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros
into functions") one case of error reporting was special cased, so it
could report a lookup error for a specific key when dumping the map
element. What the code forgot to do is to wrap the key and value keys
into a JSON object, so an example output of pretty JSON dump of a
sockhash map (which does not support looking up its values) is:

    "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
    "value": {
        "error": "Operation not supported"
    "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
    "value": {
        "error": "Operation not supported"

Note the key-value pairs inside the toplevel array. They should be
wrapped inside a JSON object, otherwise it is an invalid JSON. This
commit fixes this, so the output now is:

        "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x00"
        "value": {
            "error": "Operation not supported"
        "key": ["0x0a","0x41","0x00","0x02","0x1f","0x78","0x00","0x01"
        "value": {
            "error": "Operation not supported"

Fixes: 9a5ab8bf1d6d ("tools: bpftool: turn err() and info() macros into functions")
Cc: Quentin Monnet <>
Signed-off-by: Krzesimir Nowak <>
 tools/bpf/bpftool/map.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
index 3ec82904ccec..5da5a7311f13 100644
--- a/tools/bpf/bpftool/map.c
+++ b/tools/bpf/bpftool/map.c
@@ -716,12 +716,14 @@ static int dump_map_elem(int fd, void *key, void *value,
 		return 0;
 	if (json_output) {
+		jsonw_start_object(json_wtr);
 		jsonw_name(json_wtr, "key");
 		print_hex_data_json(key, map_info->key_size);
 		jsonw_name(json_wtr, "value");
 		jsonw_string_field(json_wtr, "error", strerror(lookup_errno));
+		jsonw_end_object(json_wtr);
 	} else {
 		const char *msg = NULL;

Powered by blists - more mailing lists