diff --git a/wlan/rmnet_wlan_fragment.c b/wlan/rmnet_wlan_fragment.c index 504cc5b278..ba65ba739c 100644 --- a/wlan/rmnet_wlan_fragment.c +++ b/wlan/rmnet_wlan_fragment.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. * * RMNET WLAN fragment handler framework * @@ -14,65 +14,72 @@ #include #include #include -#include +#include #include "rmnet_wlan.h" #include "rmnet_wlan_stats.h" #include "rmnet_wlan_fragment.h" #define DATARMNET598d70a086 ((0xeb7+1158-0x132d)) #define DATARMNETeaee3af609 (const_ilog2(DATARMNET598d70a086)) -#define DATARMNET63a285d479 (110000000) -#define DATARMNETb7cc384fbe (10000000) +#define DATARMNET63a285d479 ((0xeb7+698-0x110d)) +#define DATARMNETdbb408ba5d ((0xef7+1112-0x131d)) struct DATARMNETdadb4e2c65{union{__be32 DATARMNETdfe430c2d6;struct in6_addr DATARMNET815cbb4bf5;};union{__be32 DATARMNET2cb607d686;struct in6_addr DATARMNETc3f31215b7;};__be32 id;u16 DATARMNET611d08d671;u16 DATARMNETb65c469a15; u8 DATARMNET0d956cc77a;};struct DATARMNET6f3b954709{struct hlist_node DATARMNETe8608dd267;spinlock_t DATARMNET94b1f9ee09;struct list_head -DATARMNET0f34bf3ea9;struct rcu_head DATARMNET28bfe9e6ad;struct hrtimer -DATARMNET9f31ce5d2d;struct DATARMNETdadb4e2c65 DATARMNET54338da2ff;struct -DATARMNET8d3c2559ca*DATARMNET7ed5754a5c;};static DEFINE_SPINLOCK( -DATARMNET531b038fcd);static DEFINE_HASHTABLE(DATARMNET6e79f38051, -DATARMNETeaee3af609);static int DATARMNET24669a931d(const struct sk_buff* -DATARMNET543491eb0f,unsigned int*DATARMNETb65c469a15,int DATARMNETbfd7eb99fe, -unsigned short*DATARMNET0823b5e89c,int*DATARMNETfb0677cc3c){unsigned int -DATARMNETab6f68a65c=skb_network_offset(DATARMNET543491eb0f)+sizeof(struct -ipv6hdr);u8 nexthdr=ipv6_hdr(DATARMNET543491eb0f)->nexthdr;bool -DATARMNET1034358542;if(DATARMNET0823b5e89c)*DATARMNET0823b5e89c= -(0xd2d+202-0xdf7);if(*DATARMNETb65c469a15){struct ipv6hdr DATARMNET982faca395,* -DATARMNETc46d75f0b8;DATARMNETc46d75f0b8=skb_header_pointer(DATARMNET543491eb0f,* -DATARMNETb65c469a15,sizeof(DATARMNET982faca395),&DATARMNET982faca395);if(! -DATARMNETc46d75f0b8||(DATARMNETc46d75f0b8->version!=(0xd03+244-0xdf1)))return- -EBADMSG;DATARMNETab6f68a65c=*DATARMNETb65c469a15+sizeof(struct ipv6hdr);nexthdr= -DATARMNETc46d75f0b8->nexthdr;}do{struct ipv6_opt_hdr DATARMNETb18a0d17a5,* -DATARMNET7c56b76ea0;unsigned int DATARMNET4593c3f2c2;DATARMNET1034358542=( -nexthdr==DATARMNETbfd7eb99fe);if((!ipv6_ext_hdr(nexthdr))||nexthdr==NEXTHDR_NONE -){if(DATARMNETbfd7eb99fe<(0xd2d+202-0xdf7)||DATARMNET1034358542)break;return- -ENOENT;}DATARMNET7c56b76ea0=skb_header_pointer(DATARMNET543491eb0f, -DATARMNETab6f68a65c,sizeof(DATARMNETb18a0d17a5),&DATARMNETb18a0d17a5);if(! -DATARMNET7c56b76ea0)return-EBADMSG;if(nexthdr==NEXTHDR_ROUTING){struct -ipv6_rt_hdr DATARMNET942c8f7153,*DATARMNETb2650cb3cb;DATARMNETb2650cb3cb= +DATARMNET0f34bf3ea9;struct rcu_head DATARMNET28bfe9e6ad;struct +DATARMNETdadb4e2c65 DATARMNET54338da2ff;struct DATARMNET8d3c2559ca* +DATARMNET7ed5754a5c;unsigned long DATARMNET763f2e5fac;bool DATARMNET1717afebc7;} +;struct DATARMNET2f26f1d597{struct delayed_work DATARMNET190b4452e8;bool +DATARMNETcd94e0d3c7;};static DEFINE_SPINLOCK(DATARMNET531b038fcd);static +DEFINE_HASHTABLE(DATARMNET6e79f38051,DATARMNETeaee3af609);static u64 +DATARMNETdef6cfba1c;static struct DATARMNET2f26f1d597 DATARMNETa41953a37b;static + int DATARMNET24669a931d(const struct sk_buff*DATARMNET543491eb0f,unsigned int* +DATARMNETb65c469a15,int DATARMNETbfd7eb99fe,unsigned short*DATARMNET0823b5e89c, +int*DATARMNETfb0677cc3c){unsigned int DATARMNETab6f68a65c=skb_network_offset( +DATARMNET543491eb0f)+sizeof(struct ipv6hdr);u8 nexthdr=ipv6_hdr( +DATARMNET543491eb0f)->nexthdr;bool DATARMNET1034358542;if(DATARMNET0823b5e89c)* +DATARMNET0823b5e89c=(0xd2d+202-0xdf7);if(*DATARMNETb65c469a15){struct ipv6hdr +DATARMNET982faca395,*DATARMNETc46d75f0b8;DATARMNETc46d75f0b8=skb_header_pointer( +DATARMNET543491eb0f,*DATARMNETb65c469a15,sizeof(DATARMNET982faca395),& +DATARMNET982faca395);if(!DATARMNETc46d75f0b8||(DATARMNETc46d75f0b8->version!= +(0xd03+244-0xdf1)))return-EBADMSG;DATARMNETab6f68a65c=*DATARMNETb65c469a15+ +sizeof(struct ipv6hdr);nexthdr=DATARMNETc46d75f0b8->nexthdr;}do{struct +ipv6_opt_hdr DATARMNETb18a0d17a5,*DATARMNET7c56b76ea0;unsigned int +DATARMNET4593c3f2c2;DATARMNET1034358542=(nexthdr==DATARMNETbfd7eb99fe);if((! +ipv6_ext_hdr(nexthdr))||nexthdr==NEXTHDR_NONE){if(DATARMNETbfd7eb99fe< +(0xd2d+202-0xdf7)||DATARMNET1034358542)break;return-ENOENT;}DATARMNET7c56b76ea0= skb_header_pointer(DATARMNET543491eb0f,DATARMNETab6f68a65c,sizeof( -DATARMNET942c8f7153),&DATARMNET942c8f7153);if(!DATARMNETb2650cb3cb)return- -EBADMSG;if(DATARMNETfb0677cc3c&&(*DATARMNETfb0677cc3c&IP6_FH_F_SKIP_RH)&& -DATARMNETb2650cb3cb->segments_left==(0xd2d+202-0xdf7))DATARMNET1034358542=false; -}if(nexthdr==NEXTHDR_FRAGMENT){unsigned short DATARMNET3ed4d6b164;__be16* -DATARMNET748d4c9015;if(DATARMNETfb0677cc3c)*DATARMNETfb0677cc3c|=IP6_FH_F_FRAG; -DATARMNET748d4c9015=skb_header_pointer(DATARMNET543491eb0f,DATARMNETab6f68a65c+ -offsetof(struct frag_hdr,frag_off),sizeof(DATARMNET3ed4d6b164),& -DATARMNET3ed4d6b164);if(!DATARMNET748d4c9015)return-EBADMSG;DATARMNET3ed4d6b164= -ntohs(*DATARMNET748d4c9015)&~(0xcfc+267-0xe00);if(DATARMNET3ed4d6b164){if( -DATARMNETbfd7eb99fe<(0xd2d+202-0xdf7)&&((!ipv6_ext_hdr(DATARMNET7c56b76ea0-> -nexthdr))||DATARMNET7c56b76ea0->nexthdr==NEXTHDR_NONE)){if(DATARMNET0823b5e89c)* -DATARMNET0823b5e89c=DATARMNET3ed4d6b164;return DATARMNET7c56b76ea0->nexthdr;}if( -!DATARMNET1034358542)return-ENOENT;if(DATARMNET0823b5e89c)*DATARMNET0823b5e89c= -DATARMNET3ed4d6b164;break;}DATARMNET4593c3f2c2=(0xd35+210-0xdff);}else if( -nexthdr==NEXTHDR_AUTH){if(DATARMNETfb0677cc3c&&(*DATARMNETfb0677cc3c& -IP6_FH_F_AUTH)&&(DATARMNETbfd7eb99fe<(0xd2d+202-0xdf7)))break; -DATARMNET4593c3f2c2=ipv6_authlen(DATARMNET7c56b76ea0);}else DATARMNET4593c3f2c2= -ipv6_optlen(DATARMNET7c56b76ea0);if(!DATARMNET1034358542){nexthdr= -DATARMNET7c56b76ea0->nexthdr;DATARMNETab6f68a65c+=DATARMNET4593c3f2c2;}}while(! -DATARMNET1034358542);*DATARMNETb65c469a15=DATARMNETab6f68a65c;return nexthdr;} -static void DATARMNETc7c83f614f(struct DATARMNET6f3b954709*DATARMNET63b1a086d5, -bool DATARMNET7a9bcaf1a3){struct DATARMNET8d3c2559ca*DATARMNET54338da2ff;int(* +DATARMNETb18a0d17a5),&DATARMNETb18a0d17a5);if(!DATARMNET7c56b76ea0)return- +EBADMSG;if(nexthdr==NEXTHDR_ROUTING){struct ipv6_rt_hdr DATARMNET942c8f7153,* +DATARMNETb2650cb3cb;DATARMNETb2650cb3cb=skb_header_pointer(DATARMNET543491eb0f, +DATARMNETab6f68a65c,sizeof(DATARMNET942c8f7153),&DATARMNET942c8f7153);if(! +DATARMNETb2650cb3cb)return-EBADMSG;if(DATARMNETfb0677cc3c&&(*DATARMNETfb0677cc3c +&IP6_FH_F_SKIP_RH)&&DATARMNETb2650cb3cb->segments_left==(0xd2d+202-0xdf7)) +DATARMNET1034358542=false;}if(nexthdr==NEXTHDR_FRAGMENT){unsigned short +DATARMNET3ed4d6b164;__be16*DATARMNET748d4c9015;if(DATARMNETfb0677cc3c)* +DATARMNETfb0677cc3c|=IP6_FH_F_FRAG;DATARMNET748d4c9015=skb_header_pointer( +DATARMNET543491eb0f,DATARMNETab6f68a65c+offsetof(struct frag_hdr,frag_off), +sizeof(DATARMNET3ed4d6b164),&DATARMNET3ed4d6b164);if(!DATARMNET748d4c9015)return +-EBADMSG;DATARMNET3ed4d6b164=ntohs(*DATARMNET748d4c9015)&~(0xcfc+267-0xe00);if( +DATARMNET3ed4d6b164){if(DATARMNETbfd7eb99fe<(0xd2d+202-0xdf7)&&((!ipv6_ext_hdr( +DATARMNET7c56b76ea0->nexthdr))||DATARMNET7c56b76ea0->nexthdr==NEXTHDR_NONE)){if( +DATARMNET0823b5e89c)*DATARMNET0823b5e89c=DATARMNET3ed4d6b164;return +DATARMNET7c56b76ea0->nexthdr;}if(!DATARMNET1034358542)return-ENOENT;if( +DATARMNET0823b5e89c)*DATARMNET0823b5e89c=DATARMNET3ed4d6b164;break;} +DATARMNET4593c3f2c2=(0xd35+210-0xdff);}else if(nexthdr==NEXTHDR_AUTH){if( +DATARMNETfb0677cc3c&&(*DATARMNETfb0677cc3c&IP6_FH_F_AUTH)&&(DATARMNETbfd7eb99fe< +(0xd2d+202-0xdf7)))break;DATARMNET4593c3f2c2=ipv6_authlen(DATARMNET7c56b76ea0);} +else DATARMNET4593c3f2c2=ipv6_optlen(DATARMNET7c56b76ea0);if(! +DATARMNET1034358542){nexthdr=DATARMNET7c56b76ea0->nexthdr;DATARMNETab6f68a65c+= +DATARMNET4593c3f2c2;}}while(!DATARMNET1034358542);*DATARMNETb65c469a15= +DATARMNETab6f68a65c;return nexthdr;}static bool DATARMNET1bb071d045(struct +DATARMNET6f3b954709*DATARMNET63b1a086d5,unsigned long DATARMNET763f2e5fac){ +unsigned long DATARMNETc2d5c71ce1;DATARMNETc2d5c71ce1=msecs_to_jiffies( +DATARMNET63a285d479);if(DATARMNET763f2e5fac-DATARMNET63b1a086d5-> +DATARMNET763f2e5fac>DATARMNETc2d5c71ce1)return true;return false;}static void +DATARMNETc7c83f614f(struct DATARMNET6f3b954709*DATARMNET63b1a086d5,bool +DATARMNET7a9bcaf1a3){struct DATARMNET8d3c2559ca*DATARMNET54338da2ff;int(* DATARMNET456ac0e8eb)(struct sk_buff*DATARMNET543491eb0f);struct sk_buff* DATARMNET543491eb0f,*DATARMNET0386f6f82a;unsigned long DATARMNETfb0677cc3c; DATARMNET456ac0e8eb=(DATARMNET7a9bcaf1a3)?netif_receive_skb:netif_rx; @@ -87,16 +94,28 @@ DATARMNET54338da2ff)){DATARMNET248f120dd5=DATARMNETba232077da; DATARMNET456ac0e8eb(DATARMNET543491eb0f);}else{DATARMNET248f120dd5= DATARMNET7a58a5c1fc;}DATARMNET5ca94dbc3c(DATARMNET248f120dd5);} spin_unlock_irqrestore(&DATARMNET63b1a086d5->DATARMNET94b1f9ee09, -DATARMNETfb0677cc3c);}static enum hrtimer_restart DATARMNETef43eced5f(struct -hrtimer*DATARMNET6e4292679f){struct DATARMNET6f3b954709*DATARMNET63b1a086d5; -unsigned long DATARMNETfb0677cc3c;spin_lock_irqsave(&DATARMNET531b038fcd, -DATARMNETfb0677cc3c);DATARMNET63b1a086d5=container_of(DATARMNET6e4292679f,struct - DATARMNET6f3b954709,DATARMNET9f31ce5d2d);hash_del_rcu(&DATARMNET63b1a086d5-> -DATARMNETe8608dd267);DATARMNETc7c83f614f(DATARMNET63b1a086d5,false);kfree_rcu( -DATARMNET63b1a086d5,DATARMNET28bfe9e6ad);spin_unlock_irqrestore(& -DATARMNET531b038fcd,DATARMNETfb0677cc3c);DATARMNET5ca94dbc3c(DATARMNETd691057b85 -);return HRTIMER_NORESTART;}static bool DATARMNETc529ac78b2(struct -DATARMNETdadb4e2c65*DATARMNET75decd6f60,struct DATARMNETdadb4e2c65* +DATARMNETfb0677cc3c);}static bool DATARMNETb636687df3(bool DATARMNETe78ad140cc){ +struct DATARMNET6f3b954709*DATARMNET63b1a086d5;struct hlist_node* +DATARMNET0386f6f82a;unsigned long DATARMNET763f2e5fac;int DATARMNET5c2fd31d7b; +DATARMNET763f2e5fac=jiffies;hash_for_each_safe(DATARMNET6e79f38051, +DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,DATARMNET63b1a086d5,DATARMNETe8608dd267) +{if(DATARMNET63b1a086d5->DATARMNET1717afebc7)continue;if(DATARMNETe78ad140cc|| +DATARMNET1bb071d045(DATARMNET63b1a086d5,DATARMNET763f2e5fac)){ +DATARMNET63b1a086d5->DATARMNET1717afebc7=true;hash_del_rcu(&DATARMNET63b1a086d5 +->DATARMNETe8608dd267);DATARMNETc7c83f614f(DATARMNET63b1a086d5,false);kfree_rcu( +DATARMNET63b1a086d5,DATARMNET28bfe9e6ad);DATARMNET5ca94dbc3c(DATARMNETd691057b85 +);DATARMNETdef6cfba1c--;}}return!!DATARMNETdef6cfba1c;}static void +DATARMNETad2b7fd8f5(struct work_struct*DATARMNET190b4452e8){struct +DATARMNET2f26f1d597*DATARMNET7500205a68;unsigned long DATARMNETfb0677cc3c;bool +DATARMNET6e1c466378;DATARMNET7500205a68=container_of(to_delayed_work( +DATARMNET190b4452e8),struct DATARMNET2f26f1d597,DATARMNET190b4452e8); +spin_lock_irqsave(&DATARMNET531b038fcd,DATARMNETfb0677cc3c);DATARMNET6e1c466378= +DATARMNETb636687df3(DATARMNET7500205a68->DATARMNETcd94e0d3c7);if( +DATARMNET6e1c466378){unsigned long DATARMNETf71ef1b8da;DATARMNETf71ef1b8da= +msecs_to_jiffies(DATARMNETdbb408ba5d);schedule_delayed_work(&DATARMNET7500205a68 +->DATARMNET190b4452e8,DATARMNETf71ef1b8da);}spin_unlock_irqrestore(& +DATARMNET531b038fcd,DATARMNETfb0677cc3c);}static bool DATARMNETc529ac78b2(struct + DATARMNETdadb4e2c65*DATARMNET75decd6f60,struct DATARMNETdadb4e2c65* DATARMNET6745cad668){if(DATARMNET75decd6f60->DATARMNET0d956cc77a!= DATARMNET6745cad668->DATARMNET0d956cc77a||DATARMNET75decd6f60->id!= DATARMNET6745cad668->id)return false;if(DATARMNET75decd6f60->DATARMNET0d956cc77a @@ -110,33 +129,30 @@ DATARMNET52b387f6cd(struct DATARMNETdadb4e2c65*DATARMNET54338da2ff){struct DATARMNET6f3b954709*DATARMNET63b1a086d5;unsigned long DATARMNETfb0677cc3c; spin_lock_irqsave(&DATARMNET531b038fcd,DATARMNETfb0677cc3c); hash_for_each_possible_rcu(DATARMNET6e79f38051,DATARMNET63b1a086d5, -DATARMNETe8608dd267,DATARMNET54338da2ff->id){if(DATARMNETc529ac78b2( -DATARMNET54338da2ff,&DATARMNET63b1a086d5->DATARMNET54338da2ff))goto -DATARMNETbf4095f79e;}DATARMNET63b1a086d5=kzalloc(sizeof(*DATARMNET63b1a086d5), -GFP_ATOMIC);if(!DATARMNET63b1a086d5)goto DATARMNETbf4095f79e;spin_lock_init(& -DATARMNET63b1a086d5->DATARMNET94b1f9ee09);INIT_LIST_HEAD(&DATARMNET63b1a086d5-> -DATARMNET0f34bf3ea9);memcpy(&DATARMNET63b1a086d5->DATARMNET54338da2ff, -DATARMNET54338da2ff,sizeof(*DATARMNET54338da2ff));hrtimer_init(& -DATARMNET63b1a086d5->DATARMNET9f31ce5d2d,CLOCK_MONOTONIC,HRTIMER_MODE_REL); -DATARMNET63b1a086d5->DATARMNET9f31ce5d2d.function=DATARMNETef43eced5f; -hrtimer_start(&DATARMNET63b1a086d5->DATARMNET9f31ce5d2d,DATARMNET63a285d479, -HRTIMER_MODE_REL);INIT_HLIST_NODE(&DATARMNET63b1a086d5->DATARMNETe8608dd267); -hash_add_rcu(DATARMNET6e79f38051,&DATARMNET63b1a086d5->DATARMNETe8608dd267, -DATARMNET54338da2ff->id);DATARMNETbf4095f79e:spin_unlock_irqrestore(& -DATARMNET531b038fcd,DATARMNETfb0677cc3c);return DATARMNET63b1a086d5;}static int -DATARMNET9d6ad3b16f(struct sk_buff*DATARMNET543491eb0f,struct -DATARMNETb89ecedefc*DATARMNET3396919a68,struct DATARMNETdadb4e2c65* -DATARMNET54338da2ff,struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e)__must_hold( -RCU){struct DATARMNET6f3b954709*DATARMNET63b1a086d5;int DATARMNET61c2303133= -(0xd26+209-0xdf6);DATARMNET5ca94dbc3c(DATARMNETd8273aa7e1);DATARMNET63b1a086d5= -DATARMNET52b387f6cd(DATARMNET54338da2ff);if(!DATARMNET63b1a086d5){ -DATARMNET61c2303133=(-(0xd26+209-0xdf6));goto DATARMNETbf4095f79e;}if(unlikely(! -hrtimer_is_queued(&DATARMNET63b1a086d5->DATARMNET9f31ce5d2d))){goto -DATARMNETbf4095f79e;}else if(hrtimer_get_remaining(&DATARMNET63b1a086d5-> -DATARMNET9f31ce5d2d)<=DATARMNETb7cc384fbe){goto DATARMNETbf4095f79e;} -hrtimer_start(&DATARMNET63b1a086d5->DATARMNET9f31ce5d2d,DATARMNET63a285d479, -HRTIMER_MODE_REL);if(DATARMNET63b1a086d5->DATARMNET7ed5754a5c){if(IS_ERR( -DATARMNET63b1a086d5->DATARMNET7ed5754a5c))goto DATARMNETbf4095f79e;if(! +DATARMNETe8608dd267,DATARMNET54338da2ff->id){if(DATARMNET63b1a086d5-> +DATARMNET1717afebc7)continue;if(DATARMNETc529ac78b2(DATARMNET54338da2ff,& +DATARMNET63b1a086d5->DATARMNET54338da2ff))goto DATARMNETbf4095f79e;} +DATARMNET63b1a086d5=kzalloc(sizeof(*DATARMNET63b1a086d5),GFP_ATOMIC);if(! +DATARMNET63b1a086d5)goto DATARMNETbf4095f79e;spin_lock_init(&DATARMNET63b1a086d5 +->DATARMNET94b1f9ee09);INIT_LIST_HEAD(&DATARMNET63b1a086d5->DATARMNET0f34bf3ea9) +;memcpy(&DATARMNET63b1a086d5->DATARMNET54338da2ff,DATARMNET54338da2ff,sizeof(* +DATARMNET54338da2ff));INIT_HLIST_NODE(&DATARMNET63b1a086d5->DATARMNETe8608dd267) +;hash_add_rcu(DATARMNET6e79f38051,&DATARMNET63b1a086d5->DATARMNETe8608dd267, +DATARMNET54338da2ff->id);if(!DATARMNETdef6cfba1c){unsigned long +DATARMNETf71ef1b8da;DATARMNETf71ef1b8da=msecs_to_jiffies(DATARMNETdbb408ba5d); +schedule_delayed_work(&DATARMNETa41953a37b.DATARMNET190b4452e8, +DATARMNETf71ef1b8da);}DATARMNETdef6cfba1c++;DATARMNETbf4095f79e: +spin_unlock_irqrestore(&DATARMNET531b038fcd,DATARMNETfb0677cc3c);return +DATARMNET63b1a086d5;}static int DATARMNET9d6ad3b16f(struct sk_buff* +DATARMNET543491eb0f,struct DATARMNETb89ecedefc*DATARMNET3396919a68,struct +DATARMNETdadb4e2c65*DATARMNET54338da2ff,struct DATARMNET8d3c2559ca* +DATARMNET2d4b4cfc9e)__must_hold(RCU){struct DATARMNET6f3b954709* +DATARMNET63b1a086d5;int DATARMNET61c2303133=(0xd26+209-0xdf6); +DATARMNET5ca94dbc3c(DATARMNETd8273aa7e1);DATARMNET63b1a086d5=DATARMNET52b387f6cd +(DATARMNET54338da2ff);if(!DATARMNET63b1a086d5){DATARMNET61c2303133=(- +(0xd26+209-0xdf6));goto DATARMNETbf4095f79e;}DATARMNET63b1a086d5-> +DATARMNET763f2e5fac=jiffies;if(DATARMNET63b1a086d5->DATARMNET7ed5754a5c){if( +IS_ERR(DATARMNET63b1a086d5->DATARMNET7ed5754a5c))goto DATARMNETbf4095f79e;if(! DATARMNET4899053671(DATARMNET543491eb0f,DATARMNET63b1a086d5->DATARMNET7ed5754a5c )){DATARMNET5ca94dbc3c(DATARMNET7a58a5c1fc);DATARMNET61c2303133= (0xd2d+202-0xdf7);goto DATARMNETbf4095f79e;}DATARMNET5ca94dbc3c( @@ -202,11 +218,13 @@ DATARMNETb65c469a15=htons(frag_hdr->frag_off)&IP6_OFFSET;DATARMNET54338da2ff. DATARMNET611d08d671=(u16)DATARMNET611d08d671;if(DATARMNET3396919a68-> DATARMNET4924e79411==NEXTHDR_FRAGMENT)DATARMNET54338da2ff.DATARMNET611d08d671+= sizeof(*frag_hdr);return DATARMNET9d6ad3b16f(DATARMNET543491eb0f, -DATARMNET3396919a68,&DATARMNET54338da2ff,DATARMNET2d4b4cfc9e);}void -DATARMNET8c0e010dfb(void){struct DATARMNET6f3b954709*DATARMNET63b1a086d5;int -DATARMNET5c2fd31d7b;rcu_read_lock();hash_for_each_rcu(DATARMNET6e79f38051, -DATARMNET5c2fd31d7b,DATARMNET63b1a086d5,DATARMNETe8608dd267)hrtimer_cancel(& -DATARMNET63b1a086d5->DATARMNET9f31ce5d2d);rcu_read_unlock();}void +DATARMNET3396919a68,&DATARMNET54338da2ff,DATARMNET2d4b4cfc9e);}int +DATARMNET49c2c17e77(void){INIT_DELAYED_WORK(&DATARMNETa41953a37b. +DATARMNET190b4452e8,DATARMNETad2b7fd8f5);return(0xd2d+202-0xdf7);}void +DATARMNET8c0e010dfb(void){cancel_delayed_work_sync(&DATARMNETa41953a37b. +DATARMNET190b4452e8);DATARMNETa41953a37b.DATARMNETcd94e0d3c7=true; +schedule_delayed_work(&DATARMNETa41953a37b.DATARMNET190b4452e8,(0xd2d+202-0xdf7) +);cancel_delayed_work_sync(&DATARMNETa41953a37b.DATARMNET190b4452e8);}void DATARMNETedae8262e1(struct DATARMNET8d3c2559ca*DATARMNET54338da2ff){struct DATARMNET6f3b954709*DATARMNET63b1a086d5;int DATARMNET5c2fd31d7b;rcu_read_lock(); hash_for_each_rcu(DATARMNET6e79f38051,DATARMNET5c2fd31d7b,DATARMNET63b1a086d5, diff --git a/wlan/rmnet_wlan_fragment.h b/wlan/rmnet_wlan_fragment.h index c5a1912512..d0f57e4b63 100644 --- a/wlan/rmnet_wlan_fragment.h +++ b/wlan/rmnet_wlan_fragment.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. * * RMNET WLAN fragment handler framework * @@ -13,8 +14,8 @@ int DATARMNET579f75aa50(struct sk_buff*DATARMNET543491eb0f,int DATARMNET611d08d671,struct DATARMNETb89ecedefc*DATARMNET3396919a68,struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e);int DATARMNETaca8ca54ed(struct sk_buff* DATARMNET543491eb0f,int DATARMNET611d08d671,struct DATARMNETb89ecedefc* -DATARMNET3396919a68,struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e);void -DATARMNET8c0e010dfb(void);void DATARMNETedae8262e1(struct DATARMNET8d3c2559ca* -DATARMNET54338da2ff); +DATARMNET3396919a68,struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e);int +DATARMNET49c2c17e77(void);void DATARMNET8c0e010dfb(void);void +DATARMNETedae8262e1(struct DATARMNET8d3c2559ca*DATARMNET54338da2ff); #endif diff --git a/wlan/rmnet_wlan_genl.c b/wlan/rmnet_wlan_genl.c index 1fb6933dd1..a936bb11d9 100644 --- a/wlan/rmnet_wlan_genl.c +++ b/wlan/rmnet_wlan_genl.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. * * RMNET WLAN Generic Netlink * @@ -15,6 +15,7 @@ #include "rmnet_wlan_genl.h" #include "rmnet_wlan.h" #include "rmnet_wlan_connection.h" +#include "rmnet_wlan_fragment.h" #define DATARMNET5fe2c6571f (0xf07+1104-0x131d) static struct nla_policy DATARMNET19c5fce390[DATARMNETf6bbad94a5+ (0xd26+209-0xdf6)]={[DATARMNET8c062d7709]=NLA_POLICY_EXACT_LEN(sizeof(struct @@ -289,12 +290,16 @@ DATARMNET61c2303133){pr_err( ,__func__,DATARMNET61c2303133);goto DATARMNET27d4697979;}DATARMNET61c2303133= DATARMNET9f106ed933();if(DATARMNET61c2303133){pr_err( "\x25\x73\x28\x29\x3a\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x6d\x61\x6e\x61\x67\x65\x6d\x65\x6e\x74\x20\x69\x6e\x69\x74\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69" "\n" -,__func__,DATARMNET61c2303133);goto DATARMNETb042feb7e2;}DATARMNET333c107558(); +,__func__,DATARMNET61c2303133);goto DATARMNETb042feb7e2;}DATARMNET61c2303133= +DATARMNET49c2c17e77();if(DATARMNET61c2303133){pr_err( +"\x25\x73\x28\x29\x3a\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\x20\x6d\x61\x6e\x61\x67\x65\x6d\x65\x6e\x74\x20\x69\x6e\x69\x74\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69" "\n" +,__func__,DATARMNET61c2303133);goto DATARMNET321a78afb9;}DATARMNET333c107558(); pr_info( "\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x77\x6c\x61\x6e\x5f\x73\x65\x74\x5f\x68\x6f\x6f\x6b\x73\x20\x73\x65\x74" "\n" -,__func__);return(0xd2d+202-0xdf7);DATARMNETb042feb7e2:genl_unregister_family(& -DATARMNET61e8f41aae);DATARMNET27d4697979:return DATARMNET61c2303133;}static void - __exit DATARMNET7a381832d5(void){int DATARMNET61c2303133;pr_info( +,__func__);return(0xd2d+202-0xdf7);DATARMNET321a78afb9:DATARMNETf56cbaa2b1(); +DATARMNETb042feb7e2:genl_unregister_family(&DATARMNET61e8f41aae); +DATARMNET27d4697979:return DATARMNET61c2303133;}static void __exit +DATARMNET7a381832d5(void){int DATARMNET61c2303133;pr_info( "\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x77\x6c\x61\x6e\x20\x65\x78\x69\x74\x69\x6e\x67" "\n" ,__func__);DATARMNET61c2303133=DATARMNETf56cbaa2b1();if(DATARMNET61c2303133) pr_err( diff --git a/wlan/rmnet_wlan_main.c b/wlan/rmnet_wlan_main.c index d4f7176d61..c12853aeb0 100644 --- a/wlan/rmnet_wlan_main.c +++ b/wlan/rmnet_wlan_main.c @@ -25,18 +25,18 @@ #include "rmnet_wlan_stats.h" #include "rmnet_wlan_fragment.h" #include "rmnet_wlan_connection.h" -static char*verinfo[]={"\x30\x32\x39\x33\x31\x66\x62\x66", -"\x32\x31\x39\x38\x30\x64\x66\x62","\x61\x33\x31\x34\x63\x62\x32\x35", -"\x34\x33\x62\x62\x38\x34\x39\x39","\x32\x66\x33\x36\x30\x30\x31\x34", -"\x62\x64\x66\x66\x39\x32\x62\x33","\x34\x36\x35\x36\x30\x62\x31\x34", -"\x64\x33\x37\x61\x30\x39\x63\x63","\x65\x32\x31\x38\x66\x34\x35\x31", -"\x30\x65\x33\x34\x62\x31\x39\x31","\x39\x66\x33\x66\x31\x31\x33\x30", -"\x62\x31\x62\x63\x64\x66\x66\x61","\x61\x33\x33\x33\x36\x37\x61\x31", -"\x37\x34\x31\x35\x39\x32\x31\x63","\x33\x35\x36\x63\x34\x39\x31\x63", -"\x34\x64\x32\x32\x34\x33\x36\x33","\x61\x34\x31\x63\x39\x64\x37\x62", -"\x38\x66\x32\x66\x65\x64\x32\x66","\x63\x30\x32\x62\x61\x39\x30\x65"}; -module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC( -verinfo, +static char*verinfo[]={"\x66\x34\x35\x34\x32\x32\x62\x64", +"\x30\x32\x39\x33\x31\x66\x62\x66","\x32\x31\x39\x38\x30\x64\x66\x62", +"\x61\x33\x31\x34\x63\x62\x32\x35","\x34\x33\x62\x62\x38\x34\x39\x39", +"\x32\x66\x33\x36\x30\x30\x31\x34","\x62\x64\x66\x66\x39\x32\x62\x33", +"\x34\x36\x35\x36\x30\x62\x31\x34","\x64\x33\x37\x61\x30\x39\x63\x63", +"\x65\x32\x31\x38\x66\x34\x35\x31","\x30\x65\x33\x34\x62\x31\x39\x31", +"\x39\x66\x33\x66\x31\x31\x33\x30","\x62\x31\x62\x63\x64\x66\x66\x61", +"\x61\x33\x33\x33\x36\x37\x61\x31","\x37\x34\x31\x35\x39\x32\x31\x63", +"\x33\x35\x36\x63\x34\x39\x31\x63","\x34\x64\x32\x32\x34\x33\x36\x33", +"\x61\x34\x31\x63\x39\x64\x37\x62","\x38\x66\x32\x66\x65\x64\x32\x66", +"\x63\x30\x32\x62\x61\x39\x30\x65"};module_param_array(verinfo,charp,NULL, +(0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo, "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72" ); #define DATARMNETaf49b04806 ((0xeb7+1158-0x132d))