커널 네트워크 모듈 수정후 패닉..
글쓴이: jyj9782 / 작성시간: 목, 2004/01/29 - 12:53오전
하하 ^^:
커널문제인가 했더니요.. 네트워크 모듈문제였네요
pcnet32.c 모듈을 사용하는데요.
80포트를 필터링하고 로그에 남기는 간단한 코드를 몇줄 넣었는데요.
커널 패닉이 일어났어요..
왜그런지 좀 알려주세요
코드를 첨부합니다...
rx 받는 쪽 루틴에요..
static int pcnet32_rx(struct net_device *dev) { struct pcnet32_private *lp = dev->priv; struct iphdr *tmpip; // x90c
루틴넣었고요. x90c 적힌거..
/* x90c의 80포트 필터링 코드 */ tmpip = (struct iphdr *)skb->nh.iph; if(tmpip->protocol == IPPROTO_TCP){ if((skb->data[36] == 0x00) && (skb->data[37] == 0x50)){ printk("x90c FILTER : 80 port(tcp)\n"); netif_stop_queue(dev); } } /* 필터끝 */ skb_put (skb, pkt_len);
이렇게 skb_put 해서 ip로 올라가기전에 필터링해서..
80이면 뻑내버리는데요..
커널패닉이라니 왜그런거죠
패닉이미지도 포함합니다..
인터럽트 핸들러 패일이라고..
File attachments:
첨부 | 파일 크기 |
---|---|
error2.jpg | 904.84 KB |
Forums:
에고..리플이 업네요;;
에고..리플이 업네요;;
힘내세요.
위의 코드가 네트워크 디바이스 코드 인가요?그렇다면 이쪽 부분을 다시
위의 코드가 네트워크 디바이스 코드 인가요?
그렇다면 이쪽 부분을 다시 한번 보시는게..
저도 디바이스 코드에서 바로 넘겨 받은 sk_buff를 가지고 조작하다가
패닉이 많이 일어 났었는데.. 결론은...
nh.iph라는 ip헤더 필드를 사용하기에 너무 빨랐다는 점이 었습니다..
아마도 디바이스 코드라면 내부에서 skb->data 포인터가 가르키고 있는 지점을 잘 찾아 보셔야 할껍니다.
아마 최종적으로 가르키는 포인터는 nh.raw 값을 지니고 있을텐데..
이 시점에선 아직 nh.iph를 사용하기 이를겁니다.
이때 ip값이나 port값까지 찾아보시려면 입력 받은 패킷의 프로토콜 타입을 확인한 후에 헤더의 길이를 직접 계산 하셔서 직접 포인터를 움직여 접근 하셔야 할겁니다.
저는 이렇게 해서 해결을 했는데.. 다른 방법을 찾으셨다면 저에게도 알려주시면 감사하겠습니다.
답변감사합니다. 시도해보겠습니다. 근데 그 접근성공한 코드조각좀 리플해주
답변감사합니다. 시도해보겠습니다. 근데 그 접근성공한 코드조각좀 리플해주시겠어요? ^^
ipt 모듈에다가 코드넣어서, 필터는 되더군요. 필요없는 동작이지만 =.=; 그기선; 감사합니다..
힘내세요.
쓰레기 값이 들어있습니다.
sk_buff 의 nh.iph 는 할당시 초기화되지 않은 쓰레기 값이 들어있습니다.
tmpip = (struct iphdr *)skb->nh.iph;
라고 코딩하면 tmpip 에는 쓰레기 값이 들어갑니다.
그리고 삽입 코드 조각의 위치가 좋지 않습니다.
skb_put (skb, pkt_len);
라인 전에 삽입했는데 이건 좋은 위치가 아니라고 봅니다.
그 아래 코드인
skb->protocol=eth_type_trans(skb,dev);
라인 다음에 해보시면 좋을 듯 싶습니다.
eth_type_trans 함수 실행 중 skb->data 의 포인터가 바로
IP header 시작 위치로 변경됩니다.
skb->protocol=eth_type_trans(skb,dev);
tmpip = (struct iphdr *)skb->data;
라고 하심이 어떨지 ......
그리고 수신 ethernet header 내부의 타입이 IP 인지 먼저 확인해야
할겁니다. ethernet 으로 받아들이는 것이 IP 만이 아니거덩요
/***************************************
Being the one is just like being in love.
***************************************/
댓글 달기