On Tue, 19 Aug 2025 03:22:24 -0700
Dimon Zhao <[email protected]> wrote:
> +static int nbl_chan_setup_ops(struct nbl_channel_ops_tbl **chan_ops_tbl,
> + struct nbl_channel_mgt_leonis *chan_mgt_leonis)
> +{
> + *chan_ops_tbl = rte_zmalloc("nbl_chan_ops_tbl", sizeof(struct
> nbl_channel_ops_tbl), 0);
> + if (!*chan_ops_tbl)
> + return -ENOMEM;
> +
> + NBL_CHAN_OPS_TBL_TO_OPS(*chan_ops_tbl) = &chan_ops;
> + NBL_CHAN_OPS_TBL_TO_PRIV(*chan_ops_tbl) = chan_mgt_leonis;
> +
> + chan_mgt_leonis->chan_mgt.msg_handler[NBL_CHAN_MSG_ACK].func =
> nbl_chan_recv_ack_msg;
> + chan_mgt_leonis->chan_mgt.msg_handler[NBL_CHAN_MSG_ACK].priv =
> chan_mgt_leonis;
> +
> + return 0;
> +}
I don't see the point of the ops table here?
You are allocating it in shared huge page memory; but it contains pointer to ops
table values that are function pointers. And due to ASLR function pointers are
not
valid when using primary/secondary process.