@ -76,9 +76,6 @@
# include <asm/unaligned.h>
# include <linux/errqueue.h>
int sysctl_tcp_timestamps __read_mostly = 1 ;
int sysctl_tcp_window_scaling __read_mostly = 1 ;
int sysctl_tcp_sack __read_mostly = 1 ;
int sysctl_tcp_fack __read_mostly ;
int sysctl_tcp_max_reordering __read_mostly = 300 ;
int sysctl_tcp_dsack __read_mostly = 1 ;
@ -3724,7 +3721,8 @@ static void tcp_parse_fastopen_option(int len, const unsigned char *cookie,
* But , this can also be called on packets in the established flow when
* the fast version below fails .
*/
void tcp_parse_options ( const struct sk_buff * skb ,
void tcp_parse_options ( const struct net * net ,
const struct sk_buff * skb ,
struct tcp_options_received * opt_rx , int estab ,
struct tcp_fastopen_cookie * foc )
{
@ -3765,7 +3763,7 @@ void tcp_parse_options(const struct sk_buff *skb,
break ;
case TCPOPT_WINDOW :
if ( opsize = = TCPOLEN_WINDOW & & th - > syn & &
! estab & & sysctl_tcp_window_scaling ) {
! estab & & net - > ipv4 . sysctl_tcp_window_scaling ) {
__u8 snd_wscale = * ( __u8 * ) ptr ;
opt_rx - > wscale_ok = 1 ;
if ( snd_wscale > TCP_MAX_WSCALE ) {
@ -3781,7 +3779,7 @@ void tcp_parse_options(const struct sk_buff *skb,
case TCPOPT_TIMESTAMP :
if ( ( opsize = = TCPOLEN_TIMESTAMP ) & &
( ( estab & & opt_rx - > tstamp_ok ) | |
( ! estab & & sysctl_tcp_timestamps ) ) ) {
( ! estab & & net - > ipv4 . sysctl_tcp_timestamps ) ) ) {
opt_rx - > saw_tstamp = 1 ;
opt_rx - > rcv_tsval = get_unaligned_be32 ( ptr ) ;
opt_rx - > rcv_tsecr = get_unaligned_be32 ( ptr + 4 ) ;
@ -3789,7 +3787,7 @@ void tcp_parse_options(const struct sk_buff *skb,
break ;
case TCPOPT_SACK_PERM :
if ( opsize = = TCPOLEN_SACK_PERM & & th - > syn & &
! estab & & sysctl_tcp_sack ) {
! estab & & net - > ipv4 . sysctl_tcp_sack ) {
opt_rx - > sack_ok = TCP_SACK_SEEN ;
tcp_sack_reset ( opt_rx ) ;
}
@ -3858,7 +3856,8 @@ static bool tcp_parse_aligned_timestamp(struct tcp_sock *tp, const struct tcphdr
/* Fast parse options. This hopes to only see timestamps.
* If it is wrong it falls back on tcp_parse_options ( ) .
*/
static bool tcp_fast_parse_options ( const struct sk_buff * skb ,
static bool tcp_fast_parse_options ( const struct net * net ,
const struct sk_buff * skb ,
const struct tcphdr * th , struct tcp_sock * tp )
{
/* In the spirit of fast parsing, compare doff directly to constant
@ -3873,7 +3872,7 @@ static bool tcp_fast_parse_options(const struct sk_buff *skb,
return true ;
}
tcp_parse_options ( skb , & tp - > rx_opt , 1 , NULL ) ;
tcp_parse_options ( net , skb , & tp - > rx_opt , 1 , NULL ) ;
if ( tp - > rx_opt . saw_tstamp & & tp - > rx_opt . rcv_tsecr )
tp - > rx_opt . rcv_tsecr - = tp - > tsoffset ;
@ -5234,7 +5233,8 @@ static bool tcp_validate_incoming(struct sock *sk, struct sk_buff *skb,
bool rst_seq_match = false ;
/* RFC1323: H1. Apply PAWS check first. */
if ( tcp_fast_parse_options ( skb , th , tp ) & & tp - > rx_opt . saw_tstamp & &
if ( tcp_fast_parse_options ( sock_net ( sk ) , skb , th , tp ) & &
tp - > rx_opt . saw_tstamp & &
tcp_paws_discard ( sk , skb ) ) {
if ( ! th - > rst ) {
NET_INC_STATS ( sock_net ( sk ) , LINUX_MIB_PAWSESTABREJECTED ) ;
@ -5605,7 +5605,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,
/* Get original SYNACK MSS value if user MSS sets mss_clamp */
tcp_clear_options ( & opt ) ;
opt . user_mss = opt . mss_clamp = 0 ;
tcp_parse_options ( synack , & opt , 0 , NULL ) ;
tcp_parse_options ( sock_net ( sk ) , s ynack , & opt , 0 , NULL ) ;
mss = opt . mss_clamp ;
}
@ -5659,7 +5659,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
int saved_clamp = tp - > rx_opt . mss_clamp ;
bool fastopen_fail ;
tcp_parse_options ( skb , & tp - > rx_opt , 0 , & foc ) ;
tcp_parse_options ( sock_net ( sk ) , s kb , & tp - > rx_opt , 0 , & foc ) ;
if ( tp - > rx_opt . saw_tstamp & & tp - > rx_opt . rcv_tsecr )
tp - > rx_opt . rcv_tsecr - = tp - > tsoffset ;
@ -6332,7 +6332,8 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
tcp_clear_options ( & tmp_opt ) ;
tmp_opt . mss_clamp = af_ops - > mss_clamp ;
tmp_opt . user_mss = tp - > rx_opt . user_mss ;
tcp_parse_options ( skb , & tmp_opt , 0 , want_cookie ? NULL : & foc ) ;
tcp_parse_options ( sock_net ( sk ) , skb , & tmp_opt , 0 ,
want_cookie ? NULL : & foc ) ;
if ( want_cookie & & ! tmp_opt . saw_tstamp )
tcp_clear_options ( & tmp_opt ) ;
@ -6350,7 +6351,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
goto drop_and_free ;
if ( tmp_opt . tstamp_ok )
tcp_rsk ( req ) - > ts_off = af_ops - > init_ts_off ( skb ) ;
tcp_rsk ( req ) - > ts_off = af_ops - > init_ts_off ( net , skb ) ;
if ( ! want_cookie & & ! isn ) {
/* Kill the following clause, if you dislike this way. */