]> git.hungrycats.org Git - linux/commitdiff
[XFRM] Set SA saddr correctly
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 30 Jun 2003 12:17:41 +0000 (22:17 +1000)
committerHideaki Yoshifuji <yoshfuji@linux-ipv6.org>
Mon, 30 Jun 2003 12:17:41 +0000 (22:17 +1000)
The source address of an SA is not necessarily equal to the source address
in the selector.  This patch addresses this problem.

include/linux/xfrm.h
net/xfrm/xfrm_user.c

index f52d9db7d58dd2132c35e512e47780621563716c..45de6f510fc2e3ae5fa867f46a314abf298ec2aa 100644 (file)
@@ -155,6 +155,7 @@ enum xfrm_attr_type_t {
 struct xfrm_usersa_info {
        struct xfrm_selector            sel;
        struct xfrm_id                  id;
+       xfrm_address_t                  saddr;
        struct xfrm_lifetime_cfg        lft;
        struct xfrm_lifetime_cur        curlft;
        struct xfrm_stats               stats;
index 50d0eba6061c223dbab6c879c9dd128f165e755e..d0004c645f513111948b2b0016e9770fbf22e97d 100644 (file)
@@ -200,7 +200,7 @@ static void copy_from_user_state(struct xfrm_state *x, struct xfrm_usersa_info *
        x->props.replay_window = p->replay_window;
        x->props.reqid = p->reqid;
        x->props.family = p->family;
-       x->props.saddr = x->sel.saddr;
+       x->props.saddr = p->saddr;
 }
 
 static struct xfrm_state *xfrm_state_construct(struct xfrm_usersa_info *p,
@@ -296,6 +296,7 @@ static void copy_to_user_state(struct xfrm_state *x, struct xfrm_usersa_info *p)
        memcpy(&p->lft, &x->lft, sizeof(p->lft));
        memcpy(&p->curlft, &x->curlft, sizeof(p->curlft));
        memcpy(&p->stats, &x->stats, sizeof(p->stats));
+       p->saddr = x->props.saddr;
        p->mode = x->props.mode;
        p->replay_window = x->props.replay_window;
        p->reqid = x->props.reqid;