sk buff를 복사한후 메모리 해제시 문제가..발생하네요..도와주

jurlse의 이미지

sk buff 복사를 두가지 방법으로 다 해봤는데 해제하는 방법이 이상한지 잘 안되네요..

복사 방법 1.
skb_clone => sk buff만 복사한다.

my_skb = skb_clone(skb, GFP_ATOMIC) ==> 이렇게 복사한 후에 어케 해제해야되나요..??
1. kfree(my_skb)
2. kfree_skb(my_skb)
3. 기타..

복사 방법 2.
skb_copy => sk buff와 그가 가리키고 있는 data영역까지 복사한다.

my_skb = skb_copy(skb, GFP_ATOMIC)
1. kfree(my_skb->head)
kfree(my_skb)
2. kfree_skb(my_skb)
kfree_skb(my_skb->head)
3. 기타..

정말 급한일입니다..ㅠㅠ..고수님들..답변부탁드립니다..

salbang2의 이미지

skb_clone : sk_buff 구조체의 헤더만 복사하고, data field 는 공유합니다.
skb_copy : sk_buff 를 통체로 복사합니다.

이 둘의 메모리 해제는 kfree_skb(sk_buff) 입니다.

sk_buff 구조체의 users 필드가 이 구조체에 대한 reference 카운트인데, 이 값이 1일 때 kfree_skb 에서 메모리를 해제합니다. kfree_skb 의 구현을 보시면 쉽게 이해하실 겁니다.

kfree_skb 를 사용할 때 시스템 패닉이 발생한다면, 다른 부분에서 메모리가 overwrite 되는게 아닐까 싶습니다..

그럼....