私は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;
}
*私は
が見つかりました。 – Belgi