nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
                        0, 0);
+       if (!nlh) {
+               err = -EMSGSIZE;
+               goto err_free;
+       }
 
        err = fill_dev_info(msg, device);
        if (err)
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
                        0, NLM_F_MULTI);
 
-       if (fill_dev_info(skb, device)) {
+       if (!nlh || fill_dev_info(skb, device)) {
                nlmsg_cancel(skb, nlh);
                goto out;
        }
        nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
                        0, 0);
+       if (!nlh) {
+               err = -EMSGSIZE;
+               goto err_free;
+       }
 
        err = fill_port_info(msg, device, port, sock_net(skb->sk));
        if (err)
                                                 RDMA_NLDEV_CMD_PORT_GET),
                                0, NLM_F_MULTI);
 
-               if (fill_port_info(skb, device, p, sock_net(skb->sk))) {
+               if (!nlh || fill_port_info(skb, device, p, sock_net(skb->sk))) {
                        nlmsg_cancel(skb, nlh);
                        goto out;
                }
        nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_RES_GET),
                        0, 0);
+       if (!nlh) {
+               ret = -EMSGSIZE;
+               goto err_free;
+       }
 
        ret = fill_res_info(msg, device);
        if (ret)
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_RES_GET),
                        0, NLM_F_MULTI);
 
-       if (fill_res_info(skb, device)) {
+       if (!nlh || fill_res_info(skb, device)) {
                nlmsg_cancel(skb, nlh);
                goto out;
        }
                                         RDMA_NL_GET_OP(nlh->nlmsg_type)),
                        0, 0);
 
-       if (fill_nldev_handle(msg, device)) {
+       if (!nlh || fill_nldev_handle(msg, device)) {
                ret = -EMSGSIZE;
                goto err_free;
        }
                                         RDMA_NL_GET_OP(cb->nlh->nlmsg_type)),
                        0, NLM_F_MULTI);
 
-       if (fill_nldev_handle(skb, device)) {
+       if (!nlh || fill_nldev_handle(skb, device)) {
                ret = -EMSGSIZE;
                goto err;
        }
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_GET_CHARDEV),
                        0, 0);
+       if (!nlh) {
+               err = -EMSGSIZE;
+               goto out_nlmsg;
+       }
 
        data.nl_msg = msg;
        err = ib_get_client_nl_info(ibdev, client_name, &data);
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_SYS_GET),
                        0, 0);
+       if (!nlh) {
+               nlmsg_free(msg);
+               return -EMSGSIZE;
+       }
 
        err = nla_put_u8(msg, RDMA_NLDEV_SYS_ATTR_NETNS_MODE,
                         (u8)ib_devices_shared_netns);
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_STAT_SET),
                        0, 0);
-       if (fill_nldev_handle(msg, device) ||
+       if (!nlh || fill_nldev_handle(msg, device) ||
            nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port)) {
                ret = -EMSGSIZE;
                goto err_free_msg;
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_STAT_SET),
                        0, 0);
+       if (!nlh) {
+               ret = -EMSGSIZE;
+               goto err_fill;
+       }
 
        cntn = nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_COUNTER_ID]);
        qpn = nla_get_u32(tb[RDMA_NLDEV_ATTR_RES_LQPN]);
                                         RDMA_NLDEV_CMD_STAT_GET),
                        0, 0);
 
-       if (fill_nldev_handle(msg, device) ||
+       if (!nlh || fill_nldev_handle(msg, device) ||
            nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port)) {
                ret = -EMSGSIZE;
                goto err_msg;
                        RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,
                                         RDMA_NLDEV_CMD_STAT_GET),
                        0, 0);
+       if (!nlh) {
+               ret = -EMSGSIZE;
+               goto err_msg;
+       }
 
        ret = rdma_counter_get_mode(device, port, &mode, &mask);
        if (ret)
                0, 0);
 
        ret = -EMSGSIZE;
-       if (fill_nldev_handle(msg, device) ||
+       if (!nlh || fill_nldev_handle(msg, device) ||
            nla_put_u32(msg, RDMA_NLDEV_ATTR_PORT_INDEX, port))
                goto err_msg;