Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 9673
b: refs/heads/master
c: 77d8d7a
h: refs/heads/master
i:
  9671: 438aa9b
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Oct 5, 2005
1 parent 425e902 commit dc91cc2
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 140e26fcd559f6988e5a9056385eecade19d9b49
refs/heads/master: 77d8d7a6848c81084f413e1ec4982123a56e2ccb
5 changes: 5 additions & 0 deletions trunk/include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -931,4 +931,9 @@ static inline int xfrm_addr_cmp(xfrm_address_t *a, xfrm_address_t *b,
}
}

static inline int xfrm_policy_id2dir(u32 index)
{
return index & 7;
}

#endif /* _NET_XFRM_H */
11 changes: 8 additions & 3 deletions trunk/net/key/af_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -2154,6 +2154,7 @@ static int key_pol_get_resp(struct sock *sk, struct xfrm_policy *xp, struct sadb

static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hdr, void **ext_hdrs)
{
unsigned int dir;
int err;
struct sadb_x_policy *pol;
struct xfrm_policy *xp;
Expand All @@ -2162,7 +2163,11 @@ static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
if ((pol = ext_hdrs[SADB_X_EXT_POLICY-1]) == NULL)
return -EINVAL;

xp = xfrm_policy_byid(0, pol->sadb_x_policy_id,
dir = xfrm_policy_id2dir(pol->sadb_x_policy_id);
if (dir >= XFRM_POLICY_MAX)
return -EINVAL;

xp = xfrm_policy_byid(dir, pol->sadb_x_policy_id,
hdr->sadb_msg_type == SADB_X_SPDDELETE2);
if (xp == NULL)
return -ENOENT;
Expand All @@ -2174,9 +2179,9 @@ static int pfkey_spdget(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
if (hdr->sadb_msg_type == SADB_X_SPDDELETE2) {
c.data.byid = 1;
c.event = XFRM_MSG_DELPOLICY;
km_policy_notify(xp, pol->sadb_x_policy_dir-1, &c);
km_policy_notify(xp, dir, &c);
} else {
err = key_pol_get_resp(sk, xp, hdr, pol->sadb_x_policy_dir-1);
err = key_pol_get_resp(sk, xp, hdr, dir);
}

xfrm_pol_put(xp);
Expand Down
4 changes: 2 additions & 2 deletions trunk/net/xfrm/xfrm_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ static void xfrm_policy_timer(unsigned long data)
if (xp->dead)
goto out;

dir = xp->index & 7;
dir = xfrm_policy_id2dir(xp->index);

if (xp->lft.hard_add_expires_seconds) {
long tmo = xp->lft.hard_add_expires_seconds +
Expand Down Expand Up @@ -417,7 +417,7 @@ struct xfrm_policy *xfrm_policy_byid(int dir, u32 id, int delete)
struct xfrm_policy *pol, **p;

write_lock_bh(&xfrm_policy_lock);
for (p = &xfrm_policy_list[id & 7]; (pol=*p)!=NULL; p = &pol->next) {
for (p = &xfrm_policy_list[dir]; (pol=*p)!=NULL; p = &pol->next) {
if (pol->index == id) {
xfrm_pol_hold(pol);
if (delete)
Expand Down

0 comments on commit dc91cc2

Please sign in to comment.