2012-04-21 15 views
1

コード月が属するip_hdr-> SADDR手段のLinuxのnetfilterフック関数から抽出さnetfilterのフック関数メモリ参照が

char ipAddr[] = {192, 168, 88, 2}; 
struct iphdr *ip_hdr = (struct iphdr*)(some_valid_eth_hdr_pointer + 1); 
if (0 == memcmp((void*)(ip_hdr->saddr), (void*)ipAddr, 4)) /*memcmp cause my whole system crashed*/ 
{ 
    printk("ip source addr matched\n"); 
} 

コードスニペットを見てください。私のシステムをクラッシュカーネル空間のメモリ、と私はかなりip_hdrが有効なメモリを指していることを確信しています。まだ問題は何か分からないので、私を助けてください。

ありがとうございます!

答えて

1

さて、ここで問題です:

memcmp((void*)(ip_hdr->saddr), ... 

これは、ポインタとしてソースIPアドレスを解釈します。あなたがしたいことはこれでした:

memcmp(&ip_hdr->saddr, ...) 
+0

OMG、私はそれを試してみましょう。どうもありがとうございました – Tracy