wimax: fix oops if netlink fails to add attribute
authorInaky Perez-Gonzalez <inaky@linux.intel.com>
Tue, 31 Mar 2009 00:50:17 +0000 (17:50 -0700)
committerInaky Perez-Gonzalez <inaky@linux.intel.com>
Wed, 6 May 2009 20:48:36 +0000 (13:48 -0700)
When sending a message to user space using wimax_msg(), if nla_put()
fails, correctly interpret the return code from wimax_msg_alloc() as
an err ptr and return the error code instead of crashing (as it is
assuming than non-NULL means the pointer is ok).

Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
net/wimax/op-msg.c

index 5d149c1b5f0dee96280e854e38304682afdfbd9d..9ad4d893a566b6e8e8b535a8e4fc0784c13c7098 100644 (file)
@@ -149,7 +149,8 @@ struct sk_buff *wimax_msg_alloc(struct wimax_dev *wimax_dev,
        }
        result = nla_put(skb, WIMAX_GNL_MSG_DATA, size, msg);
        if (result < 0) {
-               dev_err(dev, "no memory to add payload in attribute\n");
+               dev_err(dev, "no memory to add payload (msg %p size %zu) in "
+                       "attribute: %d\n", msg, size, result);
                goto error_nla_put;
        }
        genlmsg_end(skb, genl_msg);
@@ -299,10 +300,10 @@ int wimax_msg(struct wimax_dev *wimax_dev, const char *pipe_name,
        struct sk_buff *skb;
 
        skb = wimax_msg_alloc(wimax_dev, pipe_name, buf, size, gfp_flags);
-       if (skb == NULL)
-               goto error_msg_new;
-       result = wimax_msg_send(wimax_dev, skb);
-error_msg_new:
+       if (IS_ERR(skb))
+               result = PTR_ERR(skb);
+       else
+               result = wimax_msg_send(wimax_dev, skb);
        return result;
 }
 EXPORT_SYMBOL_GPL(wimax_msg);