drop_monitor: consider inserted data in genlmsg_end
authorReiter Wolfgang <wr0112358@gmail.com>
Tue, 3 Jan 2017 00:39:10 +0000 (01:39 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 15 Jan 2017 12:41:35 +0000 (13:41 +0100)
[ Upstream commit 3b48ab2248e61408910e792fe84d6ec466084c1a ]

Final nlmsg_len field update must reflect inserted net_dm_drop_point
data.

This patch depends on previous patch:
"drop_monitor: add missing call to genlmsg_end"

Signed-off-by: Reiter Wolfgang <wr0112358@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/core/drop_monitor.c

index 38d39b028b65c59f218fb61b4eb15e36241bf12f..a2270188b8649000a4f3e0f3bbf37758bdc68726 100644 (file)
@@ -107,7 +107,6 @@ static struct sk_buff *reset_per_cpu_data(struct per_cpu_dm_data *data)
        }
        msg = nla_data(nla);
        memset(msg, 0, al);
-       genlmsg_end(skb, msg_header);
        goto out;
 
 err:
@@ -117,6 +116,13 @@ out:
        swap(data->skb, skb);
        spin_unlock_irqrestore(&data->lock, flags);
 
+       if (skb) {
+               struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data;
+               struct genlmsghdr *gnlh = (struct genlmsghdr *)nlmsg_data(nlh);
+
+               genlmsg_end(skb, genlmsg_data(gnlh));
+       }
+
        return skb;
 }