2009-07-16 10 views
0

動的タイマーを使用するカーネル(2.6.28)モジュールを作成しています。タイマーが切れるまで、これを約2秒間OK働く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 
} 

次のように私はtimer_list構造を使用しています。その後、システムがクラッシュします。私も同じ結果でこれを試してみました:

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

ハは、ちょうどあなたの反応を見た。スタック!ありがとう! –

関連する問題