|
@@ -127,65 +127,95 @@ DATARMNET8e3721c47d,DATARMNETfb0677cc3c);return DATARMNET63b1a086d5;}}
|
|
|
DATARMNET63b1a086d5=DATARMNETba919c78e5(DATARMNET3396919a68);
|
|
|
spin_unlock_irqrestore(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);if(
|
|
|
DATARMNET63b1a086d5)DATARMNET11a5f0fd38(DATARMNET63b1a086d5,DATARMNET543491eb0f,
|
|
|
-DATARMNETd147c14c0e);return DATARMNET63b1a086d5;}static void DATARMNET31a7673e56
|
|
|
-(struct DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct sk_buff*
|
|
|
-DATARMNET543491eb0f)__must_hold(RCU){struct sock*sk;if(DATARMNET543491eb0f->sk){
|
|
|
-sk=DATARMNET543491eb0f->sk;if(sk_fullsock(sk)){if(sk->sk_state==TCP_ESTABLISHED
|
|
|
-&&!sock_flag(sk,SOCK_DEAD)&&!sk_unhashed(sk)&&sk->sk_shutdown!=SHUTDOWN_MASK){
|
|
|
-inet_csk(sk)->icsk_ack.pending|=ICSK_ACK_NOW;DATARMNET63b1a086d5->
|
|
|
-DATARMNETb8fc35ed64++;DATARMNET32b91c8ae6(DATARMNET74f0a28fec);}}return;}else{
|
|
|
-struct rmnet_skb_cb*DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);
|
|
|
-DATARMNET32b91c8ae6(DATARMNETb03f9571a3);DATARMNET63b1a086d5->
|
|
|
-DATARMNET55056146f6=true;DATARMNET1ec4882bf7->tethered=true;return;}}static u32
|
|
|
-DATARMNET62fb576113(struct sk_buff*DATARMNET543491eb0f){struct tcphdr*
|
|
|
-DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);return DATARMNET543491eb0f->len
|
|
|
--((u8*)DATARMNET668416551c-DATARMNET543491eb0f->data)-DATARMNET668416551c->doff*
|
|
|
-(0xd11+230-0xdf3);}static void DATARMNET55fda9e01e(struct DATARMNETddbc1e5435*
|
|
|
-DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)
|
|
|
-__must_hold(RCU){struct rmnet_skb_cb*DATARMNET1ec4882bf7=RMNET_SKB_CB(
|
|
|
-DATARMNET543491eb0f);struct tcphdr*DATARMNET668416551c=tcp_hdr(
|
|
|
+DATARMNETd147c14c0e);return DATARMNET63b1a086d5;}static struct sock*
|
|
|
+DATARMNETc0b5d624ae(struct DATARMNET4b40fe9cd4*DATARMNET3396919a68,struct
|
|
|
+net_device*DATARMNETc96400be1e){struct net*net=dev_net(DATARMNETc96400be1e);if(
|
|
|
+DATARMNET3396919a68->DATARMNET0d956cc77a==(0xd11+230-0xdf3))return
|
|
|
+inet_lookup_established(net,&tcp_hashinfo,DATARMNET3396919a68->
|
|
|
+DATARMNETdfe430c2d6,DATARMNET3396919a68->DATARMNET08e913477e,DATARMNET3396919a68
|
|
|
+->DATARMNET2cb607d686,DATARMNET3396919a68->DATARMNETda7f7fa492,
|
|
|
+DATARMNETc96400be1e->ifindex);return __inet6_lookup_established(net,&
|
|
|
+tcp_hashinfo,&DATARMNET3396919a68->DATARMNET815cbb4bf5,DATARMNET3396919a68->
|
|
|
+DATARMNET08e913477e,&DATARMNET3396919a68->DATARMNETc3f31215b7,ntohs(
|
|
|
+DATARMNET3396919a68->DATARMNETda7f7fa492),DATARMNETc96400be1e->ifindex,
|
|
|
+(0xd2d+202-0xdf7));}static void DATARMNET31a7673e56(struct DATARMNETddbc1e5435*
|
|
|
+DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f)__must_hold(RCU){struct
|
|
|
+sock*sk;if(DATARMNET543491eb0f->sk){sk=DATARMNET543491eb0f->sk;if(sk_fullsock(sk
|
|
|
+)){if(sk->sk_state==TCP_ESTABLISHED&&!sock_flag(sk,SOCK_DEAD)&&!sk_unhashed(sk)
|
|
|
+&&sk->sk_shutdown!=SHUTDOWN_MASK){inet_csk(sk)->icsk_ack.pending|=ICSK_ACK_NOW;
|
|
|
+DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;DATARMNET32b91c8ae6(
|
|
|
+DATARMNET74f0a28fec);}}return;}sk=DATARMNETc0b5d624ae(&DATARMNET63b1a086d5->
|
|
|
+DATARMNET54338da2ff,DATARMNET543491eb0f->dev);if(!sk){struct rmnet_skb_cb*
|
|
|
+DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET32b91c8ae6(
|
|
|
+DATARMNETb03f9571a3);DATARMNET63b1a086d5->DATARMNET55056146f6=true;
|
|
|
+DATARMNET1ec4882bf7->tethered=true;return;}if(sk_fullsock(sk)){bh_lock_sock(sk);
|
|
|
+if(sk->sk_state==TCP_ESTABLISHED&&!sock_flag(sk,SOCK_DEAD)&&!sk_unhashed(sk)&&sk
|
|
|
+->sk_shutdown!=SHUTDOWN_MASK){inet_csk(sk)->icsk_ack.pending|=ICSK_ACK_NOW;
|
|
|
+inet_csk_schedule_ack(sk);DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;
|
|
|
+DATARMNET32b91c8ae6(DATARMNET53c8cfb28e);}bh_unlock_sock(sk);}sock_gen_put(sk);}
|
|
|
+static u32 DATARMNET62fb576113(struct sk_buff*DATARMNET543491eb0f){struct tcphdr
|
|
|
+*DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);return DATARMNET543491eb0f->
|
|
|
+len-((u8*)DATARMNET668416551c-DATARMNET543491eb0f->data)-DATARMNET668416551c->
|
|
|
+doff*(0xd11+230-0xdf3);}static void DATARMNET55fda9e01e(struct
|
|
|
+DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f,bool
|
|
|
+DATARMNETd147c14c0e)__must_hold(RCU){struct tcphdr*DATARMNET668416551c=tcp_hdr(
|
|
|
DATARMNET543491eb0f);u32 DATARMNET26945497d8=ntohl(DATARMNET668416551c->seq);u32
|
|
|
DATARMNETb1b0ee1b2d=ntohl(DATARMNET668416551c->ack_seq);u32 DATARMNETb6ff6d25f8
|
|
|
=READ_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7);u32 DATARMNET91c1d5c029=
|
|
|
READ_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab);u32 DATARMNET9445bc443c=
|
|
|
READ_ONCE(DATARMNET63b1a086d5->DATARMNET9a57846b4e);DATARMNET63b1a086d5->
|
|
|
-DATARMNET763f2e5fac=jiffies;if(DATARMNET63b1a086d5->DATARMNET55056146f6){
|
|
|
-DATARMNET1ec4882bf7->tethered=true;return;}if(DATARMNETd147c14c0e){if(after(
|
|
|
-DATARMNETb1b0ee1b2d,DATARMNET91c1d5c029)){u32 DATARMNET4e557c82d6=
|
|
|
-DATARMNETb6ff6d25f8-DATARMNETb1b0ee1b2d;if(DATARMNET4e557c82d6>
|
|
|
-DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,DATARMNET543491eb0f)
|
|
|
-;WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab,DATARMNETb1b0ee1b2d);}}else
|
|
|
-{u32 DATARMNET4e557c82d6=DATARMNETb6ff6d25f8-DATARMNET91c1d5c029;if(after(
|
|
|
-DATARMNET26945497d8,DATARMNETb6ff6d25f8)){DATARMNET4e557c82d6=
|
|
|
-DATARMNET26945497d8-DATARMNET91c1d5c029;DATARMNET4e557c82d6+=DATARMNET62fb576113
|
|
|
-(DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7,
|
|
|
-DATARMNET26945497d8);}DATARMNET1ec4882bf7->bif=DATARMNET4e557c82d6;
|
|
|
-DATARMNET1ec4882bf7->ack_thresh=DATARMNET9445bc443c;DATARMNET1ec4882bf7->
|
|
|
-ack_forced=DATARMNET63b1a086d5->DATARMNETb8fc35ed64;}}void DATARMNET9250714999(
|
|
|
-struct sk_buff*DATARMNET543491eb0f){struct DATARMNET4b40fe9cd4
|
|
|
-DATARMNET3396919a68={};struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;struct
|
|
|
-tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;if(!
|
|
|
-skb_transport_header_was_set(DATARMNET543491eb0f)||DATARMNET543491eb0f->
|
|
|
-ip_summed==CHECKSUM_NONE)return;DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f)
|
|
|
-;if(DATARMNET668416551c->syn)return;DATARMNETd660a1a629=DATARMNET62fb576113(
|
|
|
-DATARMNET543491eb0f);if(!DATARMNETd660a1a629&&DATARMNET668416551c->ack)return;
|
|
|
-DATARMNET3396919a68.DATARMNET08e913477e=DATARMNET668416551c->source;
|
|
|
-DATARMNET3396919a68.DATARMNETda7f7fa492=DATARMNET668416551c->dest;if(
|
|
|
-DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9
|
|
|
-=ip_hdr(DATARMNET543491eb0f);DATARMNET3396919a68.DATARMNETdfe430c2d6=
|
|
|
-DATARMNET86f1f2cdc9->saddr;DATARMNET3396919a68.DATARMNET2cb607d686=
|
|
|
-DATARMNET86f1f2cdc9->daddr;DATARMNET3396919a68.DATARMNET0d956cc77a=
|
|
|
-(0xd11+230-0xdf3);}else{struct ipv6hdr*DATARMNETbf55123e5b=ipv6_hdr(
|
|
|
-DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.DATARMNET815cbb4bf5,&
|
|
|
-DATARMNETbf55123e5b->saddr,sizeof(DATARMNETbf55123e5b->saddr));memcpy(&
|
|
|
-DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->daddr,sizeof(
|
|
|
-DATARMNETbf55123e5b->daddr));DATARMNET3396919a68.DATARMNET0d956cc77a=
|
|
|
-(0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=DATARMNET9f0aaf07cc(&
|
|
|
-DATARMNET3396919a68,DATARMNET543491eb0f,false);if(DATARMNET63b1a086d5){if(likely
|
|
|
-(!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)))DATARMNET55fda9e01e(
|
|
|
-DATARMNET63b1a086d5,DATARMNET543491eb0f,false);}rcu_read_unlock();}void
|
|
|
-DATARMNET9d574e64b1(struct sk_buff*DATARMNET543491eb0f){struct
|
|
|
+DATARMNET763f2e5fac=jiffies;if(DATARMNET63b1a086d5->DATARMNET55056146f6)return;
|
|
|
+if(DATARMNETd147c14c0e){if(after(DATARMNETb1b0ee1b2d,DATARMNET91c1d5c029)){u32
|
|
|
+DATARMNET4e557c82d6=(0xd2d+202-0xdf7);if(DATARMNETb1b0ee1b2d>DATARMNETb6ff6d25f8
|
|
|
+)DATARMNET4e557c82d6=DATARMNETb1b0ee1b2d-DATARMNETb6ff6d25f8;if(
|
|
|
+DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,
|
|
|
+DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab,
|
|
|
+DATARMNETb1b0ee1b2d);}}else{u32 DATARMNET4e557c82d6;if(after(DATARMNET26945497d8
|
|
|
+,DATARMNETb6ff6d25f8)){DATARMNET4e557c82d6=DATARMNET26945497d8-
|
|
|
+DATARMNET91c1d5c029;DATARMNET4e557c82d6+=DATARMNET62fb576113(DATARMNET543491eb0f
|
|
|
+);if(DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(
|
|
|
+DATARMNET63b1a086d5,DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->
|
|
|
+DATARMNETfef3675ce7,DATARMNET26945497d8);}}}static bool DATARMNET6670717310(
|
|
|
+struct sk_buff*DATARMNET543491eb0f,struct DATARMNET4b40fe9cd4*
|
|
|
+DATARMNET3396919a68){struct tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;
|
|
|
+if(!skb_transport_header_was_set(DATARMNET543491eb0f)||DATARMNET543491eb0f->
|
|
|
+ip_summed==CHECKSUM_NONE)return false;DATARMNET668416551c=tcp_hdr(
|
|
|
+DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return false;
|
|
|
+DATARMNETd660a1a629=DATARMNET62fb576113(DATARMNET543491eb0f);if(!
|
|
|
+DATARMNETd660a1a629&&DATARMNET668416551c->ack)return false;DATARMNET3396919a68->
|
|
|
+DATARMNET08e913477e=DATARMNET668416551c->source;DATARMNET3396919a68->
|
|
|
+DATARMNETda7f7fa492=DATARMNET668416551c->dest;if(DATARMNET543491eb0f->protocol==
|
|
|
+htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);
|
|
|
+DATARMNET3396919a68->DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->saddr;
|
|
|
+DATARMNET3396919a68->DATARMNET2cb607d686=DATARMNET86f1f2cdc9->daddr;
|
|
|
+DATARMNET3396919a68->DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*
|
|
|
+DATARMNETbf55123e5b=ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68->
|
|
|
+DATARMNET815cbb4bf5,&DATARMNETbf55123e5b->saddr,sizeof(DATARMNETbf55123e5b->
|
|
|
+saddr));memcpy(&DATARMNET3396919a68->DATARMNETc3f31215b7,&DATARMNETbf55123e5b->
|
|
|
+daddr,sizeof(DATARMNETbf55123e5b->daddr));DATARMNET3396919a68->
|
|
|
+DATARMNET0d956cc77a=(0xd03+244-0xdf1);}return true;}void DATARMNET9250714999(
|
|
|
+struct sk_buff*DATARMNET543491eb0f){struct rmnet_skb_cb*DATARMNET1ec4882bf7=
|
|
|
+RMNET_SKB_CB(DATARMNET543491eb0f);struct DATARMNET4b40fe9cd4 DATARMNET3396919a68
|
|
|
+={};struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;if(!DATARMNET6670717310(
|
|
|
+DATARMNET543491eb0f,&DATARMNET3396919a68))return;rcu_read_lock();
|
|
|
+DATARMNET63b1a086d5=DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f
|
|
|
+,false);if(!DATARMNET63b1a086d5)goto DATARMNETbf4095f79e;if(unlikely(
|
|
|
+DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)))goto DATARMNETbf4095f79e;if(
|
|
|
+DATARMNET63b1a086d5->DATARMNET55056146f6){DATARMNET1ec4882bf7->tethered=true;}
|
|
|
+else{u32 DATARMNET4e557c82d6=READ_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7)
|
|
|
+-READ_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab);DATARMNET1ec4882bf7->bif=
|
|
|
+DATARMNET4e557c82d6;DATARMNET1ec4882bf7->ack_thresh=READ_ONCE(
|
|
|
+DATARMNET63b1a086d5->DATARMNET9a57846b4e);DATARMNET1ec4882bf7->ack_forced=
|
|
|
+DATARMNET63b1a086d5->DATARMNETb8fc35ed64;}DATARMNETbf4095f79e:rcu_read_unlock();
|
|
|
+}void DATARMNETd8fdde8978(struct sk_buff*DATARMNET543491eb0f){struct
|
|
|
DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct DATARMNETddbc1e5435*
|
|
|
+DATARMNET63b1a086d5;if(!DATARMNET6670717310(DATARMNET543491eb0f,&
|
|
|
+DATARMNET3396919a68))return;rcu_read_lock();DATARMNET63b1a086d5=
|
|
|
+DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f,false);if(
|
|
|
+DATARMNET63b1a086d5){if(likely(!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)
|
|
|
+))DATARMNET55fda9e01e(DATARMNET63b1a086d5,DATARMNET543491eb0f,false);}
|
|
|
+rcu_read_unlock();}void DATARMNET9d574e64b1(struct sk_buff*DATARMNET543491eb0f){
|
|
|
+struct DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct DATARMNETddbc1e5435*
|
|
|
DATARMNET63b1a086d5;struct tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;if
|
|
|
(!skb_transport_header_was_set(DATARMNET543491eb0f))return;DATARMNET668416551c=
|
|
|
tcp_hdr(DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return;
|