api: fix trace_plugin_msg_ids segv in trace dump 10/38710/2
authorMatthew Smith <mgsmith@netgate.com>
Wed, 19 Apr 2023 20:02:25 +0000 (20:02 +0000)
committerDave Barach <vpp@barachs.net>
Thu, 20 Apr 2023 21:11:41 +0000 (21:11 +0000)
With 'api-trace { on }' in startup.conf, running 'api trace dump' in
vppctl was causing VPP to seg fault. vl_msg_print_trace() was calling
m->endian_handler() without checking whether its null.

Checking if its non-null prevents a crash, but the trace dump prints
the message IDs for trace_plugin_msg_ids in network byte order. There is
an auto-generated endian function for that message. Set it on the call
to vl_msg_api_config() for trace_plugin_msg_ids so the IDs will be
printed in host byte order in trace dump output.

Type: fix
Fixes: fe45f8f5

Signed-off-by: Matthew Smith <mgsmith@netgate.com>
Change-Id: I0ab463985e9a983155feba13ac4eb99ab883ace6

src/vlibmemory/memclnt_api.c
src/vlibmemory/vlib_api_cli.c

index 29858dd..728edf7 100644 (file)
@@ -726,6 +726,7 @@ rpc_api_hookup (vlib_main_t *vm)
     .id = VL_API_##N,                                                         \
     .name = #n,                                                               \
     .handler = vl_api_##n##_t_handler,                                        \
+    .endian = vl_api_##n##_t_endian,                                          \
     .format_fn = vl_api_##n##_t_format,                                       \
     .size = sizeof (vl_api_##n##_t),                                          \
     .traced = 1,                                                              \
index 5b62e61..f9cda9b 100644 (file)
@@ -683,7 +683,7 @@ vl_msg_print_trace (u8 *msg, void *ctx)
       return 0;
     }
 
-  if (clib_arch_is_little_endian)
+  if (clib_arch_is_little_endian && (m->endian_handler != NULL))
     {
       u32 msg_length = vec_len (msg);
       vec_validate (tmpbuf, msg_length - 1);