On Thu, Feb 01, 2018 at 02:05:08PM -0600, Steve Wise wrote:
Hey Leon,
<...>
quoted
+static int res_qp_parse_cb(const struct nlmsghdr *nlh, void *data)
+{
<...>
quoted
+
+ mnl_attr_for_each_nested(nla_entry, nla_table) {
+ struct nlattr *nla_line[RDMA_NLDEV_ATTR_MAX] = {};
+ uint32_t lqpn, rqpn = 0, rq_psn = 0, sq_psn;
+ uint8_t type, state, path_mig_state = 0;
+ uint32_t port = 0, pid = 0;
+ char *comm = NULL;
<...>
quoted
+
+ if (rd_check_is_filtered(rd, "pid", pid))
+ continue;
Is comm leaked here when ATTR_RES_PID is present?
quoted
+
+ if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
+ /* discard const from mnl_attr_get_str */
+ comm = (char
*)mnl_attr_get_str(nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
And also here if the kernel ever passes up both PID and KERN_NAME (which it
isn't supposed to).
Yes, you are right, and the bad thing that I prepared everything to call
free() unconditionally by setting comm to be NULL.
Thanks
Steve.