summaryrefslogtreecommitdiffstats
path: root/net/xfrm/xfrm_user.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.osdl.org>2006-11-21 18:36:59 -0800
committerLinus Torvalds <torvalds@woody.osdl.org>2006-11-21 18:36:59 -0800
commitc5dd27337a70b34cc400120e70a80fcb84c4fd7a (patch)
tree5c41d10ecb9169b9c3dd31a9cdad6af3b6f974b2 /net/xfrm/xfrm_user.c
parent6af6e1efb161ffe36e718b1fd58385710879af7c (diff)
parent12862086f24d7382b24379bbcbe0dadf12ca5945 (diff)
downloadlinux-c5dd27337a70b34cc400120e70a80fcb84c4fd7a.tar.bz2
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [TG3]: Add missing unlock in tg3_open() error path. [IPV6]: Fix address/interface handling in UDP and DCCP, according to the scoping architecture. [IRDA]: Lockdep fix. [BLUETOOTH]: Fix unaligned access in hci_send_to_sock. [XFRM]: nlmsg length not computed correctly in the presence of subpolicies [XFRM]: Sub-policies broke policy events [IGMP]: Fix IGMPV3_EXP() normalization bit shift value. [Bluetooth] Ignore L2CAP config requests on disconnect [Bluetooth] Always include MTU in L2CAP config responses [Bluetooth] Check if RFCOMM session is still attached to the TTY [Bluetooth] Handling pending connect attempts after inquiry [Bluetooth] Attach low-level connections to the Bluetooth bus [IPV6] IP6TUNNEL: Add missing nf_reset() on input path. [IPV6] IP6TUNNEL: Delete all tunnel device when unloading module. [IPV6] ROUTE: Do not enable router reachability probing in router mode. [IPV6] ROUTE: Prefer reachable nexthop only if the caller requests. [IPV6] ROUTE: Try to use router which is not known unreachable.
Diffstat (limited to 'net/xfrm/xfrm_user.c')
-rw-r--r--net/xfrm/xfrm_user.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index b43e7647e125..c4cde57d9216 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1927,6 +1927,9 @@ static int xfrm_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *xt,
len = RTA_SPACE(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);
len += NLMSG_SPACE(sizeof(struct xfrm_user_acquire));
len += RTA_SPACE(xfrm_user_sec_ctx_size(xp));
+#ifdef CONFIG_XFRM_SUB_POLICY
+ len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
skb = alloc_skb(len, GFP_ATOMIC);
if (skb == NULL)
return -ENOMEM;
@@ -2034,6 +2037,9 @@ static int xfrm_exp_policy_notify(struct xfrm_policy *xp, int dir, struct km_eve
len = RTA_SPACE(sizeof(struct xfrm_user_tmpl) * xp->xfrm_nr);
len += NLMSG_SPACE(sizeof(struct xfrm_user_polexpire));
len += RTA_SPACE(xfrm_user_sec_ctx_size(xp));
+#ifdef CONFIG_XFRM_SUB_POLICY
+ len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
skb = alloc_skb(len, GFP_ATOMIC);
if (skb == NULL)
return -ENOMEM;
@@ -2060,6 +2066,9 @@ static int xfrm_notify_policy(struct xfrm_policy *xp, int dir, struct km_event *
len += RTA_SPACE(headlen);
headlen = sizeof(*id);
}
+#ifdef CONFIG_XFRM_SUB_POLICY
+ len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
+#endif
len += NLMSG_SPACE(headlen);
skb = alloc_skb(len, GFP_ATOMIC);
@@ -2106,10 +2115,12 @@ static int xfrm_notify_policy_flush(struct km_event *c)
struct nlmsghdr *nlh;
struct sk_buff *skb;
unsigned char *b;
+ int len = 0;
#ifdef CONFIG_XFRM_SUB_POLICY
struct xfrm_userpolicy_type upt;
+ len += RTA_SPACE(sizeof(struct xfrm_userpolicy_type));
#endif
- int len = NLMSG_LENGTH(0);
+ len += NLMSG_LENGTH(0);
skb = alloc_skb(len, GFP_ATOMIC);
if (skb == NULL)