메모리 할당 이후에 rebooting이 됩니다.
글쓴이: study / 작성시간: 금, 2016/07/01 - 3:15오전
아래는 지금 디버깅중인 리눅스 모듈에 포함된 함수인데요.
ip_session_add1()을 호출하면, 시스템이 잠시 멈춘것 같다가 리부팅이 됩니다.
하지만, ip_session_add2()를 호출하면, 그런 문제가 없네요.
차이점은 session 이라는 pointer가 가리키는 메모리를 스택에서 할당했는지, 아니면 힙에서 할당했는지
차이인 것 같은데요.
왜 이런 문제가 발생하는지 잘 모르겠네요 ㅜㅜ
struct ip_session { struct ip_session *next; __be32 addr; __be32 netmask; }; #define HASH_SESSION_SIZE 256 #define HASH_SESSION(addr) (ntohr(addr) & 0xFF) static struct ip_session *ip_sessions[HASH_SESSION_SIZE] = {}; static inline struct ip_session **ip_session_bucket(__be32 addr) { __be32 h0 = HASH_SESSION(addr); return (&(ip_sessions[h0])); } static int ip_session_add1(__be32 addr, __be32 netmask) { struct ip_session *session, **ms; write_lock(&session_lock); if((session = (struct ip_session *)kzalloc(sizeof(struct ip_session), GFP_ATOMIC)) == NULL) { write_unlock(&session_lock); return -1; } session->addr = addr; session->netmask = netmask; ms = ip_session_bucket(addr); session->next = *ms; *ms = session; write_unlock(&session_lock); return 0; } static int ip_session_add2(__be32 addr, __be32 netmask) { struct ip_session *session, **ms; struct ip_session s; write_lock(&session_lock); session = &s; session->addr = addr; session->netmask = netmask; ms = ip_session_bucket(addr); session->next = *ms; *ms = session; write_unlock(&session_lock); return 0; }
Forums:
한줄씩 지워보시면. 도움이 될지도 모릅니다.
ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
메모리 관련해서 조사 해보셔야 할 것
메모리 관련해서 조사 해보셔야 할 것 같은데요.
제때 해제 안해서 full 난다든지 아님 할당영역을 overwrite 하는 부분이 있는지.
커널모드는 권한이 많은만큼 할거 하지말거 다 할 수 있어서 디버깅이 꽤 어렵습니다.
Written By the Black Knight of Destruction
verbose모드로 부팅하셔서 어디서 어떻게 커널이
verbose모드로 부팅하셔서
어디서 어떻게 커널이 멈추는지 확인해봐야 알것 같습니다.
추측이지만 위의 코드 보다 session을 읽거나 삭제할때
할당되지 않은 부분 억세스 혹은 널포인트 억세스 같습니다.
코드로 보기엔, 오히려
코드로 보기엔, 오히려 ip_session_add2() 가 몹시 잘못된 것 같은데요.
ip_session_remove() 쯤에 해당하는 코드를 보면 정답이 손 번쩍 들고 기다리고 있을 것 같습니다.
댓글 달기