2011-06-23 6 views
3

私はLinuxカーネル(2.4)でいくつかのコードを扱っていますが、何らかの理由でkmallocが同じアドレスを返します(テストの途中でしかないと思います) 。私はkmalloc(つまりメモリはまだ使用中です)の呼び出しの間にkfreeへの呼び出しが行われていないことを確認しました。kmallocが同じアドレスを何度も返す[Linux 2.4]

多分私には記憶がありませんか? (kmallocはNULLを返しませんでした...)

このようなことが起こる可能性についてのアイデアはありますか?

おかげさまで、助けてくれてありがとう!

コード:

typedef struct 
{ 
    char* buffer; 
    int read_count; 
    int write_count; 
    struct semaphore read_sm; 
    struct semaphore write_sm; 
    int reader_ready; 
    int writer_ready; 
    int createTimeStamp; 
} data_buffer_t ; 

typedef struct vsf_t vsf_t; 

struct vsf_t 
{ 
    int minor; 
    int type; 
    int open_count; 
    int waiting_pid; 
    data_buffer_t* data; 
    list_t proc_list; 
    vsf_t* otherSide_vsf; 
    int real_create_time_stamp; 
}; 

int create_vsf(struct inode *inode, struct file *filp, struct vsf_command_parameters* parms) 
{ 
... 
    buff_data = allocate_buffer(); 
    if (buff_data == NULL) 
    { 
     kfree(this_vsfRead); 
     kfree(this_vsfWrite); 
     return -ENOMEM; 
    } 
... 
} 

data_buffer_t* allocate_buffer() 
{ 
... 
    data_buffer_t* this_buff = (data_buffer_t*)kmalloc(sizeof(data_buffer_t), GFP_KERNEL); 
    if (this_buff == NULL) 
    { 
     printk(KERN_WARNING "failure at allocating memory\n"); 
     return NULL; 
    } 
... 
return this_buff; 
} 

*私は

答えて

3

私にはわからない、すべてkmallocのとkfree後、私はkfreeはkmallocのの(つまり同じアドレスを返す)の間と呼ばれていないことを絶対的に確信して印刷しますkmallocのデータ構造はどのように見えますか?以前の二重空きがリンクされたバッファリストでサイクルを引き起こした場合、これが起こったと想像することができます。さらに解放されたバッファは、(再割り当てが可能な)別個のバッファにチェーンされていても、最後のバッファが無期限に返されると消えてしまいます。

+0

が見つかりました。 – Belgi

関連する問題