rmnet_wlan_main.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * RMNET WLAN handler framework
  6. *
  7. */
  8. #include <linux/types.h>
  9. #include <linux/skbuff.h>
  10. #include <net/genetlink.h>
  11. #include <net/netlink.h>
  12. #include <net/ip.h>
  13. #include <net/ipv6.h>
  14. #include <net/tcp.h>
  15. #include <linux/rcupdate.h>
  16. #include <linux/list.h>
  17. #include <linux/rculist.h>
  18. #include <linux/mutex.h>
  19. #include <linux/hashtable.h>
  20. #include <linux/log2.h>
  21. #include <linux/netdevice.h>
  22. #include "rmnet_wlan_genl.h"
  23. #include "rmnet_wlan.h"
  24. #include "rmnet_wlan_stats.h"
  25. #include "rmnet_wlan_fragment.h"
  26. #include "rmnet_wlan_connection.h"
  27. static char*verinfo[]={"\x32\x31\x39\x38\x30\x64\x66\x62",
  28. "\x61\x33\x31\x34\x63\x62\x32\x35","\x34\x33\x62\x62\x38\x34\x39\x39",
  29. "\x32\x66\x33\x36\x30\x30\x31\x34","\x62\x64\x66\x66\x39\x32\x62\x33",
  30. "\x34\x36\x35\x36\x30\x62\x31\x34","\x64\x33\x37\x61\x30\x39\x63\x63",
  31. "\x65\x32\x31\x38\x66\x34\x35\x31","\x30\x65\x33\x34\x62\x31\x39\x31",
  32. "\x39\x66\x33\x66\x31\x31\x33\x30","\x62\x31\x62\x63\x64\x66\x66\x61",
  33. "\x61\x33\x33\x33\x36\x37\x61\x31","\x37\x34\x31\x35\x39\x32\x31\x63",
  34. "\x33\x35\x36\x63\x34\x39\x31\x63","\x34\x64\x32\x32\x34\x33\x36\x33",
  35. "\x61\x34\x31\x63\x39\x64\x37\x62","\x38\x66\x32\x66\x65\x64\x32\x66",
  36. "\x63\x30\x32\x62\x61\x39\x30\x65"};module_param_array(verinfo,charp,NULL,
  37. (0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
  38. "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
  39. );
  40. #define DATARMNETaf49b04806 ((0xeb7+1158-0x132d))
  41. #define DATARMNET6b4ac8224c (const_ilog2(DATARMNETaf49b04806))
  42. struct DATARMNET745f724205{struct hlist_node DATARMNETe8608dd267;struct rcu_head
  43. DATARMNET28bfe9e6ad;struct DATARMNETb89ecedefc DATARMNET54338da2ff;};struct
  44. DATARMNETda06413d0d{struct hlist_node DATARMNETe8608dd267;struct rcu_head
  45. DATARMNET28bfe9e6ad;__be16 DATARMNETf0d9de7e2f;};static DEFINE_MUTEX(
  46. DATARMNET63a2b7773e);static DEFINE_HASHTABLE(DATARMNET1903907456,
  47. DATARMNET6b4ac8224c);static DEFINE_MUTEX(DATARMNETf46fb02ac6);static
  48. DEFINE_HASHTABLE(DATARMNET78ed39f13b,DATARMNET6b4ac8224c);static DEFINE_MUTEX(
  49. DATARMNET954bef55d0);static DEFINE_HASHTABLE(DATARMNET133502ca0e,
  50. DATARMNET6b4ac8224c);static DEFINE_HASHTABLE(DATARMNET665d2f133f,
  51. DATARMNET6b4ac8224c);static DEFINE_MUTEX(DATARMNET38726379d1);static
  52. DEFINE_SPINLOCK(DATARMNETe6ee7c273e);static char DATARMNET30500ba48c[IFNAMSIZ];
  53. static char DATARMNET755f0f0df8[IFNAMSIZ];static u32 DATARMNET7c77d83017;struct
  54. DATARMNETe117226f58*DATARMNETcde6e442f5;static bool DATARMNET1e31b22eff(struct
  55. DATARMNETb89ecedefc*DATARMNETae0905b0b3,struct DATARMNETb89ecedefc*
  56. DATARMNETdb49f21565){if(DATARMNETae0905b0b3->DATARMNET0d956cc77a!=
  57. DATARMNETdb49f21565->DATARMNET0d956cc77a||DATARMNETae0905b0b3->
  58. DATARMNET4924e79411!=DATARMNETdb49f21565->DATARMNET4924e79411)return false;if(
  59. DATARMNETae0905b0b3->DATARMNET0d956cc77a==IPPROTO_ESP)return DATARMNETae0905b0b3
  60. ->DATARMNET906b2ee561==DATARMNETdb49f21565->DATARMNET906b2ee561;return
  61. DATARMNETae0905b0b3->DATARMNETf0d9de7e2f==DATARMNETdb49f21565->
  62. DATARMNETf0d9de7e2f;}static int DATARMNET0b72d312f9(struct DATARMNETb89ecedefc*
  63. DATARMNET3396919a68,struct genl_info*DATARMNET54338da2ff)__must_hold(&
  64. DATARMNET63a2b7773e){struct DATARMNET745f724205*DATARMNET63b1a086d5;
  65. rcu_read_lock();if(DATARMNET4eafcdee07(DATARMNET3396919a68)){rcu_read_unlock();
  66. GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  67. "\x54\x75\x70\x6c\x65\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x70\x72\x65\x73\x65\x6e\x74"
  68. );return-EEXIST;}rcu_read_unlock();DATARMNET63b1a086d5=kzalloc(sizeof(*
  69. DATARMNET63b1a086d5),GFP_KERNEL);if(!DATARMNET63b1a086d5){GENL_SET_ERR_MSG(
  70. DATARMNET54338da2ff,
  71. "\x43\x61\x6e\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x20\x74\x75\x70\x6c\x65\x20\x6d\x65\x6d\x6f\x72\x79"
  72. );return-ENOMEM;}memcpy(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
  73. DATARMNET3396919a68,sizeof(*DATARMNET3396919a68));INIT_HLIST_NODE(&
  74. DATARMNET63b1a086d5->DATARMNETe8608dd267);hash_add_rcu(DATARMNET1903907456,&
  75. DATARMNET63b1a086d5->DATARMNETe8608dd267,DATARMNET3396919a68->
  76. DATARMNETf0d9de7e2f);DATARMNET5ca94dbc3c(DATARMNET12d881921a);return
  77. (0xd2d+202-0xdf7);}static int DATARMNET79343e3135(struct DATARMNETb89ecedefc*
  78. DATARMNET3396919a68,struct genl_info*DATARMNET54338da2ff)__must_hold(&
  79. DATARMNET63a2b7773e){struct DATARMNET745f724205*DATARMNET63b1a086d5;struct
  80. hlist_node*DATARMNET0386f6f82a;hash_for_each_possible_safe(DATARMNET1903907456,
  81. DATARMNET63b1a086d5,DATARMNET0386f6f82a,DATARMNETe8608dd267,DATARMNET3396919a68
  82. ->DATARMNETf0d9de7e2f){if(DATARMNET1e31b22eff(&DATARMNET63b1a086d5->
  83. DATARMNET54338da2ff,DATARMNET3396919a68)){hash_del_rcu(&DATARMNET63b1a086d5->
  84. DATARMNETe8608dd267);kfree_rcu(DATARMNET63b1a086d5,DATARMNET28bfe9e6ad);
  85. DATARMNET5ca94dbc3c(DATARMNET9f24b86462);return(0xd2d+202-0xdf7);}}
  86. GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  87. "\x4e\x6f\x20\x73\x75\x63\x68\x20\x74\x75\x70\x6c\x65");return-ESRCH;}static
  88. void DATARMNETad43e44c7e(void){struct DATARMNET745f724205*DATARMNET63b1a086d5;
  89. struct hlist_node*DATARMNET0386f6f82a;int DATARMNET5c2fd31d7b;mutex_lock(&
  90. DATARMNET63a2b7773e);DATARMNET7c77d83017=(0xd2d+202-0xdf7);hash_for_each_safe(
  91. DATARMNET1903907456,DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,DATARMNET63b1a086d5,
  92. DATARMNETe8608dd267){hash_del_rcu(&DATARMNET63b1a086d5->DATARMNETe8608dd267);
  93. kfree_rcu(DATARMNET63b1a086d5,DATARMNET28bfe9e6ad);}mutex_unlock(&
  94. DATARMNET63a2b7773e);}static bool DATARMNET55aac1386b(struct DATARMNET8d3c2559ca
  95. *DATARMNET1476c48228,struct DATARMNET8d3c2559ca*DATARMNET57a0f36a25){struct
  96. in6_addr DATARMNET4c8c2ca74e={.s6_addr32={4294967295,4294967295,
  97. (0xd2d+202-0xdf7),(0xd2d+202-0xdf7)},};if(DATARMNET1476c48228->
  98. DATARMNET0d956cc77a!=DATARMNET57a0f36a25->DATARMNET0d956cc77a)return false;if(
  99. DATARMNET1476c48228->DATARMNET0d956cc77a==(0xd11+230-0xdf3))return
  100. DATARMNET1476c48228->DATARMNET0dc14167a1==DATARMNET57a0f36a25->
  101. DATARMNET0dc14167a1;return!ipv6_masked_addr_cmp(&DATARMNET1476c48228->
  102. DATARMNET5700daac01,&DATARMNET4c8c2ca74e,&DATARMNET57a0f36a25->
  103. DATARMNET5700daac01);}struct DATARMNET41b426061d*DATARMNETcc0a01df2a(struct
  104. DATARMNET8d3c2559ca*DATARMNET54338da2ff)__must_hold(RCU){struct
  105. DATARMNET41b426061d*DATARMNET63b1a086d5;hash_for_each_possible_rcu(
  106. DATARMNET78ed39f13b,DATARMNET63b1a086d5,DATARMNETe8608dd267,DATARMNET54338da2ff
  107. ->DATARMNET0dc14167a1){if(DATARMNET55aac1386b(&DATARMNET63b1a086d5->
  108. DATARMNET7ed5754a5c,DATARMNET54338da2ff))return DATARMNET63b1a086d5;}return NULL
  109. ;}static int DATARMNETe98553a8fc(struct notifier_block*DATARMNET272c159b3c,
  110. unsigned long DATARMNET7f045a1e6e,void*data){struct net_device*
  111. DATARMNET00dcb79bc4=netdev_notifier_info_to_dev(data);struct DATARMNET41b426061d
  112. *DATARMNET2d4b4cfc9e;DATARMNET2d4b4cfc9e=container_of(DATARMNET272c159b3c,struct
  113. DATARMNET41b426061d,DATARMNET272c159b3c);if(!DATARMNET00dcb79bc4||
  114. DATARMNETaba2beb199(DATARMNET00dcb79bc4->name,DATARMNET2d4b4cfc9e->
  115. DATARMNET852d4d00e2,IFNAMSIZ))return NOTIFY_DONE;switch(DATARMNET7f045a1e6e){
  116. case NETDEV_UNREGISTER:if(DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c.
  117. DATARMNET57656f6f2f){dev_put(DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c.
  118. DATARMNET57656f6f2f);WRITE_ONCE(DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c.
  119. DATARMNET57656f6f2f,NULL);}break;case NETDEV_REGISTER:if(!DATARMNET2d4b4cfc9e->
  120. DATARMNET7ed5754a5c.DATARMNET57656f6f2f){dev_hold(DATARMNET00dcb79bc4);
  121. WRITE_ONCE(DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c.DATARMNET57656f6f2f,
  122. DATARMNET00dcb79bc4);}break;default:break;}return NOTIFY_DONE;}static int
  123. DATARMNET1ac13d5a2a(struct DATARMNET8d3c2559ca*DATARMNET7ed5754a5c,struct
  124. genl_info*DATARMNET54338da2ff)__must_hold(&DATARMNETf46fb02ac6){struct
  125. DATARMNET41b426061d*DATARMNET2d4b4cfc9e;int DATARMNET268a8314cf;rcu_read_lock();
  126. DATARMNET2d4b4cfc9e=DATARMNETcc0a01df2a(DATARMNET7ed5754a5c);if(
  127. DATARMNET2d4b4cfc9e){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  128. "\x46\x57\x44\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x70\x72\x65\x73\x65\x6e\x74"
  129. );rcu_read_unlock();return-EEXIST;}rcu_read_unlock();DATARMNET2d4b4cfc9e=kzalloc
  130. (sizeof(*DATARMNET2d4b4cfc9e),GFP_KERNEL);if(!DATARMNET2d4b4cfc9e){
  131. GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  132. "\x43\x61\x6e\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x20\x46\x57\x44\x20\x63\x6f\x6e\x74\x65\x78\x74"
  133. );return-ENOMEM;}memcpy(&DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c,
  134. DATARMNET7ed5754a5c,sizeof(*DATARMNET7ed5754a5c));DATARMNET2d4b4cfc9e->
  135. DATARMNET7ed5754a5c.DATARMNET57656f6f2f=NULL;strlcpy(DATARMNET2d4b4cfc9e->
  136. DATARMNET852d4d00e2,DATARMNET7ed5754a5c->DATARMNET57656f6f2f->name,IFNAMSIZ);
  137. DATARMNET2d4b4cfc9e->DATARMNET272c159b3c.notifier_call=DATARMNETe98553a8fc;
  138. DATARMNET268a8314cf=register_netdevice_notifier(&DATARMNET2d4b4cfc9e->
  139. DATARMNET272c159b3c);if(DATARMNET268a8314cf){GENL_SET_ERR_MSG(
  140. DATARMNET54338da2ff,
  141. "\x52\x65\x67\x69\x73\x74\x65\x72\x69\x6e\x67\x20\x46\x57\x44\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  142. );kfree(DATARMNET2d4b4cfc9e);return DATARMNET268a8314cf;}INIT_HLIST_NODE(&
  143. DATARMNET2d4b4cfc9e->DATARMNETe8608dd267);hash_add_rcu(DATARMNET78ed39f13b,&
  144. DATARMNET2d4b4cfc9e->DATARMNETe8608dd267,DATARMNET7ed5754a5c->
  145. DATARMNET0dc14167a1);return(0xd2d+202-0xdf7);}static int DATARMNET6518a28641(
  146. struct DATARMNET41b426061d*DATARMNET2d4b4cfc9e)__must_hold(&DATARMNETf46fb02ac6)
  147. {int DATARMNET268a8314cf;DATARMNET268a8314cf=unregister_netdevice_notifier(&
  148. DATARMNET2d4b4cfc9e->DATARMNET272c159b3c);if(DATARMNET268a8314cf)return
  149. DATARMNET268a8314cf;hash_del_rcu(&DATARMNET2d4b4cfc9e->DATARMNETe8608dd267);
  150. DATARMNETedae8262e1(&DATARMNET2d4b4cfc9e->DATARMNET7ed5754a5c);kfree_rcu(
  151. DATARMNET2d4b4cfc9e,DATARMNET28bfe9e6ad);return DATARMNET268a8314cf;}static int
  152. DATARMNET6b6be8e27f(struct DATARMNET8d3c2559ca*DATARMNET7ed5754a5c,struct
  153. genl_info*DATARMNET54338da2ff)__must_hold(&DATARMNETf46fb02ac6){struct
  154. DATARMNET41b426061d*DATARMNET2d4b4cfc9e;int DATARMNET268a8314cf;rcu_read_lock();
  155. DATARMNET2d4b4cfc9e=DATARMNETcc0a01df2a(DATARMNET7ed5754a5c);rcu_read_unlock();
  156. if(!DATARMNET2d4b4cfc9e){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  157. "\x4e\x6f\x20\x73\x75\x63\x68\x20\x46\x57\x44\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e"
  158. );return-ESRCH;}if(DATARMNETaba2beb199(DATARMNET2d4b4cfc9e->DATARMNET852d4d00e2,
  159. DATARMNET7ed5754a5c->DATARMNET57656f6f2f->name,IFNAMSIZ)){GENL_SET_ERR_MSG(
  160. DATARMNET54338da2ff,
  161. "\x49\x6e\x63\x6f\x72\x72\x65\x63\x74\x20\x46\x57\x44\x20\x64\x65\x76\x69\x63\x65"
  162. );return-ENODEV;}DATARMNET268a8314cf=DATARMNET6518a28641(DATARMNET2d4b4cfc9e);if
  163. (DATARMNET268a8314cf){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  164. "\x55\x6e\x72\x65\x67\x69\x73\x74\x65\x72\x69\x6e\x67\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  165. );return DATARMNET268a8314cf;}return DATARMNET268a8314cf;}static void
  166. DATARMNETe5b03fe375(void){struct DATARMNET41b426061d*DATARMNET54338da2ff;struct
  167. hlist_node*DATARMNET0386f6f82a;int DATARMNET5c2fd31d7b;mutex_lock(&
  168. DATARMNETf46fb02ac6);hash_for_each_safe(DATARMNET78ed39f13b,DATARMNET5c2fd31d7b,
  169. DATARMNET0386f6f82a,DATARMNET54338da2ff,DATARMNETe8608dd267)DATARMNET6518a28641(
  170. DATARMNET54338da2ff);mutex_unlock(&DATARMNETf46fb02ac6);}static bool
  171. DATARMNET7490934ea9(__be16 DATARMNETf0d9de7e2f)__must_hold(RCU){struct
  172. DATARMNETda06413d0d*DATARMNET63b1a086d5;hash_for_each_possible_rcu(
  173. DATARMNET133502ca0e,DATARMNET63b1a086d5,DATARMNETe8608dd267,DATARMNETf0d9de7e2f)
  174. {if(DATARMNET63b1a086d5->DATARMNETf0d9de7e2f==DATARMNETf0d9de7e2f)return true;}
  175. return false;}static int DATARMNET3b10d1c14b(__be16 DATARMNETf0d9de7e2f,struct
  176. genl_info*DATARMNET54338da2ff)__must_hold(&DATARMNET954bef55d0){struct
  177. DATARMNETda06413d0d*DATARMNET63b1a086d5;rcu_read_lock();if(DATARMNET7490934ea9(
  178. DATARMNETf0d9de7e2f)){rcu_read_unlock();GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  179. "\x45\x6e\x63\x61\x70\x20\x70\x6f\x72\x74\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x70\x72\x65\x73\x65\x6e\x74"
  180. );return-EEXIST;}rcu_read_unlock();DATARMNET63b1a086d5=kzalloc(sizeof(*
  181. DATARMNET63b1a086d5),GFP_KERNEL);if(!DATARMNET63b1a086d5){GENL_SET_ERR_MSG(
  182. DATARMNET54338da2ff,
  183. "\x43\x61\x6e\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x20\x65\x6e\x63\x61\x70\x20\x70\x6f\x72\x74\x20\x6d\x65\x6d\x6f\x72\x79"
  184. );return-ENOMEM;}DATARMNET63b1a086d5->DATARMNETf0d9de7e2f=DATARMNETf0d9de7e2f;
  185. INIT_HLIST_NODE(&DATARMNET63b1a086d5->DATARMNETe8608dd267);hash_add_rcu(
  186. DATARMNET133502ca0e,&DATARMNET63b1a086d5->DATARMNETe8608dd267,
  187. DATARMNETf0d9de7e2f);DATARMNET5ca94dbc3c(DATARMNET90782e08cf);return
  188. (0xd2d+202-0xdf7);}static int DATARMNETc023021120(__be16 DATARMNETf0d9de7e2f,
  189. struct genl_info*DATARMNET54338da2ff)__must_hold(&DATARMNET954bef55d0){struct
  190. DATARMNETda06413d0d*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
  191. hash_for_each_possible_safe(DATARMNET133502ca0e,DATARMNET63b1a086d5,
  192. DATARMNET0386f6f82a,DATARMNETe8608dd267,DATARMNETf0d9de7e2f){if(
  193. DATARMNET63b1a086d5->DATARMNETf0d9de7e2f==DATARMNETf0d9de7e2f){hash_del_rcu(&
  194. DATARMNET63b1a086d5->DATARMNETe8608dd267);kfree_rcu(DATARMNET63b1a086d5,
  195. DATARMNET28bfe9e6ad);DATARMNET5ca94dbc3c(DATARMNETb7c9f010b2);return
  196. (0xd2d+202-0xdf7);}}GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  197. "\x4e\x6f\x20\x73\x75\x63\x68\x20\x70\x6f\x72\x74\x20\x76\x61\x6c\x75\x65");
  198. return-ESRCH;}static bool DATARMNETa96214b53c(__be16 DATARMNETf0d9de7e2f)
  199. __must_hold(RCU){struct DATARMNETda06413d0d*DATARMNET63b1a086d5;
  200. hash_for_each_possible_rcu(DATARMNET665d2f133f,DATARMNET63b1a086d5,
  201. DATARMNETe8608dd267,DATARMNETf0d9de7e2f){if(DATARMNET63b1a086d5->
  202. DATARMNETf0d9de7e2f==DATARMNETf0d9de7e2f)return true;}return false;}static int
  203. DATARMNET51f60f2fd3(struct DATARMNETe117226f58*DATARMNET3396919a68)__must_hold(&
  204. DATARMNET38726379d1){struct DATARMNETe117226f58*DATARMNET28d35f5346;struct
  205. DATARMNETe117226f58*DATARMNETe302a1b49b;unsigned long DATARMNET0861dd728f;
  206. DATARMNET28d35f5346=kzalloc(sizeof(*DATARMNET28d35f5346),GFP_KERNEL);if(!
  207. DATARMNET28d35f5346){return-ENOMEM;}memcpy(DATARMNET28d35f5346,
  208. DATARMNET3396919a68,sizeof(*DATARMNET28d35f5346));spin_lock_irqsave(&
  209. DATARMNETe6ee7c273e,DATARMNET0861dd728f);DATARMNETe302a1b49b=
  210. rcu_dereference_protected(DATARMNETcde6e442f5,lockdep_is_held(&
  211. DATARMNETe6ee7c273e));rcu_assign_pointer(DATARMNETcde6e442f5,DATARMNET28d35f5346
  212. );spin_unlock_irqrestore(&DATARMNETe6ee7c273e,DATARMNET0861dd728f);
  213. synchronize_rcu();if(DATARMNETe302a1b49b)kfree(DATARMNETe302a1b49b);return
  214. (0xd2d+202-0xdf7);}static int DATARMNETb9c7621157(void)__must_hold(&
  215. DATARMNET38726379d1){struct DATARMNETe117226f58*DATARMNETe302a1b49b;unsigned
  216. long DATARMNET0861dd728f;spin_lock_irqsave(&DATARMNETe6ee7c273e,
  217. DATARMNET0861dd728f);DATARMNETe302a1b49b=rcu_dereference_protected(
  218. DATARMNETcde6e442f5,lockdep_is_held(&DATARMNETe6ee7c273e));rcu_assign_pointer(
  219. DATARMNETcde6e442f5,NULL);spin_unlock_irqrestore(&DATARMNETe6ee7c273e,
  220. DATARMNET0861dd728f);synchronize_rcu();if(DATARMNETe302a1b49b)kfree(
  221. DATARMNETe302a1b49b);return(0xd2d+202-0xdf7);}int DATARMNET59b8376224(__be16
  222. DATARMNETf0d9de7e2f,struct genl_info*DATARMNET54338da2ff)__must_hold(&
  223. DATARMNET954bef55d0){struct DATARMNETda06413d0d*DATARMNET63b1a086d5;struct
  224. hlist_node*DATARMNET0386f6f82a;hash_for_each_possible_safe(DATARMNET665d2f133f,
  225. DATARMNET63b1a086d5,DATARMNET0386f6f82a,DATARMNETe8608dd267,DATARMNETf0d9de7e2f)
  226. {if(DATARMNET63b1a086d5->DATARMNETf0d9de7e2f==DATARMNETf0d9de7e2f){hash_del_rcu(
  227. &DATARMNET63b1a086d5->DATARMNETe8608dd267);kfree_rcu(DATARMNET63b1a086d5,
  228. DATARMNET28bfe9e6ad);DATARMNET5ca94dbc3c(DATARMNETa726eebea4);return
  229. (0xd2d+202-0xdf7);}}return(0xd2d+202-0xdf7);}int DATARMNET0b12e969c5(__be16
  230. DATARMNETf0d9de7e2f,struct genl_info*DATARMNET54338da2ff)__must_hold(&
  231. DATARMNET954bef55d0){struct DATARMNETda06413d0d*DATARMNET63b1a086d5;
  232. rcu_read_lock();if(DATARMNETa96214b53c(DATARMNETf0d9de7e2f)){rcu_read_unlock();
  233. GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  234. "\x45\x6e\x63\x61\x70\x20\x70\x6f\x72\x74\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x70\x72\x65\x73\x65\x6e\x74"
  235. );return-EEXIST;}rcu_read_unlock();DATARMNET63b1a086d5=kzalloc(sizeof(*
  236. DATARMNET63b1a086d5),GFP_KERNEL);if(!DATARMNET63b1a086d5){GENL_SET_ERR_MSG(
  237. DATARMNET54338da2ff,
  238. "\x43\x61\x6e\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x20\x65\x6e\x63\x61\x70\x20\x70\x6f\x72\x74\x20\x6d\x65\x6d\x6f\x72\x79"
  239. );return-ENOMEM;}DATARMNET63b1a086d5->DATARMNETf0d9de7e2f=DATARMNETf0d9de7e2f;
  240. INIT_HLIST_NODE(&DATARMNET63b1a086d5->DATARMNETe8608dd267);hash_add_rcu(
  241. DATARMNET665d2f133f,&DATARMNET63b1a086d5->DATARMNETe8608dd267,
  242. DATARMNETf0d9de7e2f);DATARMNET5ca94dbc3c(DATARMNET990edaea89);return
  243. (0xd2d+202-0xdf7);}static void DATARMNET1f36d4813c(void){struct
  244. DATARMNETda06413d0d*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
  245. int DATARMNET5c2fd31d7b;mutex_lock(&DATARMNET954bef55d0);hash_for_each_safe(
  246. DATARMNET133502ca0e,DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,DATARMNET63b1a086d5,
  247. DATARMNETe8608dd267){hash_del_rcu(&DATARMNET63b1a086d5->DATARMNETe8608dd267);
  248. kfree_rcu(DATARMNET63b1a086d5,DATARMNET28bfe9e6ad);}mutex_unlock(&
  249. DATARMNET954bef55d0);}static rx_handler_result_t DATARMNET37a92021f9(struct
  250. sk_buff**DATARMNET89946cec52){struct DATARMNET0ca9d8ead7 DATARMNETa76763310b={};
  251. struct DATARMNETb89ecedefc DATARMNET3396919a68={};struct DATARMNET41b426061d*
  252. DATARMNET72f0eefdce;struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e,
  253. DATARMNET54338da2ff;struct sk_buff*DATARMNET543491eb0f=*DATARMNET89946cec52;
  254. rx_handler_result_t DATARMNET1dec89a127=RX_HANDLER_PASS;int DATARMNET611d08d671;
  255. if(!DATARMNET543491eb0f||DATARMNET543491eb0f->pkt_type==PACKET_LOOPBACK)return
  256. DATARMNET1dec89a127;rcu_read_lock();DATARMNET5ca94dbc3c(DATARMNET735bb8578c);if(
  257. DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9
  258. =ip_hdr(DATARMNET543491eb0f);if(DATARMNET86f1f2cdc9->protocol==IPPROTO_ICMP){
  259. DATARMNETa76763310b.DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->daddr;
  260. DATARMNETa76763310b.DATARMNET2cb607d686=DATARMNET86f1f2cdc9->saddr;
  261. DATARMNETa76763310b.DATARMNET0d956cc77a=(0xd11+230-0xdf3);DATARMNET2d4b4cfc9e=
  262. DATARMNET07f0e0f286(&DATARMNETa76763310b);if(DATARMNET2d4b4cfc9e)goto
  263. DATARMNET1e5291b369;}DATARMNET54338da2ff.DATARMNET0dc14167a1=DATARMNET86f1f2cdc9
  264. ->daddr;DATARMNET54338da2ff.DATARMNET0d956cc77a=(0xd11+230-0xdf3);
  265. DATARMNET72f0eefdce=DATARMNETcc0a01df2a(&DATARMNET54338da2ff);if(!
  266. DATARMNET72f0eefdce)goto DATARMNETbf4095f79e;DATARMNET2d4b4cfc9e=&
  267. DATARMNET72f0eefdce->DATARMNET7ed5754a5c;DATARMNET3396919a68.DATARMNET0d956cc77a
  268. =(0xd11+230-0xdf3);DATARMNET3396919a68.DATARMNET4924e79411=DATARMNET86f1f2cdc9->
  269. protocol;DATARMNET611d08d671=DATARMNET86f1f2cdc9->ihl*(0xd11+230-0xdf3);if(
  270. ip_is_fragment(DATARMNET86f1f2cdc9)){if(!DATARMNET579f75aa50(DATARMNET543491eb0f
  271. ,DATARMNET611d08d671,&DATARMNET3396919a68,DATARMNET2d4b4cfc9e))
  272. DATARMNET1dec89a127=RX_HANDLER_CONSUMED;goto DATARMNETbf4095f79e;}}else if(
  273. DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
  274. DATARMNETbf55123e5b=ipv6_hdr(DATARMNET543491eb0f);__be16 frag_off;u8
  275. DATARMNET65293f17c4;DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;
  276. DATARMNET611d08d671=ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*
  277. DATARMNETbf55123e5b),&DATARMNET65293f17c4,&frag_off);if(DATARMNET611d08d671<
  278. (0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;if(DATARMNET65293f17c4==
  279. IPPROTO_ICMPV6){memcpy(&DATARMNETa76763310b.DATARMNET815cbb4bf5,&
  280. DATARMNETbf55123e5b->daddr,sizeof(DATARMNETa76763310b.DATARMNET815cbb4bf5));
  281. memcpy(&DATARMNETa76763310b.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->saddr,
  282. sizeof(DATARMNETa76763310b.DATARMNETc3f31215b7));DATARMNETa76763310b.
  283. DATARMNET0d956cc77a=(0xd03+244-0xdf1);DATARMNET2d4b4cfc9e=DATARMNET07f0e0f286(&
  284. DATARMNETa76763310b);if(DATARMNET2d4b4cfc9e)goto DATARMNET1e5291b369;}memcpy(&
  285. DATARMNET54338da2ff.DATARMNET5700daac01,&DATARMNETbf55123e5b->daddr,sizeof(
  286. DATARMNET54338da2ff.DATARMNET5700daac01));DATARMNET54338da2ff.
  287. DATARMNET0d956cc77a=(0xd03+244-0xdf1);DATARMNET72f0eefdce=DATARMNETcc0a01df2a(&
  288. DATARMNET54338da2ff);if(!DATARMNET72f0eefdce)goto DATARMNETbf4095f79e;
  289. DATARMNET2d4b4cfc9e=&DATARMNET72f0eefdce->DATARMNET7ed5754a5c;
  290. DATARMNET3396919a68.DATARMNET0d956cc77a=(0xd03+244-0xdf1);DATARMNET3396919a68.
  291. DATARMNET4924e79411=DATARMNET65293f17c4;if(frag_off){if(!DATARMNETaca8ca54ed(
  292. DATARMNET543491eb0f,DATARMNET611d08d671,&DATARMNET3396919a68,DATARMNET2d4b4cfc9e
  293. ))DATARMNET1dec89a127=RX_HANDLER_CONSUMED;goto DATARMNETbf4095f79e;}}else{goto
  294. DATARMNETbf4095f79e;}if(DATARMNET3396919a68.DATARMNET4924e79411==IPPROTO_TCP||
  295. DATARMNET3396919a68.DATARMNET4924e79411==IPPROTO_UDP){struct udphdr*
  296. DATARMNET75be5f3406=(struct udphdr*)(DATARMNET543491eb0f->data+
  297. DATARMNET611d08d671);DATARMNET3396919a68.DATARMNETf0d9de7e2f=DATARMNET75be5f3406
  298. ->dest;if(DATARMNETa8b2566e6a(DATARMNET543491eb0f,&DATARMNET3396919a68,
  299. DATARMNET611d08d671)){if(DATARMNET0a4704e5e0(&DATARMNET3396919a68)){kfree_skb(
  300. DATARMNET543491eb0f);DATARMNET1dec89a127=RX_HANDLER_CONSUMED;DATARMNET5ca94dbc3c
  301. (DATARMNET0981317411);goto DATARMNETbf4095f79e;}DATARMNET5ca94dbc3c(
  302. DATARMNETd1ad664d00);goto DATARMNETbf4095f79e;}}else if(DATARMNET3396919a68.
  303. DATARMNET4924e79411==IPPROTO_ESP){struct ip_esp_hdr*DATARMNET568b3d4b19,
  304. DATARMNET3f4e206745;DATARMNET568b3d4b19=skb_header_pointer(DATARMNET543491eb0f,
  305. DATARMNET611d08d671,sizeof(*DATARMNET568b3d4b19),&DATARMNET3f4e206745);if(!
  306. DATARMNET568b3d4b19){DATARMNET5ca94dbc3c(DATARMNETf1f7e2c408);goto
  307. DATARMNETbf4095f79e;}DATARMNET3396919a68.DATARMNET906b2ee561=DATARMNET568b3d4b19
  308. ->spi;}else{goto DATARMNETbf4095f79e;}if(DATARMNET4eafcdee07(&
  309. DATARMNET3396919a68))goto DATARMNET1e5291b369;if(DATARMNET543491eb0f->mark==
  310. 131074){struct net_device*DATARMNET39542b437e=dev_get_by_name_rcu(&init_net,
  311. "\x64\x75\x6d\x6d\x79\x30");if(DATARMNET39542b437e){DATARMNET543491eb0f->dev=
  312. DATARMNET39542b437e;DATARMNET543491eb0f->mark=(0xd2d+202-0xdf7);}else{
  313. DATARMNET5ca94dbc3c(DATARMNET5c603ca4b0);}}goto DATARMNETbf4095f79e;
  314. DATARMNET1e5291b369:if(!DATARMNET4899053671(DATARMNET543491eb0f,
  315. DATARMNET2d4b4cfc9e))DATARMNET1dec89a127=RX_HANDLER_CONSUMED;DATARMNETbf4095f79e
  316. :rcu_read_unlock();return DATARMNET1dec89a127;}static int DATARMNET0ed065ddb7(
  317. struct notifier_block*DATARMNET272c159b3c,unsigned long DATARMNET7f045a1e6e,void
  318. *data){struct net_device*DATARMNET00dcb79bc4=netdev_notifier_info_to_dev(data);
  319. if(!DATARMNET00dcb79bc4||DATARMNETaba2beb199(DATARMNET00dcb79bc4->name,
  320. DATARMNET30500ba48c,IFNAMSIZ))return NOTIFY_DONE;switch(DATARMNET7f045a1e6e){
  321. case NETDEV_UNREGISTER:netdev_rx_handler_unregister(DATARMNET00dcb79bc4);break;
  322. case NETDEV_REGISTER:if(netdev_rx_handler_register(DATARMNET00dcb79bc4,
  323. DATARMNET37a92021f9,NULL))pr_err(
  324. "\x25\x73\x28\x29\x3a\x20\x52\x65\x67\x69\x73\x74\x65\x72\x69\x6e\x67\x20\x68\x61\x6e\x64\x6c\x65\x72\x20\x66\x61\x69\x6c\x65\x64" "\n"
  325. ,__func__);break;default:break;}return NOTIFY_DONE;}static int
  326. DATARMNET6512527d9c(struct notifier_block*DATARMNET272c159b3c,unsigned long
  327. DATARMNET7f045a1e6e,void*data){struct net_device*DATARMNET00dcb79bc4=
  328. netdev_notifier_info_to_dev(data);if(!DATARMNET00dcb79bc4||DATARMNETaba2beb199(
  329. DATARMNET00dcb79bc4->name,DATARMNET755f0f0df8,IFNAMSIZ))return NOTIFY_DONE;
  330. switch(DATARMNET7f045a1e6e){case NETDEV_UNREGISTER:netdev_rx_handler_unregister(
  331. DATARMNET00dcb79bc4);break;case NETDEV_REGISTER:if(netdev_rx_handler_register(
  332. DATARMNET00dcb79bc4,DATARMNET37a92021f9,NULL))pr_err(
  333. "\x25\x73\x28\x29\x3a\x20\x52\x65\x67\x69\x73\x74\x65\x72\x69\x6e\x67\x20\x68\x61\x6e\x64\x6c\x65\x72\x20\x66\x61\x69\x6c\x65\x64" "\n"
  334. ,__func__);break;default:break;}return NOTIFY_DONE;}static struct notifier_block
  335. DATARMNETa1726000d8={.notifier_call=DATARMNET0ed065ddb7,};static struct
  336. notifier_block DATARMNET2c4484aef5={.notifier_call=DATARMNET6512527d9c,};static
  337. int DATARMNET116f9a46aa(void){int DATARMNET268a8314cf;if(!DATARMNET30500ba48c[
  338. (0xd2d+202-0xdf7)])return(0xd2d+202-0xdf7);DATARMNET268a8314cf=
  339. unregister_netdevice_notifier(&DATARMNETa1726000d8);if(!DATARMNET268a8314cf)
  340. DATARMNET30500ba48c[(0xd2d+202-0xdf7)]=(0xd2d+202-0xdf7);return
  341. DATARMNET268a8314cf;}static int DATARMNET56777c5470(void){int
  342. DATARMNET268a8314cf;if(!DATARMNET755f0f0df8[(0xd2d+202-0xdf7)])return
  343. (0xd2d+202-0xdf7);DATARMNET268a8314cf=unregister_netdevice_notifier(&
  344. DATARMNET2c4484aef5);if(!DATARMNET268a8314cf)DATARMNET755f0f0df8[
  345. (0xd2d+202-0xdf7)]=(0xd2d+202-0xdf7);return DATARMNET268a8314cf;}static void
  346. DATARMNETbb4efa5b3d(void){DATARMNET116f9a46aa();DATARMNET1f36d4813c();
  347. DATARMNET8c0e010dfb();DATARMNETe5b03fe375();DATARMNETad43e44c7e();
  348. DATARMNET56fde5181e();}static int DATARMNET38ebe8f319(struct sk_buff*
  349. DATARMNET543491eb0f,int DATARMNET1faf88208b){if(!pskb_may_pull(
  350. DATARMNET543491eb0f,DATARMNET1faf88208b))return-ENOMEM;if(!skb_cloned(
  351. DATARMNET543491eb0f)||skb_clone_writable(DATARMNET543491eb0f,DATARMNET1faf88208b
  352. ))return(0xd2d+202-0xdf7);return pskb_expand_head(DATARMNET543491eb0f,
  353. (0xd2d+202-0xdf7),(0xd2d+202-0xdf7),GFP_ATOMIC);}static void DATARMNET9a8d756527
  354. (__sum16*DATARMNETc2284e5688,struct sk_buff*DATARMNET543491eb0f,__be32
  355. DATARMNET9080427d4e,__be32 DATARMNETc0e620c987,bool DATARMNETcb0345b337){if(
  356. DATARMNET543491eb0f->ip_summed!=CHECKSUM_PARTIAL){csum_replace4(
  357. DATARMNETc2284e5688,DATARMNET9080427d4e,DATARMNETc0e620c987);if(
  358. DATARMNET543491eb0f->ip_summed==CHECKSUM_COMPLETE&&DATARMNETcb0345b337){
  359. DATARMNET543491eb0f->csum=csum_sub(~(DATARMNET543491eb0f->csum),(__wsum)
  360. DATARMNET9080427d4e);DATARMNET543491eb0f->csum=~csum_add(DATARMNET543491eb0f->
  361. csum,(__wsum)DATARMNETc0e620c987);}}else if(DATARMNETcb0345b337){__wsum
  362. DATARMNET0386f6f82a=csum_unfold(*DATARMNETc2284e5688);DATARMNET0386f6f82a=
  363. csum_sub(DATARMNET0386f6f82a,(__wsum)DATARMNET9080427d4e);DATARMNET0386f6f82a=
  364. csum_add(DATARMNET0386f6f82a,(__wsum)DATARMNETc0e620c987);*DATARMNETc2284e5688=~
  365. csum_fold(DATARMNET0386f6f82a);}}static void DATARMNETc03853e26d(__sum16*
  366. DATARMNETc2284e5688,struct sk_buff*DATARMNET543491eb0f,__be16
  367. DATARMNET9080427d4e,__be16 DATARMNETc0e620c987,bool DATARMNETcb0345b337){
  368. DATARMNET9a8d756527(DATARMNETc2284e5688,DATARMNET543491eb0f,(__be32)
  369. DATARMNET9080427d4e,(__be32)DATARMNETc0e620c987,DATARMNETcb0345b337);}static
  370. unsigned int DATARMNET7060ca9a47(u8*DATARMNET54fdee4fda,unsigned int
  371. DATARMNET6396f657b3){if(DATARMNET54fdee4fda[DATARMNET6396f657b3]==TCPOPT_EOL||
  372. DATARMNET54fdee4fda[DATARMNET6396f657b3]==TCPOPT_NOP||!DATARMNET54fdee4fda[
  373. DATARMNET6396f657b3+(0xd26+209-0xdf6)])return(0xd26+209-0xdf6);return
  374. DATARMNET54fdee4fda[DATARMNET6396f657b3+(0xd26+209-0xdf6)];}void
  375. DATARMNET7ca470d54b(struct sk_buff*DATARMNET543491eb0f,u32 DATARMNET1464100e7a){
  376. struct tcphdr*DATARMNET668416551c;u8 DATARMNET630b15102e[(0xf07+1090-0x130d)];u8
  377. *DATARMNET54fdee4fda;__be16 DATARMNETdda9f3dd51=htons((0xef7+3481-0x181c));u16
  378. DATARMNET611d08d671;u16 DATARMNET7fa3427233;unsigned int DATARMNETefc9df3df2;
  379. __be32 DATARMNET572f0d1999;u8 DATARMNET0d956cc77a;if(DATARMNET543491eb0f->
  380. protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
  381. DATARMNET0d956cc77a=(0xd11+230-0xdf3);DATARMNET86f1f2cdc9=skb_header_pointer(
  382. DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),&
  383. DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9)goto DATARMNET268a8314cf;if(
  384. DATARMNET86f1f2cdc9->protocol!=IPPROTO_TCP)goto DATARMNETed6aa0a77f;
  385. DATARMNET611d08d671=DATARMNET86f1f2cdc9->ihl*(0xd11+230-0xdf3);}else if(
  386. DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
  387. DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;__be16 frag_off;u8 DATARMNETa8d8445982;
  388. DATARMNET0d956cc77a=(0xd03+244-0xdf1);DATARMNETbf55123e5b=skb_header_pointer(
  389. DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNETbf55123e5b),&
  390. DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto DATARMNET268a8314cf;
  391. DATARMNETa8d8445982=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
  392. ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
  393. DATARMNETa8d8445982,&frag_off);if(DATARMNET611d08d671<(0xd2d+202-0xdf7))goto
  394. DATARMNET268a8314cf;if(DATARMNETa8d8445982!=IPPROTO_TCP)goto DATARMNETed6aa0a77f
  395. ;}else{goto DATARMNET268a8314cf;}DATARMNET668416551c=skb_header_pointer(
  396. DATARMNET543491eb0f,DATARMNET611d08d671,sizeof(*DATARMNET668416551c),&
  397. DATARMNET630b15102e);if(!DATARMNET668416551c)goto DATARMNET268a8314cf;if(!(
  398. tcp_flag_word(DATARMNET668416551c)&DATARMNET1464100e7a))goto DATARMNETed6aa0a77f
  399. ;DATARMNET7fa3427233=DATARMNET668416551c->doff*(0xd11+230-0xdf3);if(
  400. DATARMNET38ebe8f319(DATARMNET543491eb0f,DATARMNET611d08d671+DATARMNET7fa3427233)
  401. )goto DATARMNET268a8314cf;DATARMNET668416551c=skb_header_pointer(
  402. DATARMNET543491eb0f,DATARMNET611d08d671,DATARMNET7fa3427233,&DATARMNET630b15102e
  403. );if(!DATARMNET668416551c)goto DATARMNET268a8314cf;DATARMNET54fdee4fda=(u8*)
  404. DATARMNET668416551c;for(DATARMNETefc9df3df2=sizeof(*DATARMNET668416551c);
  405. DATARMNETefc9df3df2<DATARMNET7fa3427233;DATARMNETefc9df3df2+=DATARMNET7060ca9a47
  406. (DATARMNET54fdee4fda,DATARMNETefc9df3df2)){__be16*DATARMNETb3032fac16;if(
  407. DATARMNET54fdee4fda[DATARMNETefc9df3df2]!=TCPOPT_MSS||DATARMNET54fdee4fda[
  408. DATARMNETefc9df3df2+(0xd26+209-0xdf6)]!=TCPOLEN_MSS)continue;DATARMNETb3032fac16
  409. =(__be16*)(&DATARMNET54fdee4fda[DATARMNETefc9df3df2+(0xd1f+216-0xdf5)]);if(*
  410. DATARMNETb3032fac16<=DATARMNETdda9f3dd51)goto DATARMNETed6aa0a77f;
  411. DATARMNETc03853e26d(&DATARMNET668416551c->check,DATARMNET543491eb0f,*
  412. DATARMNETb3032fac16,DATARMNETdda9f3dd51,false);*DATARMNETb3032fac16=
  413. DATARMNETdda9f3dd51;DATARMNET5ca94dbc3c(DATARMNETef2af4f071);return;}if(
  414. DATARMNET543491eb0f->len>DATARMNET611d08d671+DATARMNET7fa3427233||
  415. DATARMNET7fa3427233>=(0xf07+1090-0x130d))goto DATARMNETed6aa0a77f;if(
  416. skb_tailroom(DATARMNET543491eb0f)<TCPOLEN_MSS){if(pskb_expand_head(
  417. DATARMNET543491eb0f,(0xd2d+202-0xdf7),TCPOLEN_MSS-skb_tailroom(
  418. DATARMNET543491eb0f),GFP_ATOMIC))goto DATARMNET268a8314cf;DATARMNET668416551c=
  419. skb_header_pointer(DATARMNET543491eb0f,DATARMNET611d08d671,DATARMNET7fa3427233,&
  420. DATARMNET630b15102e);if(!DATARMNET668416551c)goto DATARMNET268a8314cf;}
  421. DATARMNETc03853e26d(&DATARMNET668416551c->check,DATARMNET543491eb0f,htons(
  422. DATARMNET543491eb0f->len-DATARMNET611d08d671),htons(DATARMNET543491eb0f->len-
  423. DATARMNET611d08d671+TCPOLEN_MSS),true);DATARMNET54fdee4fda=skb_put(
  424. DATARMNET543491eb0f,TCPOLEN_MSS);if(DATARMNET0d956cc77a==(0xd11+230-0xdf3))
  425. DATARMNETdda9f3dd51=htons(min_t(u16,ntohs(DATARMNETdda9f3dd51),
  426. (0x545+2434-0xcaf)));else DATARMNETdda9f3dd51=htons(min_t(u16,ntohs(
  427. DATARMNETdda9f3dd51),(0xbf7+4058-0x170d)));DATARMNET54fdee4fda[(0xd2d+202-0xdf7)
  428. ]=TCPOPT_MSS;DATARMNET54fdee4fda[(0xd26+209-0xdf6)]=TCPOLEN_MSS;*((__be16*)(
  429. DATARMNET54fdee4fda+(0xd1f+216-0xdf5)))=DATARMNETdda9f3dd51;DATARMNET9a8d756527(
  430. &DATARMNET668416551c->check,DATARMNET543491eb0f,(0xd2d+202-0xdf7),*((__be32*)
  431. DATARMNET54fdee4fda),false);DATARMNET572f0d1999=tcp_flag_word(
  432. DATARMNET668416551c);DATARMNET668416551c->doff++;DATARMNET9a8d756527(&
  433. DATARMNET668416551c->check,DATARMNET543491eb0f,DATARMNET572f0d1999,tcp_flag_word
  434. (DATARMNET668416551c),false);if(DATARMNET0d956cc77a==(0xd11+230-0xdf3)){struct
  435. iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);csum_replace2(&
  436. DATARMNET86f1f2cdc9->check,DATARMNET86f1f2cdc9->tot_len,htons(
  437. DATARMNET543491eb0f->len));DATARMNET86f1f2cdc9->tot_len=htons(
  438. DATARMNET543491eb0f->len);}else{struct ipv6hdr*DATARMNETbf55123e5b=ipv6_hdr(
  439. DATARMNET543491eb0f);DATARMNETbf55123e5b->payload_len=htons(ntohs(
  440. DATARMNETbf55123e5b->payload_len)+TCPOLEN_MSS);}DATARMNET5ca94dbc3c(
  441. DATARMNETef2af4f071);return;DATARMNETed6aa0a77f:DATARMNET5ca94dbc3c(
  442. DATARMNETebc1b87b7d);return;DATARMNET268a8314cf:DATARMNET5ca94dbc3c(
  443. DATARMNET21bdbe6a27);return;}int DATARMNET4899053671(struct sk_buff*
  444. DATARMNET543491eb0f,struct DATARMNET8d3c2559ca*DATARMNET54338da2ff){struct
  445. net_device*DATARMNET00dcb79bc4;DATARMNET00dcb79bc4=READ_ONCE(DATARMNET54338da2ff
  446. ->DATARMNET57656f6f2f);if(!DATARMNET00dcb79bc4){DATARMNET5ca94dbc3c(
  447. DATARMNET591885a019);return-ENODEV;}DATARMNET7ca470d54b(DATARMNET543491eb0f,
  448. TCP_FLAG_SYN|TCP_FLAG_ACK);DATARMNET543491eb0f->dev=DATARMNET00dcb79bc4;
  449. dev_queue_xmit(DATARMNET543491eb0f);DATARMNET5ca94dbc3c(DATARMNETf4c2a83526);
  450. return(0xd2d+202-0xdf7);}bool DATARMNET4eafcdee07(struct DATARMNETb89ecedefc*
  451. DATARMNET3396919a68)__must_hold(RCU){struct DATARMNET745f724205*
  452. DATARMNET63b1a086d5;hash_for_each_possible_rcu(DATARMNET1903907456,
  453. DATARMNET63b1a086d5,DATARMNETe8608dd267,DATARMNET3396919a68->DATARMNETf0d9de7e2f
  454. ){if(DATARMNET1e31b22eff(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
  455. DATARMNET3396919a68))return true;}return false;}int DATARMNET53f12a0f7d(struct
  456. DATARMNETb89ecedefc*DATARMNETcadc2ef9aa,u32 DATARMNETef77661260,struct genl_info
  457. *DATARMNET54338da2ff){int DATARMNET268a8314cf=(0xd2d+202-0xdf7);u32
  458. DATARMNETefc9df3df2;mutex_lock(&DATARMNET63a2b7773e);for(DATARMNETefc9df3df2=
  459. (0xd2d+202-0xdf7);DATARMNETefc9df3df2<DATARMNETef77661260;DATARMNETefc9df3df2++)
  460. {DATARMNET268a8314cf=DATARMNET0b72d312f9(&DATARMNETcadc2ef9aa[
  461. DATARMNETefc9df3df2],DATARMNET54338da2ff);if(DATARMNET268a8314cf){if(
  462. DATARMNET268a8314cf==-EEXIST)DATARMNET268a8314cf=(0xd2d+202-0xdf7);else break;}
  463. else{DATARMNET7c77d83017++;}}mutex_unlock(&DATARMNET63a2b7773e);return
  464. DATARMNET268a8314cf;}int DATARMNET07f6485c9b(struct DATARMNETb89ecedefc*
  465. DATARMNETcadc2ef9aa,u32 DATARMNETef77661260,struct genl_info*DATARMNET54338da2ff
  466. ){int DATARMNET268a8314cf=(0xd2d+202-0xdf7);u32 DATARMNETefc9df3df2;mutex_lock(&
  467. DATARMNET63a2b7773e);for(DATARMNETefc9df3df2=(0xd2d+202-0xdf7);
  468. DATARMNETefc9df3df2<DATARMNETef77661260;DATARMNETefc9df3df2++){
  469. DATARMNET268a8314cf=DATARMNET79343e3135(&DATARMNETcadc2ef9aa[DATARMNETefc9df3df2
  470. ],DATARMNET54338da2ff);if(DATARMNET268a8314cf){if(DATARMNET268a8314cf==-ESRCH)
  471. DATARMNET268a8314cf=(0xd2d+202-0xdf7);else break;}else{DATARMNET7c77d83017--;}}
  472. mutex_unlock(&DATARMNET63a2b7773e);return DATARMNET268a8314cf;}int
  473. DATARMNET97b2388e63(char*DATARMNET852d4d00e2,struct genl_info*
  474. DATARMNET54338da2ff){int DATARMNET268a8314cf;if(!DATARMNETaba2beb199(
  475. DATARMNET30500ba48c,DATARMNET852d4d00e2,IFNAMSIZ)){GENL_SET_ERR_MSG(
  476. DATARMNET54338da2ff,
  477. "\x44\x65\x76\x69\x63\x65\x20\x69\x73\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x73\x65\x74"
  478. );return(0xd2d+202-0xdf7);}DATARMNET268a8314cf=DATARMNET116f9a46aa();if(
  479. DATARMNET268a8314cf){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  480. "\x4b\x65\x72\x6e\x65\x6c\x20\x65\x72\x72\x6f\x72\x2c\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x75\x6e\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  481. );return DATARMNET268a8314cf;}strlcpy(DATARMNET30500ba48c,DATARMNET852d4d00e2,
  482. IFNAMSIZ);DATARMNET268a8314cf=register_netdevice_notifier(&DATARMNETa1726000d8);
  483. if(DATARMNET268a8314cf){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  484. "\x4b\x65\x72\x6e\x65\x6c\x20\x65\x72\x72\x6f\x72\x2c\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  485. );DATARMNET30500ba48c[(0xd2d+202-0xdf7)]=(0xd2d+202-0xdf7);}return
  486. DATARMNET268a8314cf;}int DATARMNET92e5468fc5(char*DATARMNET852d4d00e2,struct
  487. genl_info*DATARMNET54338da2ff){int DATARMNET268a8314cf;if(!DATARMNETaba2beb199(
  488. DATARMNET755f0f0df8,DATARMNET852d4d00e2,IFNAMSIZ)){GENL_SET_ERR_MSG(
  489. DATARMNET54338da2ff,
  490. "\x44\x65\x76\x69\x63\x65\x20\x69\x73\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x73\x65\x74"
  491. );return(0xd2d+202-0xdf7);}DATARMNET268a8314cf=DATARMNET56777c5470();if(
  492. DATARMNET268a8314cf){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  493. "\x4b\x65\x72\x6e\x65\x6c\x20\x65\x72\x72\x6f\x72\x2c\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x75\x6e\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  494. );return DATARMNET268a8314cf;}strlcpy(DATARMNET755f0f0df8,DATARMNET852d4d00e2,
  495. IFNAMSIZ);DATARMNET268a8314cf=register_netdevice_notifier(&DATARMNET2c4484aef5);
  496. if(DATARMNET268a8314cf){GENL_SET_ERR_MSG(DATARMNET54338da2ff,
  497. "\x4b\x65\x72\x6e\x65\x6c\x20\x65\x72\x72\x6f\x72\x2c\x20\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x66\x61\x69\x6c\x65\x64"
  498. );DATARMNET755f0f0df8[(0xd2d+202-0xdf7)]=(0xd2d+202-0xdf7);}return
  499. DATARMNET268a8314cf;}int DATARMNETa903cd5994(char*DATARMNET852d4d00e2,struct
  500. genl_info*DATARMNET54338da2ff){return DATARMNET116f9a46aa();}int
  501. DATARMNET9d7bb9a63d(char*DATARMNET852d4d00e2,struct genl_info*
  502. DATARMNET54338da2ff){return DATARMNET56777c5470();}int DATARMNET947eb110d2(
  503. struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e,struct genl_info*
  504. DATARMNET54338da2ff){int DATARMNET268a8314cf;mutex_lock(&DATARMNETf46fb02ac6);
  505. DATARMNET268a8314cf=DATARMNET1ac13d5a2a(DATARMNET2d4b4cfc9e,DATARMNET54338da2ff)
  506. ;mutex_unlock(&DATARMNETf46fb02ac6);return DATARMNET268a8314cf;}int
  507. DATARMNETb8b35fdc18(struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e,struct
  508. genl_info*DATARMNET54338da2ff){int DATARMNET268a8314cf;mutex_lock(&
  509. DATARMNETf46fb02ac6);DATARMNET268a8314cf=DATARMNET6b6be8e27f(DATARMNET2d4b4cfc9e
  510. ,DATARMNET54338da2ff);mutex_unlock(&DATARMNETf46fb02ac6);return
  511. DATARMNET268a8314cf;}int DATARMNET8d5a5a7047(__be16 DATARMNETf0d9de7e2f,struct
  512. genl_info*DATARMNET54338da2ff){int DATARMNET268a8314cf;mutex_lock(&
  513. DATARMNET954bef55d0);DATARMNET268a8314cf=DATARMNET3b10d1c14b(DATARMNETf0d9de7e2f
  514. ,DATARMNET54338da2ff);mutex_unlock(&DATARMNET954bef55d0);return
  515. DATARMNET268a8314cf;}int DATARMNETc97c6a4265(__be16 DATARMNETf0d9de7e2f,struct
  516. genl_info*DATARMNET54338da2ff){int DATARMNET268a8314cf;mutex_lock(&
  517. DATARMNET954bef55d0);DATARMNET268a8314cf=DATARMNETc023021120(DATARMNETf0d9de7e2f
  518. ,DATARMNET54338da2ff);mutex_unlock(&DATARMNET954bef55d0);return
  519. DATARMNET268a8314cf;}bool DATARMNETa8b2566e6a(struct sk_buff*DATARMNET543491eb0f
  520. ,struct DATARMNETb89ecedefc*DATARMNET3396919a68,int DATARMNET611d08d671){struct
  521. udphdr*DATARMNET75be5f3406,DATARMNETc82d2f4e16;__be32*DATARMNETdf2dbc641f,
  522. DATARMNET6c56902362;if(DATARMNET3396919a68->DATARMNET4924e79411!=IPPROTO_UDP||!
  523. DATARMNET7490934ea9(DATARMNET3396919a68->DATARMNETf0d9de7e2f))return false;
  524. DATARMNET75be5f3406=skb_header_pointer(DATARMNET543491eb0f,DATARMNET611d08d671,
  525. sizeof(*DATARMNET75be5f3406),&DATARMNETc82d2f4e16);if(!DATARMNET75be5f3406)
  526. return false;if(DATARMNET75be5f3406->source==htons((0xdf7+6169-0x241c)))return
  527. false;DATARMNETdf2dbc641f=skb_header_pointer(DATARMNET543491eb0f,
  528. DATARMNET611d08d671+sizeof(*DATARMNET75be5f3406),sizeof(*DATARMNETdf2dbc641f),&
  529. DATARMNET6c56902362);if(!DATARMNETdf2dbc641f)return false;return!!(*
  530. DATARMNETdf2dbc641f);}bool DATARMNET0a4704e5e0(struct DATARMNETb89ecedefc*
  531. DATARMNET3396919a68){return DATARMNETa96214b53c(DATARMNET3396919a68->
  532. DATARMNETf0d9de7e2f);}int DATARMNET4c1c11d8a5(struct DATARMNETe117226f58*
  533. DATARMNET3396919a68){int DATARMNET268a8314cf;mutex_lock(&DATARMNET38726379d1);
  534. DATARMNET268a8314cf=DATARMNET51f60f2fd3(DATARMNET3396919a68);mutex_unlock(&
  535. DATARMNET38726379d1);return DATARMNET268a8314cf;}int DATARMNET56fde5181e(void){
  536. int DATARMNET268a8314cf;mutex_lock(&DATARMNET38726379d1);DATARMNET268a8314cf=
  537. DATARMNETb9c7621157();mutex_unlock(&DATARMNET38726379d1);return
  538. DATARMNET268a8314cf;}static int DATARMNETed41dd2d3f(struct sk_buff*
  539. DATARMNET543491eb0f,struct DATARMNETb89ecedefc*DATARMNET3396919a68){struct
  540. nlattr*DATARMNET4186ba2d8f;DATARMNET4186ba2d8f=nla_nest_start(
  541. DATARMNET543491eb0f,DATARMNET4e9cd7b8bf);if(!DATARMNET4186ba2d8f)return-EINVAL;
  542. if(nla_put(DATARMNET543491eb0f,DATARMNET8c062d7709,sizeof(*DATARMNET3396919a68),
  543. DATARMNET3396919a68)){nla_nest_cancel(DATARMNET543491eb0f,DATARMNET4186ba2d8f);
  544. return-EINVAL;}nla_nest_end(DATARMNET543491eb0f,DATARMNET4186ba2d8f);return
  545. (0xd2d+202-0xdf7);}int DATARMNETe14c875532(struct sk_buff**DATARMNET89946cec52,
  546. struct genl_family*DATARMNET4a4aca7220,struct genl_info*DATARMNET54338da2ff){
  547. struct DATARMNET745f724205*DATARMNET63b1a086d5;struct sk_buff*
  548. DATARMNET49b2094b56=NULL;struct nlattr*DATARMNETa5d4001a4a;int
  549. DATARMNETd6c25fe6b5;int DATARMNET268a8314cf=(0xd2d+202-0xdf7);void*
  550. DATARMNET9eab1e957c;int DATARMNET5c2fd31d7b;mutex_lock(&DATARMNET63a2b7773e);
  551. DATARMNETd6c25fe6b5=nla_total_size(nla_total_size(sizeof(DATARMNET63b1a086d5->
  552. DATARMNET54338da2ff))*DATARMNET7c77d83017);DATARMNET49b2094b56=genlmsg_new(
  553. DATARMNETd6c25fe6b5,GFP_KERNEL);if(!DATARMNET49b2094b56)return-ENOMEM;
  554. DATARMNET9eab1e957c=genlmsg_put_reply(DATARMNET49b2094b56,DATARMNET54338da2ff,
  555. DATARMNET4a4aca7220,(0xd2d+202-0xdf7),DATARMNET7c479706fb);if(!
  556. DATARMNET9eab1e957c){kfree(DATARMNET49b2094b56);return-EINVAL;}
  557. DATARMNETa5d4001a4a=nla_nest_start(DATARMNET49b2094b56,DATARMNET4e9cd7b8bf);if(!
  558. DATARMNETa5d4001a4a){kfree(DATARMNET49b2094b56);return-EINVAL;}hash_for_each(
  559. DATARMNET1903907456,DATARMNET5c2fd31d7b,DATARMNET63b1a086d5,DATARMNETe8608dd267)
  560. DATARMNETed41dd2d3f(DATARMNET49b2094b56,&DATARMNET63b1a086d5->
  561. DATARMNET54338da2ff);nla_nest_end(DATARMNET49b2094b56,DATARMNETa5d4001a4a);
  562. genlmsg_end(DATARMNET49b2094b56,DATARMNET9eab1e957c);*DATARMNET89946cec52=
  563. DATARMNET49b2094b56;mutex_unlock(&DATARMNET63a2b7773e);return
  564. DATARMNET268a8314cf;}int DATARMNET078f6bd384(void){DATARMNETbb4efa5b3d();return
  565. (0xd2d+202-0xdf7);}void DATARMNETfae36afa03(void){DATARMNETbb4efa5b3d();}char*
  566. DATARMNET934406764d(void){return DATARMNET30500ba48c;}char*DATARMNETe447822105(
  567. void){return DATARMNET755f0f0df8;}int DATARMNETaba2beb199(const char*
  568. DATARMNETf6f1ac8bbf,const char*DATARMNET8faed3a82a,size_t DATARMNET1dfbbc30a5){
  569. while(DATARMNET1dfbbc30a5--){if(*DATARMNETf6f1ac8bbf!=*DATARMNET8faed3a82a)
  570. return((unsigned char)*DATARMNETf6f1ac8bbf-(unsigned char)*DATARMNET8faed3a82a);
  571. DATARMNETf6f1ac8bbf++;DATARMNET8faed3a82a++;if(!(*DATARMNETf6f1ac8bbf))break;}
  572. return(0xd2d+202-0xdf7);}