|
@@ -11,6 +11,7 @@
|
|
|
#include <net/netlink.h>
|
|
|
#include <net/ip.h>
|
|
|
#include <net/ipv6.h>
|
|
|
+#include <net/tcp.h>
|
|
|
#include <linux/rcupdate.h>
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/rculist.h>
|
|
@@ -233,12 +234,108 @@ unregister_netdevice_notifier(&DATARMNETa1726000d8);if(!DATARMNET268a8314cf)
|
|
|
DATARMNET30500ba48c[(0xd2d+202-0xdf7)]=(0xd2d+202-0xdf7);return
|
|
|
DATARMNET268a8314cf;}static void DATARMNETbb4efa5b3d(void){DATARMNET116f9a46aa()
|
|
|
;DATARMNETfbd1701415=(0xd2d+202-0xdf7);DATARMNET8c0e010dfb();DATARMNETe5b03fe375
|
|
|
-();DATARMNETad43e44c7e();}int DATARMNET4899053671(struct sk_buff*
|
|
|
+();DATARMNETad43e44c7e();}static int DATARMNET38ebe8f319(struct sk_buff*
|
|
|
+DATARMNET543491eb0f,int DATARMNET1faf88208b){if(!pskb_may_pull(
|
|
|
+DATARMNET543491eb0f,DATARMNET1faf88208b))return-ENOMEM;if(!skb_cloned(
|
|
|
+DATARMNET543491eb0f)||skb_clone_writable(DATARMNET543491eb0f,DATARMNET1faf88208b
|
|
|
+))return(0xd2d+202-0xdf7);return pskb_expand_head(DATARMNET543491eb0f,
|
|
|
+(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),GFP_ATOMIC);}static void DATARMNET9a8d756527
|
|
|
+(__sum16*DATARMNETc2284e5688,struct sk_buff*DATARMNET543491eb0f,__be32
|
|
|
+DATARMNET9080427d4e,__be32 DATARMNETc0e620c987,bool DATARMNETcb0345b337){if(
|
|
|
+DATARMNET543491eb0f->ip_summed!=CHECKSUM_PARTIAL){csum_replace4(
|
|
|
+DATARMNETc2284e5688,DATARMNET9080427d4e,DATARMNETc0e620c987);if(
|
|
|
+DATARMNET543491eb0f->ip_summed==CHECKSUM_COMPLETE&&DATARMNETcb0345b337){
|
|
|
+DATARMNET543491eb0f->csum=csum_sub(~(DATARMNET543491eb0f->csum),(__wsum)
|
|
|
+DATARMNET9080427d4e);DATARMNET543491eb0f->csum=~csum_add(DATARMNET543491eb0f->
|
|
|
+csum,(__wsum)DATARMNETc0e620c987);}}else if(DATARMNETcb0345b337){__wsum
|
|
|
+DATARMNET0386f6f82a=csum_unfold(*DATARMNETc2284e5688);DATARMNET0386f6f82a=
|
|
|
+csum_sub(DATARMNET0386f6f82a,(__wsum)DATARMNET9080427d4e);DATARMNET0386f6f82a=
|
|
|
+csum_add(DATARMNET0386f6f82a,(__wsum)DATARMNETc0e620c987);*DATARMNETc2284e5688=~
|
|
|
+csum_fold(DATARMNET0386f6f82a);}}static void DATARMNETc03853e26d(__sum16*
|
|
|
+DATARMNETc2284e5688,struct sk_buff*DATARMNET543491eb0f,__be16
|
|
|
+DATARMNET9080427d4e,__be16 DATARMNETc0e620c987,bool DATARMNETcb0345b337){
|
|
|
+DATARMNET9a8d756527(DATARMNETc2284e5688,DATARMNET543491eb0f,(__be32)
|
|
|
+DATARMNET9080427d4e,(__be32)DATARMNETc0e620c987,DATARMNETcb0345b337);}static
|
|
|
+unsigned int DATARMNET7060ca9a47(u8*DATARMNET54fdee4fda,unsigned int
|
|
|
+DATARMNET6396f657b3){if(DATARMNET54fdee4fda[DATARMNET6396f657b3]==TCPOPT_EOL||
|
|
|
+DATARMNET54fdee4fda[DATARMNET6396f657b3]==TCPOPT_NOP||!DATARMNET54fdee4fda[
|
|
|
+DATARMNET6396f657b3+(0xd26+209-0xdf6)])return(0xd26+209-0xdf6);return
|
|
|
+DATARMNET54fdee4fda[DATARMNET6396f657b3+(0xd26+209-0xdf6)];}void
|
|
|
+DATARMNET7ca470d54b(struct sk_buff*DATARMNET543491eb0f,u32 DATARMNET1464100e7a){
|
|
|
+struct tcphdr*DATARMNET668416551c;u8 DATARMNET630b15102e[(0xf07+1090-0x130d)];u8
|
|
|
+*DATARMNET54fdee4fda;__be16 DATARMNETdda9f3dd51=htons((0xef7+3481-0x181c));u16
|
|
|
+DATARMNET611d08d671;u16 DATARMNET7fa3427233;unsigned int DATARMNETefc9df3df2;
|
|
|
+__be32 DATARMNET572f0d1999;u8 DATARMNET0d956cc77a;if(DATARMNET543491eb0f->
|
|
|
+protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
|
|
|
+DATARMNET0d956cc77a=(0xd11+230-0xdf3);DATARMNET86f1f2cdc9=skb_header_pointer(
|
|
|
+DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),&
|
|
|
+DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9)goto DATARMNET268a8314cf;if(
|
|
|
+DATARMNET86f1f2cdc9->protocol!=IPPROTO_TCP)goto DATARMNETed6aa0a77f;
|
|
|
+DATARMNET611d08d671=DATARMNET86f1f2cdc9->ihl*(0xd11+230-0xdf3);}else if(
|
|
|
+DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
|
|
|
+DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;__be16 frag_off;u8 DATARMNETa8d8445982;
|
|
|
+DATARMNET0d956cc77a=(0xd03+244-0xdf1);DATARMNETbf55123e5b=skb_header_pointer(
|
|
|
+DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNETbf55123e5b),&
|
|
|
+DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto DATARMNET268a8314cf;
|
|
|
+DATARMNETa8d8445982=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
|
|
|
+ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
|
|
|
+DATARMNETa8d8445982,&frag_off);if(DATARMNET611d08d671<(0xd2d+202-0xdf7))goto
|
|
|
+DATARMNET268a8314cf;if(DATARMNETa8d8445982!=IPPROTO_TCP)goto DATARMNETed6aa0a77f
|
|
|
+;}else{goto DATARMNET268a8314cf;}DATARMNET668416551c=skb_header_pointer(
|
|
|
+DATARMNET543491eb0f,DATARMNET611d08d671,sizeof(*DATARMNET668416551c),&
|
|
|
+DATARMNET630b15102e);if(!DATARMNET668416551c)goto DATARMNET268a8314cf;if(!(
|
|
|
+tcp_flag_word(DATARMNET668416551c)&DATARMNET1464100e7a))goto DATARMNETed6aa0a77f
|
|
|
+;DATARMNET7fa3427233=DATARMNET668416551c->doff*(0xd11+230-0xdf3);if(
|
|
|
+DATARMNET38ebe8f319(DATARMNET543491eb0f,DATARMNET611d08d671+DATARMNET7fa3427233)
|
|
|
+)goto DATARMNET268a8314cf;DATARMNET668416551c=skb_header_pointer(
|
|
|
+DATARMNET543491eb0f,DATARMNET611d08d671,DATARMNET7fa3427233,&DATARMNET630b15102e
|
|
|
+);if(!DATARMNET668416551c)goto DATARMNET268a8314cf;DATARMNET54fdee4fda=(u8*)
|
|
|
+DATARMNET668416551c;for(DATARMNETefc9df3df2=sizeof(*DATARMNET668416551c);
|
|
|
+DATARMNETefc9df3df2<DATARMNET7fa3427233;DATARMNETefc9df3df2+=DATARMNET7060ca9a47
|
|
|
+(DATARMNET54fdee4fda,DATARMNETefc9df3df2)){__be16*DATARMNETb3032fac16;if(
|
|
|
+DATARMNET54fdee4fda[DATARMNETefc9df3df2]!=TCPOPT_MSS||DATARMNET54fdee4fda[
|
|
|
+DATARMNETefc9df3df2+(0xd26+209-0xdf6)]!=TCPOLEN_MSS)continue;DATARMNETb3032fac16
|
|
|
+=(__be16*)(&DATARMNET54fdee4fda[DATARMNETefc9df3df2+(0xd1f+216-0xdf5)]);if(*
|
|
|
+DATARMNETb3032fac16<=DATARMNETdda9f3dd51)goto DATARMNETed6aa0a77f;
|
|
|
+DATARMNETc03853e26d(&DATARMNET668416551c->check,DATARMNET543491eb0f,*
|
|
|
+DATARMNETb3032fac16,DATARMNETdda9f3dd51,false);*DATARMNETb3032fac16=
|
|
|
+DATARMNETdda9f3dd51;DATARMNET5ca94dbc3c(DATARMNETef2af4f071);return;}if(
|
|
|
+DATARMNET543491eb0f->len>DATARMNET611d08d671+DATARMNET7fa3427233||
|
|
|
+DATARMNET7fa3427233>=(0xf07+1090-0x130d))goto DATARMNETed6aa0a77f;if(
|
|
|
+skb_tailroom(DATARMNET543491eb0f)<TCPOLEN_MSS){if(pskb_expand_head(
|
|
|
+DATARMNET543491eb0f,(0xd2d+202-0xdf7),TCPOLEN_MSS-skb_tailroom(
|
|
|
+DATARMNET543491eb0f),GFP_ATOMIC))goto DATARMNET268a8314cf;DATARMNET668416551c=
|
|
|
+skb_header_pointer(DATARMNET543491eb0f,DATARMNET611d08d671,DATARMNET7fa3427233,&
|
|
|
+DATARMNET630b15102e);if(!DATARMNET668416551c)goto DATARMNET268a8314cf;}
|
|
|
+DATARMNETc03853e26d(&DATARMNET668416551c->check,DATARMNET543491eb0f,htons(
|
|
|
+DATARMNET543491eb0f->len-DATARMNET611d08d671),htons(DATARMNET543491eb0f->len-
|
|
|
+DATARMNET611d08d671+TCPOLEN_MSS),true);DATARMNET54fdee4fda=skb_put(
|
|
|
+DATARMNET543491eb0f,TCPOLEN_MSS);if(DATARMNET0d956cc77a==(0xd11+230-0xdf3))
|
|
|
+DATARMNETdda9f3dd51=htons(min_t(u16,ntohs(DATARMNETdda9f3dd51),
|
|
|
+(0x545+2434-0xcaf)));else DATARMNETdda9f3dd51=htons(min_t(u16,ntohs(
|
|
|
+DATARMNETdda9f3dd51),(0xbf7+4058-0x170d)));DATARMNET54fdee4fda[(0xd2d+202-0xdf7)
|
|
|
+]=TCPOPT_MSS;DATARMNET54fdee4fda[(0xd26+209-0xdf6)]=TCPOLEN_MSS;*((__be16*)(
|
|
|
+DATARMNET54fdee4fda+(0xd1f+216-0xdf5)))=DATARMNETdda9f3dd51;DATARMNET9a8d756527(
|
|
|
+&DATARMNET668416551c->check,DATARMNET543491eb0f,(0xd2d+202-0xdf7),*((__be32*)
|
|
|
+DATARMNET54fdee4fda),false);DATARMNET572f0d1999=tcp_flag_word(
|
|
|
+DATARMNET668416551c);DATARMNET668416551c->doff++;DATARMNET9a8d756527(&
|
|
|
+DATARMNET668416551c->check,DATARMNET543491eb0f,DATARMNET572f0d1999,tcp_flag_word
|
|
|
+(DATARMNET668416551c),false);if(DATARMNET0d956cc77a==(0xd11+230-0xdf3)){struct
|
|
|
+iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);csum_replace2(&
|
|
|
+DATARMNET86f1f2cdc9->check,DATARMNET86f1f2cdc9->tot_len,htons(
|
|
|
+DATARMNET543491eb0f->len));DATARMNET86f1f2cdc9->tot_len=htons(
|
|
|
+DATARMNET543491eb0f->len);}else{struct ipv6hdr*DATARMNETbf55123e5b=ipv6_hdr(
|
|
|
+DATARMNET543491eb0f);DATARMNETbf55123e5b->payload_len=htons(ntohs(
|
|
|
+DATARMNETbf55123e5b->payload_len)+TCPOLEN_MSS);}DATARMNET5ca94dbc3c(
|
|
|
+DATARMNETef2af4f071);return;DATARMNETed6aa0a77f:DATARMNET5ca94dbc3c(
|
|
|
+DATARMNETebc1b87b7d);return;DATARMNET268a8314cf:DATARMNET5ca94dbc3c(
|
|
|
+DATARMNET21bdbe6a27);return;}int DATARMNET4899053671(struct sk_buff*
|
|
|
DATARMNET543491eb0f,struct DATARMNET8d3c2559ca*DATARMNET54338da2ff){struct
|
|
|
net_device*DATARMNET00dcb79bc4;DATARMNET00dcb79bc4=READ_ONCE(DATARMNET54338da2ff
|
|
|
->DATARMNET57656f6f2f);if(!DATARMNET00dcb79bc4){DATARMNET5ca94dbc3c(
|
|
|
-DATARMNET591885a019);return-ENODEV;}DATARMNET543491eb0f->dev=DATARMNET00dcb79bc4
|
|
|
-;dev_queue_xmit(DATARMNET543491eb0f);DATARMNET5ca94dbc3c(DATARMNETf4c2a83526);
|
|
|
+DATARMNET591885a019);return-ENODEV;}DATARMNET7ca470d54b(DATARMNET543491eb0f,
|
|
|
+TCP_FLAG_SYN|TCP_FLAG_ACK);DATARMNET543491eb0f->dev=DATARMNET00dcb79bc4;
|
|
|
+dev_queue_xmit(DATARMNET543491eb0f);DATARMNET5ca94dbc3c(DATARMNETf4c2a83526);
|
|
|
return(0xd2d+202-0xdf7);}bool DATARMNET4eafcdee07(struct DATARMNETb89ecedefc*
|
|
|
DATARMNET3396919a68)__must_hold(RCU){struct DATARMNET745f724205*
|
|
|
DATARMNET63b1a086d5;hash_for_each_possible_rcu(DATARMNET1903907456,
|