aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_dev.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2007-02-01 02:16:40 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-02-08 15:38:41 -0500
commit26932566a42d46aee7e5d526cb34fba9380cad10 (patch)
tree3991d9209ddf2454ba4c71daccdc33951811dcf1 /net/decnet/dn_dev.c
parent2cf6c36cb46d69057db2ebae0d8ec352e065f48b (diff)
[NETLINK]: Don't BUG on undersized allocations
Currently netlink users BUG when the allocated skb for an event notification is undersized. While this is certainly a kernel bug, its not critical and crashing the kernel is too drastic, especially when considering that these errors have appeared multiple times in the past and it BUGs even if no listeners are present. This patch replaces BUG by WARN_ON and changes the notification functions to inform potential listeners of undersized allocations using a unique error code (EMSGSIZE). Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet/dn_dev.c')
-rw-r--r--net/decnet/dn_dev.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
index ed083ab455b7..90b3dfd72b49 100644
--- a/net/decnet/dn_dev.c
+++ b/net/decnet/dn_dev.c
@@ -749,7 +749,7 @@ static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa,
749 749
750 nlh = nlmsg_put(skb, pid, seq, event, sizeof(*ifm), flags); 750 nlh = nlmsg_put(skb, pid, seq, event, sizeof(*ifm), flags);
751 if (nlh == NULL) 751 if (nlh == NULL)
752 return -ENOBUFS; 752 return -EMSGSIZE;
753 753
754 ifm = nlmsg_data(nlh); 754 ifm = nlmsg_data(nlh);
755 ifm->ifa_family = AF_DECnet; 755 ifm->ifa_family = AF_DECnet;
@@ -768,7 +768,8 @@ static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa,
768 return nlmsg_end(skb, nlh); 768 return nlmsg_end(skb, nlh);
769 769
770nla_put_failure: 770nla_put_failure:
771 return nlmsg_cancel(skb, nlh); 771 nlmsg_cancel(skb, nlh);
772 return -EMSGSIZE;
772} 773}
773 774
774static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa) 775static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa)
@@ -781,9 +782,12 @@ static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa)
781 goto errout; 782 goto errout;
782 783
783 err = dn_nl_fill_ifaddr(skb, ifa, 0, 0, event, 0); 784 err = dn_nl_fill_ifaddr(skb, ifa, 0, 0, event, 0);
784 /* failure implies BUG in dn_ifaddr_nlmsg_size() */ 785 if (err < 0) {
785 BUG_ON(err < 0); 786 /* -EMSGSIZE implies BUG in dn_ifaddr_nlmsg_size() */
786 787 WARN_ON(err == -EMSGSIZE);
788 kfree_skb(skb);
789 goto errout;
790 }
787 err = rtnl_notify(skb, 0, RTNLGRP_DECnet_IFADDR, NULL, GFP_KERNEL); 791 err = rtnl_notify(skb, 0, RTNLGRP_DECnet_IFADDR, NULL, GFP_KERNEL);
788errout: 792errout:
789 if (err < 0) 793 if (err < 0)