2012-04-21 19 views
1

請看代碼段網絡過濾器鉤子函數存儲器參考墜毀我的系統

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"); 
} 

的代碼從一個Linux的網絡過濾器鉤子功能,這意味着ip_hdr-> SADDR可以屬於所提取的內核空間內存,我很確定ip_hdr指向有效的內存。仍然不知道問題是什麼,所以請幫助我。

在此先感謝!

回答

1

嗯,這裏是你的問題:

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

這解釋了源IP地址的指針。你想做的是這樣的:

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

OMG,真是遺憾,我會試一試。非常感謝你 – Tracy 2012-04-21 23:32:54