On 11/1/21 9:34 AM, Leonard Crestez wrote: > Add a compute_sne function which finds the value of SNE for a certain > SEQ given an already known "recent" SNE/SEQ. This is implemented using > the standard tcp before/after macro and will work for SEQ values that > are without 2^31 of the SEQ for which we know the SNE. > } > +void __tcp_authopt_update_rcv_sne(struct tcp_sock *tp, struct tcp_authopt_info *info, u32 seq); > +static inline void tcp_authopt_update_rcv_sne(struct tcp_sock *tp, u32 seq) > +{ > + struct tcp_authopt_info *info; > + > + if (static_branch_unlikely(&tcp_authopt_needed)) { > + rcu_read_lock(); > + info = rcu_dereference(tp->authopt_info); > + if (info) > + __tcp_authopt_update_rcv_sne(tp, info, seq); > + rcu_read_unlock(); > + } > +} > +void __tcp_authopt_update_snd_sne(struct tcp_sock *tp, struct tcp_authopt_info *info, u32 seq); > +static inline void tcp_authopt_update_snd_sne(struct tcp_sock *tp, u32 seq) > +{ > + struct tcp_authopt_info *info; > + > + if (static_branch_unlikely(&tcp_authopt_needed)) { > + rcu_read_lock(); > + info = rcu_dereference(tp->authopt_info); > + if (info) > + __tcp_authopt_update_snd_sne(tp, info, seq); > + rcu_read_unlock(); > + } > +} > I would think callers of these helpers own socket lock, so no rcu_read_lock()/unlock() should be needed. Perhaps instead rcu_dereference_protected(tp->authopt_info, lockdep_sock_is_held(sk));