커널내에서 skb를 queue로 저장하는 방법

글쓴이: 익명 사용자 / 작성시간: 금, 2011/09/16 - 9:33오후
커널내 IP Layer에서 NF_HOOK을 하여서
제가 작성한 모듈에다가 sk_buff를 저장하려고 합니다
커널에서 제공하는 skb_queue_tail함수를 사용해서 enqueue를 하고
특정 알고리즘을 돌려서 만족할 경우 skb_dequeue 함수를 이용해서 dequeue 하도록 모듈을 작성하였는데
모듈을 올리는 순간 컴퓨터가 다운이 되어버립니다.
아래는 간략히 쓴 main_hook함수 내의 코드입니다
unsigned int main_hook(unsigned int hooknum, struct sk_buff **skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff*)) { struct sk_buff *skb_temp; struct sk_buff_head *list_temp; skb_temp=skb_copy((*skb), GFP_ATOMIC); skb_queue_tail(list_temp, skb_temp); skb_temp=skb_dequeue(list_temp); return NF_ACCEPT; }
위와 같이 enqueue한뒤 dequeue하도록 작성하였는데 어디가 문제인지 모르겠습니다
도움 부탁드립니다
Forums:
list_temp 변수가 초기화 안 돼 있다는
list_temp 변수가 초기화 안 돼 있다는 컴파일러 경고가 나지 않던가요? 커널 웁스가 나는 건 가리키는 sk_buff_head 개체 없는 엄한 포인터를 skb_queue_tail()로 전달해서일 겁니다.
"모듈을 올리는 순간" 멎었다는 게 좀 걸리기도 하네요. 기본적으로 들어오는 패킷이 없는 호스트에서라면 초기화 루틴에 문제가 있는 걸 수도 있으니까요. 패닉 메시지의 스택 트레이스가 있다면 문제가 발생한 지점을 좀 더 정확하게 특정할 수 있을 텐데요...
$PWD `date`
댓글 달기