UPSTREAM: netfilter: nfnetlink: correctly validate length of batch messages
[firefly-linux-kernel-4.4.55.git] / net / netfilter / nfnetlink.c
index 77afe913d03db73c65631fba8c42732cb3f33f32..9adedba78eeaccafce9df7c9f851b7f8c19f7fe8 100644 (file)
@@ -326,10 +326,12 @@ replay:
                nlh = nlmsg_hdr(skb);
                err = 0;
 
-               if (nlmsg_len(nlh) < sizeof(struct nfgenmsg) ||
-                   skb->len < nlh->nlmsg_len) {
-                       err = -EINVAL;
-                       goto ack;
+               if (nlh->nlmsg_len < NLMSG_HDRLEN ||
+                   skb->len < nlh->nlmsg_len ||
+                   nlmsg_len(nlh) < sizeof(struct nfgenmsg)) {
+                       nfnl_err_reset(&err_list);
+                       status |= NFNL_BATCH_FAILURE;
+                       goto done;
                }
 
                /* Only requests are handled by the kernel */