static void audit_printk_skb(struct sk_buff *skb)
 {
        struct nlmsghdr *nlh = nlmsg_hdr(skb);
-       char *data = NLMSG_DATA(nlh);
+       char *data = nlmsg_data(nlh);
 
        if (nlh->nlmsg_type != AUDIT_EOE) {
                if (printk_ratelimit())
        if (!skb)
                return NULL;
 
-       nlh     = NLMSG_NEW(skb, pid, seq, t, size, flags);
-       data    = NLMSG_DATA(nlh);
+       nlh     = nlmsg_put(skb, pid, seq, t, size, flags);
+       if (!nlh)
+               goto out_kfree_skb;
+       data = nlmsg_data(nlh);
        memcpy(data, payload, size);
        return skb;
 
-nlmsg_failure:                 /* Used by NLMSG_NEW */
-       if (skb)
-               kfree_skb(skb);
+out_kfree_skb:
+       kfree_skb(skb);
        return NULL;
 }
 
        sessionid = audit_get_sessionid(current);
        security_task_getsecid(current, &sid);
        seq  = nlh->nlmsg_seq;
-       data = NLMSG_DATA(nlh);
+       data = nlmsg_data(nlh);
 
        switch (msg_type) {
        case AUDIT_GET:
 
        ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask);
        if (!ab->skb)
-               goto nlmsg_failure;
+               goto err;
 
-       nlh = NLMSG_NEW(ab->skb, 0, 0, type, 0, 0);
+       nlh = nlmsg_put(ab->skb, 0, 0, type, 0, 0);
+       if (!nlh)
+               goto out_kfree_skb;
 
        return ab;
 
-nlmsg_failure:                  /* Used by NLMSG_NEW */
+out_kfree_skb:
        kfree_skb(ab->skb);
        ab->skb = NULL;
 err: