[PATCH] taskstats: fix sk_buff size calculation
authorOleg Nesterov <oleg@tv-sign.ru>
Sun, 29 Oct 2006 15:57:16 +0000 (18:57 +0300)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 29 Oct 2006 20:07:37 +0000 (12:07 -0800)
prepare_reply() adds GENL_HDRLEN to the payload (genlmsg_total_size()),
but then it does genlmsg_put()->nlmsg_put().  This means we forget to
reserve a room for 'struct nlmsghdr'.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Thomas Graf <tgraf@suug.ch>
Cc: Andrew Morton <akpm@osdl.org>
Cc: Shailabh Nagar <nagar@watson.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Jay Lan <jlan@sgi.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
kernel/taskstats.c

index f3c3e9d43d2cdb41374afb7a2e941ef57a945c84..2039585ec5e1785b859ea6b9c0b6ca827dac7e29 100644 (file)
@@ -77,7 +77,8 @@ static int prepare_reply(struct genl_info *info, u8 cmd, struct sk_buff **skbp,
        /*
         * If new attributes are added, please revisit this allocation
         */
-       skb = nlmsg_new(genlmsg_total_size(size), GFP_KERNEL);
+       size = nlmsg_total_size(genlmsg_total_size(size));
+       skb = nlmsg_new(size, GFP_KERNEL);
        if (!skb)
                return -ENOMEM;