[XFRM] xfrm_user: Fix unaligned accesses.
authorDavid S. Miller <davem@sunset.davemloft.net>
Fri, 27 Oct 2006 22:29:47 +0000 (15:29 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 30 Oct 2006 23:24:35 +0000 (15:24 -0800)
Use memcpy() to move xfrm_address_t objects in and out
of netlink messages.  The vast majority of xfrm_user was
doing this properly, except for copy_from_user_state()
and copy_to_user_state().

Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_user.c

index 2b2e59d8ffbc8ca197c8b84b98248c92511ce365..b43e7647e125692955b8a9ce5081ee3bb7166bb8 100644 (file)
@@ -323,7 +323,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 = p->saddr;
+       memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr));
        x->props.flags = p->flags;
 }
 
@@ -545,7 +545,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;
+       memcpy(&p->saddr, &x->props.saddr, sizeof(p->saddr));
        p->mode = x->props.mode;
        p->replay_window = x->props.replay_window;
        p->reqid = x->props.reqid;