Skip to content

Commit 1cf9a3a

Browse files
qsnklassert
authored andcommitted
xfrm: add extack support to xfrm_init_replay
Signed-off-by: Sabrina Dubroca <[email protected]> Signed-off-by: Steffen Klassert <[email protected]>
1 parent 741f9a1 commit 1cf9a3a

File tree

4 files changed

+10
-6
lines changed

4 files changed

+10
-6
lines changed

include/net/xfrm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,7 @@ int xfrm_dev_state_flush(struct net *net, struct net_device *dev, bool task_vali
15801580
void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si);
15811581
void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si);
15821582
u32 xfrm_replay_seqhi(struct xfrm_state *x, __be32 net_seq);
1583-
int xfrm_init_replay(struct xfrm_state *x);
1583+
int xfrm_init_replay(struct xfrm_state *x, struct netlink_ext_ack *extack);
15841584
u32 xfrm_state_mtu(struct xfrm_state *x, int mtu);
15851585
int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload,
15861586
struct netlink_ext_ack *extack);

net/xfrm/xfrm_replay.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -766,18 +766,22 @@ int xfrm_replay_overflow(struct xfrm_state *x, struct sk_buff *skb)
766766
}
767767
#endif
768768

769-
int xfrm_init_replay(struct xfrm_state *x)
769+
int xfrm_init_replay(struct xfrm_state *x, struct netlink_ext_ack *extack)
770770
{
771771
struct xfrm_replay_state_esn *replay_esn = x->replay_esn;
772772

773773
if (replay_esn) {
774774
if (replay_esn->replay_window >
775-
replay_esn->bmp_len * sizeof(__u32) * 8)
775+
replay_esn->bmp_len * sizeof(__u32) * 8) {
776+
NL_SET_ERR_MSG(extack, "ESN replay window is too large for the chosen bitmap size");
776777
return -EINVAL;
778+
}
777779

778780
if (x->props.flags & XFRM_STATE_ESN) {
779-
if (replay_esn->replay_window == 0)
781+
if (replay_esn->replay_window == 0) {
782+
NL_SET_ERR_MSG(extack, "ESN replay window must be > 0");
780783
return -EINVAL;
784+
}
781785
x->repl_mode = XFRM_REPLAY_MODE_ESN;
782786
} else {
783787
x->repl_mode = XFRM_REPLAY_MODE_BMP;

net/xfrm/xfrm_state.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2686,7 +2686,7 @@ int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload,
26862686

26872687
x->outer_mode = *outer_mode;
26882688
if (init_replay) {
2689-
err = xfrm_init_replay(x);
2689+
err = xfrm_init_replay(x, extack);
26902690
if (err)
26912691
goto error;
26922692
}

net/xfrm/xfrm_user.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
741741
/* sysctl_xfrm_aevent_etime is in 100ms units */
742742
x->replay_maxage = (net->xfrm.sysctl_aevent_etime*HZ)/XFRM_AE_ETH_M;
743743

744-
if ((err = xfrm_init_replay(x)))
744+
if ((err = xfrm_init_replay(x, extack)))
745745
goto error;
746746

747747
/* override default values from above */

0 commit comments

Comments
 (0)