A recent commit added an output_mark. When copying
this output_mark, the return value of copy_sec_ctx
is overwitten without a check. Fix this by copying
the output_mark before the security context.

Fixes: 077fbac405bf ("net: xfrm: support setting an output mark.")
Signed-off-by: Steffen Klassert <[email protected]>
---
 net/xfrm/xfrm_user.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index cc3268d..490132d 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -900,13 +900,13 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
                ret = copy_user_offload(&x->xso, skb);
        if (ret)
                goto out;
-       if (x->security)
-               ret = copy_sec_ctx(x->security, skb);
        if (x->props.output_mark) {
                ret = nla_put_u32(skb, XFRMA_OUTPUT_MARK, x->props.output_mark);
                if (ret)
                        goto out;
        }
+       if (x->security)
+               ret = copy_sec_ctx(x->security, skb);
 out:
        return ret;
 }
-- 
2.7.4

Reply via email to