mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-03 05:40:48 -05:00
[NETLINK]: Do precise netlink message allocations where possible
Account for the netlink message header size directly in nlmsg_new() instead of relying on the caller calculate it correctly. Replaces error handling of message construction functions when constructing notifications with bug traps since a failure implies a bug in calculating the size of the skb. Signed-off-by: Thomas Graf <tgraf@suug.ch> Acked-by: Paul Moore <paul.moore@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a94f723d59
commit
339bf98ffc
@@ -174,6 +174,7 @@ int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol);
|
||||
*/
|
||||
#define NLMSG_GOODORDER 0
|
||||
#define NLMSG_GOODSIZE (SKB_MAX_ORDER(0, NLMSG_GOODORDER))
|
||||
#define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN)
|
||||
|
||||
|
||||
struct netlink_callback
|
||||
|
||||
@@ -52,6 +52,7 @@ struct fib_rules_ops
|
||||
struct nlmsghdr *,
|
||||
struct fib_rule_hdr *);
|
||||
u32 (*default_pref)(void);
|
||||
size_t (*nlmsg_payload)(struct fib_rule *);
|
||||
|
||||
int nlgroup;
|
||||
struct nla_policy *policy;
|
||||
|
||||
@@ -500,14 +500,15 @@ static inline struct nlmsghdr *nlmsg_put_answer(struct sk_buff *skb,
|
||||
|
||||
/**
|
||||
* nlmsg_new - Allocate a new netlink message
|
||||
* @size: maximum size of message
|
||||
* @payload: size of the message payload
|
||||
* @flags: the type of memory to allocate.
|
||||
*
|
||||
* Use NLMSG_GOODSIZE if size isn't know and you need a good default size.
|
||||
* Use NLMSG_DEFAULT_SIZE if the size of the payload isn't known
|
||||
* and a good default is needed.
|
||||
*/
|
||||
static inline struct sk_buff *nlmsg_new(int size, gfp_t flags)
|
||||
static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags)
|
||||
{
|
||||
return alloc_skb(size, flags);
|
||||
return alloc_skb(nlmsg_total_size(payload), flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user