/* Description: Process a user generated LIST message and respond with the current status. Returns zero on success, negative values on failure.  */
static int netlbl_unlabel_list(struct sk_buff *skb, struct genl_info *info)
/* Description: Process a user generated LIST message and respond with the current status. Returns zero on success, negative values on failure.  */
static int netlbl_unlabel_list(struct sk_buff *skb, struct genl_info *info)
{
	int ret_val = -EINVAL;
	struct sk_buff *ans_skb;
	void *data;
	ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
	if (ans_skb == NULL)
		goto list_failure;
	data = genlmsg_put_reply(ans_skb, info, &netlbl_unlabel_gnl_family,
				 0, NLBL_UNLABEL_C_LIST);
	if (data == NULL) {
		ret_val = -ENOMEM;
		goto list_failure;
	}
	ret_val = nla_put_u8(ans_skb,
			     NLBL_UNLABEL_A_ACPTFLG,
			     netlabel_unlabel_acceptflg);
	if (ret_val != 0)
		goto list_failure;
	genlmsg_end(ans_skb, data);
	return genlmsg_reply(ans_skb, info);
list_failure:
	kfree_skb(ans_skb);
	return ret_val;
}