From c46236ee2409d4bb3b55a5f794fde46f14ed6481 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Sun, 20 Jul 2003 14:50:02 -0700 Subject: [PATCH] [IPSEC]: Make reqids 32-bits. --- include/linux/pfkeyv2.h | 4 +++- include/linux/xfrm.h | 4 ++-- include/net/xfrm.h | 8 ++++---- net/ipv4/xfrm4_state.c | 2 +- net/ipv6/xfrm6_state.c | 2 +- net/key/af_key.c | 11 ++++++----- net/xfrm/xfrm_state.c | 2 +- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index cf3a2f1622391..fbfa0f52fdc94 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h @@ -190,7 +190,9 @@ struct sadb_x_ipsecrequest { uint16_t sadb_x_ipsecrequest_proto; uint8_t sadb_x_ipsecrequest_mode; uint8_t sadb_x_ipsecrequest_level; - uint16_t sadb_x_ipsecrequest_reqid; + uint16_t sadb_x_ipsecrequest_reserved1; + uint32_t sadb_x_ipsecrequest_reqid; + uint32_t sadb_x_ipsecrequest_reserved2; } __attribute__((packed)); /* sizeof(struct sadb_x_ipsecrequest) == 16 */ diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index d660c5f97c587..64ea125f3562c 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h @@ -126,7 +126,7 @@ enum struct xfrm_user_tmpl { struct xfrm_id id; xfrm_address_t saddr; - __u16 reqid; + __u32 reqid; __u8 mode; __u8 share; __u8 optional; @@ -162,8 +162,8 @@ struct xfrm_usersa_info { struct xfrm_lifetime_cur curlft; struct xfrm_stats stats; __u32 seq; + __u32 reqid; __u16 family; - __u16 reqid; __u8 mode; /* 0=transport,1=tunnel */ __u8 replay_window; }; diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 4cb71a1e0313d..e4618023716de 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -104,10 +104,10 @@ struct xfrm_state /* Parameters of this state. */ struct { + u32 reqid; u8 mode; u8 replay_window; u8 aalgo, ealgo, calgo; - u16 reqid; u16 family; xfrm_address_t saddr; int header_len; @@ -193,7 +193,7 @@ struct xfrm_state_afinfo { struct xfrm_tmpl *tmpl, xfrm_address_t *daddr, xfrm_address_t *saddr); struct xfrm_state *(*state_lookup)(xfrm_address_t *daddr, u32 spi, u8 proto); - struct xfrm_state *(*find_acq)(u8 mode, u16 reqid, u8 proto, + struct xfrm_state *(*find_acq)(u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create); }; @@ -244,7 +244,7 @@ struct xfrm_tmpl /* Source address of tunnel. Ignored, if it is not a tunnel. */ xfrm_address_t saddr; - __u16 reqid; + __u32 reqid; /* Mode: transport/tunnel */ __u8 mode; @@ -801,7 +801,7 @@ struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete); void xfrm_policy_flush(void); u32 xfrm_get_acqseq(void); void xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi); -struct xfrm_state * xfrm_find_acq(u8 mode, u16 reqid, u8 proto, +struct xfrm_state * xfrm_find_acq(u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create, unsigned short family); extern void xfrm_policy_flush(void); diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c index 5d51b9daa0d52..cd78fa0d6b883 100644 --- a/net/ipv4/xfrm4_state.c +++ b/net/ipv4/xfrm4_state.c @@ -58,7 +58,7 @@ __xfrm4_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto) } static struct xfrm_state * -__xfrm4_find_acq(u8 mode, u16 reqid, u8 proto, +__xfrm4_find_acq(u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create) { diff --git a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c index cd1ef86b57f52..c00c8ef25d83e 100644 --- a/net/ipv6/xfrm6_state.c +++ b/net/ipv6/xfrm6_state.c @@ -65,7 +65,7 @@ __xfrm6_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto) } static struct xfrm_state * -__xfrm6_find_acq(u8 mode, u16 reqid, u8 proto, +__xfrm6_find_acq(u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create) { diff --git a/net/key/af_key.c b/net/key/af_key.c index a6e913e5f11da..f481a136dad44 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -1099,7 +1099,7 @@ static int pfkey_getspi(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h struct sadb_msg *out_hdr; struct xfrm_state *x = NULL; u8 mode; - u16 reqid; + u32 reqid; u8 proto; unsigned short family; xfrm_address_t *xsaddr = NULL, *xdaddr = NULL; @@ -1496,7 +1496,7 @@ static int pfkey_promisc(struct sock *sk, struct sk_buff *skb, struct sadb_msg * static int check_reqid(struct xfrm_policy *xp, int dir, int count, void *ptr) { int i; - u16 reqid = *(u16*)ptr; + u32 reqid = *(u32*)ptr; for (i=0; ixfrm_nr; i++) { if (xp->xfrm_vec[i].reqid == reqid) @@ -1505,10 +1505,10 @@ static int check_reqid(struct xfrm_policy *xp, int dir, int count, void *ptr) return 0; } -static u16 gen_reqid(void) +static u32 gen_reqid(void) { - u16 start; - static u16 reqid = IPSEC_MANUAL_REQID_MAX; + u32 start; + static u32 reqid = IPSEC_MANUAL_REQID_MAX; start = reqid; do { @@ -1771,6 +1771,7 @@ static void pfkey_xfrm_policy2msg(struct sk_buff *skb, struct xfrm_policy *xp, i size -= 2*socklen; rq = (void*)skb_put(skb, req_size); pol->sadb_x_policy_len += req_size/8; + memset(rq, 0, sizeof(*rq)); rq->sadb_x_ipsecrequest_len = req_size; rq->sadb_x_ipsecrequest_proto = t->id.proto; rq->sadb_x_ipsecrequest_mode = t->mode+1; diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index aa6bb0eb2e66c..86bd26e1cb19e 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -554,7 +554,7 @@ xfrm_state_lookup(xfrm_address_t *daddr, u32 spi, u8 proto, } struct xfrm_state * -xfrm_find_acq(u8 mode, u16 reqid, u8 proto, +xfrm_find_acq(u8 mode, u32 reqid, u8 proto, xfrm_address_t *daddr, xfrm_address_t *saddr, int create, unsigned short family) { -- 2.53.0