mirror of https://github.com/OpenIPC/firmware.git
43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
diff -drupN a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
|
|
--- a/net/xfrm/xfrm_user.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/net/xfrm/xfrm_user.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -579,6 +579,9 @@ static struct xfrm_state *xfrm_state_con
|
|
|
|
xfrm_mark_get(attrs, &x->mark);
|
|
|
|
+ if (attrs[XFRMA_OUTPUT_MARK])
|
|
+ x->props.output_mark = nla_get_u32(attrs[XFRMA_OUTPUT_MARK]);
|
|
+
|
|
err = __xfrm_init_state(x, false);
|
|
if (err)
|
|
goto error;
|
|
@@ -864,6 +867,11 @@ static int copy_to_user_state_extra(stru
|
|
&x->replay);
|
|
if (ret)
|
|
goto out;
|
|
+ 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:
|
|
@@ -2427,6 +2435,7 @@ static const struct nla_policy xfrma_pol
|
|
[XFRMA_SA_EXTRA_FLAGS] = { .type = NLA_U32 },
|
|
[XFRMA_PROTO] = { .type = NLA_U8 },
|
|
[XFRMA_ADDRESS_FILTER] = { .len = sizeof(struct xfrm_address_filter) },
|
|
+ [XFRMA_OUTPUT_MARK] = { .len = NLA_U32 },
|
|
};
|
|
|
|
static const struct nla_policy xfrma_spd_policy[XFRMA_SPD_MAX+1] = {
|
|
@@ -2646,6 +2655,8 @@ static inline size_t xfrm_sa_len(struct
|
|
l += nla_total_size(sizeof(*x->coaddr));
|
|
if (x->props.extra_flags)
|
|
l += nla_total_size(sizeof(x->props.extra_flags));
|
|
+ if (x->props.output_mark)
|
|
+ l += nla_total_size(sizeof(x->props.output_mark));
|
|
|
|
/* Must count x->lastused as it may become non-zero behind our back. */
|
|
l += nla_total_size_64bit(sizeof(u64));
|