2009-07-16 5 views
0

동적 타이머를 사용하는 커널 (2.6.28) 모듈을 작성하고 있습니다. 다음과 같이 timer_list 구조를 사용하고 있습니다.Linux 커널 모듈 timer_list를 사용하면 시스템이 손상 될 수 있습니다.

struct timer_list our_timer; 
init_timer(&our_timer); 
our_timer.function = handleFlowTimer; 
our_timer.expires = jiffies + 2000; 
our_timer.data = 0; 
add_timer(&our_timer); 

void handleFlowTimer(unsigned long data) 
{ 
    //do nothing 
} 

타이머가 만료 될 때까지 약 2 초 동안 정상적으로 작동합니다. 그런 다음 시스템이 충돌합니다. 또한 같은 결과로 다음과 같이 시도했습니다.

struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0); 
mod_timer(&our_timer, jiffies + 2000); 

어떤 도움을 주시면 감사하겠습니다!

답변

5

our_timer은 스택에 할당되며 포인터를 전달합니다. our_timer이 범위를 벗어나 덮어 쓰게되고 2 초 후에 our_timer.function 값이 유효하지 않을 가능성이 큽니다.

our_timerstatic으로 변경하거나 kmalloc을 사용하십시오.

+0

하, 그냥 알아 낸 후 당신의 반응을 보았습니다. 젠장! 감사! –

관련 문제