/* Get message from skb. Each message is processed by audit_receive_msg. Malformed skbs with wrong length are discarded silently.  */
static void audit_receive_skb(struct sk_buff *skb)
/* Get message from skb. Each message is processed by audit_receive_msg. Malformed skbs with wrong length are discarded silently.  */
static void audit_receive_skb(struct sk_buff *skb)
{
	struct nlmsghdr *nlh;
	int len;
	int err;
	nlh = nlmsg_hdr(skb);
	len = skb->len;
	while (NLMSG_OK(nlh, len)) {
		err = audit_receive_msg(skb, nlh);
		if (err || (nlh->nlmsg_flags & NLM_F_ACK))
			netlink_ack(skb, nlh, err);
		nlh = NLMSG_NEXT(nlh, len);
	}
}