Subject: Re: [PATCH iproute2-rc 1/2] rdma: Fix core dump when pretty is used

From: Stephen Hemminger <[email-masked]>
Date: Fri, 29 Dec 2023 09:21:29 -0800

On Fri, 29 Dec 2023 14:52:40 +0800
Junxian Huang <[email-masked]> wrote:

> From: Chengchang Tang <[email-masked]>
> 
> There will be a core dump when pretty is used as the JSON object
> hasn't been opened and closed properly.
> 
> Before:
> $ rdma res show qp -jp -dd
> [ {
>     "ifindex": 1,
>     "ifname": "hns_1",
>     "port": 1,
>     "lqpn": 1,
>     "type": "GSI",
>     "state": "RTS",
>     "sq-psn": 0,
>     "comm": "ib_core"
> },
> "drv_sq_wqe_cnt": 128,
> "drv_sq_max_gs": 2,
> "drv_rq_wqe_cnt": 512,
> "drv_rq_max_gs": 1,
> rdma: json_writer.c:130: jsonw_end: Assertion `self->depth > 0' failed.
> Aborted (core dumped)
> 
> After:
> $ rdma res show qp -jp -dd
> [ {
>         "ifindex": 2,
>         "ifname": "hns_2",
>         "port": 1,
>         "lqpn": 1,
>         "type": "GSI",
>         "state": "RTS",
>         "sq-psn": 0,
>         "comm": "ib_core",{
>             "drv_sq_wqe_cnt": 128,
>             "drv_sq_max_gs": 2,
>             "drv_rq_wqe_cnt": 512,
>             "drv_rq_max_gs": 1,
>             "drv_ext_sge_sge_cnt": 256
>         }
>     } ]
> 
> Fixes: 331152752a97 ("rdma: print driver resource attributes")
> Signed-off-by: Chengchang Tang <[email-masked]>
> Signed-off-by: Junxian Huang <[email-masked]>

This code in rdma seems to be miking json and newline functionality
which creates bug traps.

Also the json should have same effective output in pretty and non-pretty mode.
It looks like since pretty mode add extra object layer, the nesting of {} would be
different.

The conversion to json_print() was done but it isn't using same conventions
as ip or tc.

The correct fix needs to go deeper and hit other things.