From 8fde5b9f622fbc71120cf5b937414272ecd58c3b Mon Sep 17 00:00:00 2001 From: greyia Date: Sun, 21 Aug 2016 23:40:19 -0700 Subject: [PATCH] NULL Check --- post.c | 33 ++++++++++++++++++++++++++------- post.ko | Bin 375287 -> 373815 bytes post.mod.o | Bin 62384 -> 62384 bytes post.o | Bin 316528 -> 315056 bytes 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/post.c b/post.c index 32c8270..a7464db 100755 --- a/post.c +++ b/post.c @@ -17,6 +17,7 @@ #include #define DRIVER_AUTHOR "a_r_g_v" #define DRIVER_DESC "sugoi" +#define ADD_VLAN 50 static struct nf_hook_ops arp_in_nfho; static struct nf_hook_ops arp_out_nfho; @@ -77,12 +78,18 @@ static unsigned int arp_in_hook_func(void *priv, // TCP Rewrite Checksum if(iph->protocol == 0x6) { struct tcphdr *tcph = tcp_hdr(skb); + if(tcph == NULL || tcph->check == NULL) { + return NF_ACCEPT; + } csum_replace2(&tcph->check, iph->daddr, htonl(daddr)); //printk(KERN_INFO "[After TCP DEST] tcp_check: %08x, old_check: %08x \n", tcph->check, old_check); } // UDP Rewrite Checksum else if (iph->protocol == 17) { struct udphdr *udph = udp_hdr(skb); + if(udph == NULL || udph->check == NULL) { + return NF_ACCEPT; + } csum_replace2(&udph->check, iph->daddr, htonl(daddr)); //printk(KERN_INFO "[After UDP DEST] udp_check: %08x, old_check: %08x \n", udph->check, old_check); } @@ -100,11 +107,17 @@ static unsigned int arp_in_hook_func(void *priv, // TCP, Calucate Checksum if(iph->protocol == 0x6) { struct tcphdr *tcph = tcp_hdr(skb); + if(tcph == NULL || tcph->check == NULL) { + return NF_ACCEPT; + } csum_replace2(&tcph->check, iph->saddr, htonl(saddr)); //printk(KERN_INFO "[After TCP SRC] tcp_check: %08x, old_check: %08x \n", tcph->check, old_check); // UDP, Calucate Checksum } else if (iph->protocol == 17) { struct udphdr *udph = udp_hdr(skb); + if(udph == NULL || udph->check == NULL) { + return NF_ACCEPT; + } csum_replace2(&udph->check, iph->saddr, htonl(saddr)); //printk(KERN_INFO "[After UDP SRC] udp_check: %08x, old_check: %08x \n", udph->check, old_check); } @@ -114,7 +127,7 @@ static unsigned int arp_in_hook_func(void *priv, } if(flag){ - skb->vlan_tci += 2015; + skb->vlan_tci += 2000 + ADD_VLAN; } @@ -143,7 +156,7 @@ static unsigned int arp_in_hook_func(void *priv, arpb->saddr[0] == 192 && arpb->saddr[1] == 168) { arpb->daddr[0] = arpb->saddr[0] = 10; arpb->daddr[1] = arpb->saddr[1] = team_id; - skb->vlan_tci += 2015; + skb->vlan_tci += 2000 + ADD_VLAN; } //printk(KERN_INFO "[After ARP IN] daddr %pI4, saddr %pI4 in:%s vlan_id: %d, team_id: %d \n", arpb->daddr, arpb->saddr, state->in->name, vlan_id, team_id); @@ -165,7 +178,7 @@ static unsigned int arp_out_hook_func(void *priv, // IP if (ehdr->h_proto == 0x0008) { struct iphdr *iph = ip_hdr(skb); - if (iph == NULL) { + if (iph == NULL || iph->daddr == NULL || iph->saddr == NULL) { return NF_ACCEPT; } @@ -198,11 +211,17 @@ static unsigned int arp_out_hook_func(void *priv, csum_replace2(&iph->check, iph->saddr, htonl(saddr)); if(iph->protocol == 0x6) { struct tcphdr *tcph = tcp_hdr(skb); - csum_replace2(&tcph->check, iph->daddr, htonl(daddr)); + if (tcph == NULL || tcph->check == NULL ) { + return NF_ACCEPT; + } + csum_replace2(&tcph->check, iph->saddr, htonl(saddr)); //printk(KERN_INFO "[After TCP DEST] tcp_check: %08x, old_check: %08x \n", tcph->check, old_check); } else if (iph->protocol == 17) { struct udphdr *udph = udp_hdr(skb); - csum_replace2(&udph->check, iph->daddr, htonl(daddr)); + if (udph == NULL || udph->check == NULL ) { + return NF_ACCEPT; + } + csum_replace2(&udph->check, iph->saddr, htonl(saddr)); //printk(KERN_INFO "[After UDP DEST] udp_check: %08x, old_check: %08x \n", udph->check, old_check); } iph->saddr = htonl(saddr); @@ -210,7 +229,7 @@ static unsigned int arp_out_hook_func(void *priv, } if(flag) { - skb->vlan_tci -= 15; + skb->vlan_tci -= ADD_VLAN; } if (vlan_id >= 2000) { skb->vlan_tci -= 2000; @@ -243,7 +262,7 @@ static unsigned int arp_out_hook_func(void *priv, arpb->saddr[0] == 10 && arpb->saddr[1] >= 0 && arpb->saddr[1] <= 15 ) { arpb->daddr[0] = arpb->saddr[0] = 192; arpb->daddr[1] = arpb->saddr[1] = 168; - skb->vlan_tci -= 15; + skb->vlan_tci -= ADD_VLAN; } diff --git a/post.ko b/post.ko index 70c0cb271ca1dda92cef011ffa50093844247918..ef62494406f733e21fa2ee39d5420b634061a354 100644 GIT binary patch delta 32040 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%0Akq(Hy_?cq1*N~kV5rD2iuD;q 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 F{|D5H*{=Wq delta 33292 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 U*GAP)55xb8ZRR<0BdXZ`AC3gBbN~PV diff --git a/post.mod.o b/post.mod.o index 575d72aa7d40a7276e01287712786ed2c640b4a8..201f17b7b1f63cd37f2708d2915b7f10b6d7e3a1 100644 GIT binary patch delta 36 scmdn+oO#1@<_X^7CZ;ZK#+Ih8P6m#y&K4F%7N(X)PNt3^%xUMn{QsWM2j-mb_jf<% zJkLDmneTRYDu20C$v{*2hoytMZ?K!YCC;bFX)AOUp0Zi%t*7GGl;ZfGwww#CR>X7ewBl#RVq4Cw zQ@)yJU3nQ{(4Mc4REJ%g$W_#@Hq_dYM6itN~IVw=2DWrLnw3+B;bU#|*MlHhVj{locOLH?% zXz*mqf1i-0`2k)D-l8_7m?K&0hFo*9)1G6jA(LO*l3gp7Y>i_}T(K=AzM$GsTAUSF z(CR3{YVb($t8Ib$!(3~9cK z!m7RFxM(o_Bw9lUarnQD&eHs&yTL@tcZsl=z%62g^9_qeg#SZ;mgdQ559^C9&t)v4KX75J zrum6}m_ zmzQyEu<3%^n=}d6AhwD8AKO=v#4?eagagq08m* z@@q8q1I*50!$!Sx8Z8Ocsw@mjbPwHb>mKIa$(1N2Tbqe@AU}%@hJWR-j^;xH7eQz) z>uNq6zX+mur}ow&=$Xg*nyMB-dM+ynY}2caa0rpp=N&?1n**}*Sp;lf#{A*gWy}u$ zk;j5y-%{p3;PlUUb4qOH0Zf-6jG)fIB{KM9a3_y-^*uIcF$%{*`U(~fPZY3j0g)ui zK7d}!Sa;Z7zyeIoi-o^`tYD)7|M^4KQq~y)SK`0MWh@|GdU`lRI`}jmt2jCG-<9&y zVhkfO7O5!@y4MK?=d(TmF*1NJi~s^dY3x(fIm3v8g~E3$Sa4;!on47 zczbp0-KuNP@?PDHY-XJwCD$x3#r3wW;L4F(AC_Etd%*t?U(zPL)gISFXXC`&jh$#HXp7q{*UG|uobc{&d0eD3!91e8hSJi&#QQG@6BlAm(QFMlQGt+1=6Oq^Pg0 zEZt|*W;PM#Y{Xk`$!6Bktrr699%$HvMBOI5*2#bU0EzLQL_aq*4-I$1P;+iZqu3h; zzbiwd9{*~21mi^*C^sG>qo53}BY?xqEi9Z}uPoid!gSWN@{8^4x53W6jOixx*^1jtAn|n&hkj0X{Qj#7&7?Dn-7;T(=H;Ql^`LDi@P4|(KvOJd zb={oj%tb7ZZ8I-*EH&^F-N#~{T!-iblXM^Ri_S^dy{1L!P9O7Hrvr5sjzs*V<}k-c znIH7yPGjvKoBd1XPBjepZQ~ZIoFzyc*SL*5=Sb}Tf;M#XmF0Fr+is4F8ghJ;`N1lr z8Zpc_>Qgjw*$~-_ z5-si$Z~j`s!!9$w?({1`-OsG;MGbS<%%5s|&E0uX8-sa%o6;TTVA#H&b#u-yYeQ?( zWF>FwdYaB`x}K`D7w6A5XE`1+_i$hief@f&`s_)+os5I$?2$O=Iufh!uqa`aIo?hs zoNKQwLYZJb9kxk>6S40vuJe{NO80S^JMp6PqM@pPE-K*6jl-C-t$tC6 zUZtRn3dLdtN1}Kg^5=v3?5}b!Pj?TRSMR2~cC-i0S42sAf043by|d&^9W;g;lD;Ns znt3Bsl(U}f^-5Pcn{pO<6`R6m^yT}}t;y%1@xdW0Ovyo(lzybw*tCza>)`rWA8sn&1OX@X(WWR1?A(Zt1XtFW`m?bRy4ExXKa%mobOA+9 z>Z4g1xcE>jgCagW0Lkl2WBk9ihzJHj=qY`8z??FXS4uZHyUz50$yx$Mr}WYOAsg{h zgRL*PxY)tB#iQIpvZ+utlSR`{Bvs|1T^WR&BqH(z{*${Tv>1G?_XCaLaT$)CRDm`3>r|# zwBrK^IE|lm>tPap`qym~VwWKKgx(XX@!A4OFPhRK

zpG)x)>KsWg7m0!GQnr&tb zV#`dAF|D$+%(S1Gc9>U=+hVF5x5fO;&k7!OQ(AYzh99rA$*b|e}?dBihQ-e zCuwPl!he!NrlP>_z`T_z@_!ewwi!aV=wUH?6gB*6YqYoB@J@)lLTX3AhHC7*__zV- zICB21__#{KJ@`p3Hd%~E$#{RlW%0@hk5lAl5uT{Xe@FN{fe&hPu#kvc#gN1SVzy$u zuPXF1QmgiYe@ZxymlvZ0$zN3D=Mnykf}bV46P^cPgX3HEP-h=8Xp3D6jq`%fQ}AXo zTCCu*IOSgO69RX(IhG2SNI_;fpB!9Q4B)L7JS2XP zz-Ro57(oiMAQ5CJPBHW{;i+EmB~Yhj!faBI=@*cp1&X0_gs<{~zYMM&nBP7(b72_Z8U9#|?VzG2?|r8f z`JP9G{1% zrrlKV>v;k<<2e{_G8<{`9xwQK1>Z&PrwZI@RE>X8=tZ;eq@wT^Dda2oH-xVyoF~BT zB$1sxihK*nzvUs1&($TQ@R6c$n-oraC}>(W$zS$@Ujz0U7WTGcE|lIIbfKH7ETF{i zC0wqeSIPZwMZT5r6a}}D{W$_}FYI>|?{Y<9Dk-cWTo!OFIlyCnENA;nCzJf^ihLT$ zAN0WSsx65c=>2Cb$O*+>8ri$z1#fk;$G2}Y`RRZsq3&_bCOZQayn^si0*A^! zFGA0G!PhDHCuH+p#T8VfXT)S{qGCcTp8oc0D3f{-Z2w%IP;Qa{q!P8#eWF8XlBk=ZuNMblC$bw9x zcpp*>4I>A0yx@x!JB!KAau0bd$W$`40dBmG1$o7TZ>MX$;9o0vI+^Q`?U}fP@Mtgi z6oI!FL@LZB1zC_XO5}OPP#!rb_JZ$F>>MIHZ+OUKLAH~jDhPc83sUdFx6{pD@IX9z zcc1ZEGB;GgKOp=uFStYC?FEqvg`^-0@)aerQ8DxhIe5zpeq6D`NWRGp57V$9sm42E zP5TmJ_Tc^grkg$fy0qaoZhL>9~KLGFXV9gJ)(JNLHO5O zu-X}@;PhpM?ntx=E^^w6hr7H9|1%JOnmQ&sONMNrGMg>733` zXtVI8<-tx)uT$v$p9}4+;NtY_3O$T6dmGrBNFPz?WA6&>¯i5C_6$&rG-rQmxC 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