lkml.org 
[lkml]   [2017]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 19/59] drop_monitor: add missing call to genlmsg_end
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Reiter Wolfgang <wr0112358@gmail.com>


    [ Upstream commit 4200462d88f47f3759bdf4705f87e207b0f5b2e4 ]

    Update nlmsg_len field with genlmsg_end to enable userspace processing
    using nlmsg_next helper. Also adds error handling.

    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 | 33 ++++++++++++++++++++++++---------
    1 file changed, 24 insertions(+), 9 deletions(-)

    --- a/net/core/drop_monitor.c
    +++ b/net/core/drop_monitor.c
    @@ -80,6 +80,7 @@ static struct sk_buff *reset_per_cpu_dat
    struct nlattr *nla;
    struct sk_buff *skb;
    unsigned long flags;
    + void *msg_header;

    al = sizeof(struct net_dm_alert_msg);
    al += dm_hit_limit * sizeof(struct net_dm_drop_point);
    @@ -87,17 +88,31 @@ static struct sk_buff *reset_per_cpu_dat

    skb = genlmsg_new(al, GFP_KERNEL);

    - if (skb) {
    - genlmsg_put(skb, 0, 0, &net_drop_monitor_family,
    - 0, NET_DM_CMD_ALERT);
    - nla = nla_reserve(skb, NLA_UNSPEC,
    - sizeof(struct net_dm_alert_msg));
    - msg = nla_data(nla);
    - memset(msg, 0, al);
    - } else {
    - mod_timer(&data->send_timer, jiffies + HZ / 10);
    + if (!skb)
    + goto err;
    +
    + msg_header = genlmsg_put(skb, 0, 0, &net_drop_monitor_family,
    + 0, NET_DM_CMD_ALERT);
    + if (!msg_header) {
    + nlmsg_free(skb);
    + skb = NULL;
    + goto err;
    + }
    + nla = nla_reserve(skb, NLA_UNSPEC,
    + sizeof(struct net_dm_alert_msg));
    + if (!nla) {
    + nlmsg_free(skb);
    + skb = NULL;
    + goto err;
    }
    + msg = nla_data(nla);
    + memset(msg, 0, al);
    + genlmsg_end(skb, msg_header);
    + goto out;

    +err:
    + mod_timer(&data->send_timer, jiffies + HZ / 10);
    +out:
    spin_lock_irqsave(&data->lock, flags);
    swap(data->skb, skb);
    spin_unlock_irqrestore(&data->lock, flags);

    \
     
     \ /
      Last update: 2017-01-13 13:16    [W:3.324 / U:1.852 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site