diff options
author | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-03-30 17:50:17 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-15 09:39:58 -0700 |
commit | 7e3ab8deaa79f69dc99ce624f3cc857e746d62d4 (patch) | |
tree | f09e1ac7f134d1d33ee57a42e64b987955c151f8 | |
parent | 923811b7bd5e6dbc21a384147367e682e698eeda (diff) |
wimax: fix oops if netlink fails to add attribute
commit d1a2627a29667fe7c4a9d06e1579a2d65bd39bba upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | net/wimax/op-msg.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/wimax/op-msg.c b/net/wimax/op-msg.c index cb3b4ad53683..c229de3939ea 100644 --- a/net/wimax/op-msg.c +++ b/net/wimax/op-msg.c @@ -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); @@ -302,10 +303,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); |