Выполняя статический анализ ядра linux для утечек памяти, я столкнулся с интересным сценарием, когда я не могу найти выделение переменной. Распределение происходит в следующей функции (с помощью kmalloc вызова), как показано ниже:Потенциальная утечка памяти в ядре linux?
static int mounts_open_common(struct inode *inode, struct file *file,
int (*show)(struct seq_file *, struct vfsmount *)){
struct proc_mounts *p;
//some code//
*p = kmalloc(sizeof(struct proc_mounts), GFP_KERNEL);**
file->private_data = &p->m;//the allocated variable is escaped to file structure
//some code
}
Я ожидаю, что этот распределенную память будет зафиксирована на уровне:
static int mounts_release(struct inode *inode, struct file *file)
{
struct proc_mounts *p = proc_mounts(file->private_data);
path_put(&p->root);
put_mnt_ns(p->ns);
return seq_release(inode, file);
}
Но, кажется, эта функция обращается выделенный переменную, чтобы освободить некоторые ее внутренние элементы, но не переменную «p». Так где же освобождается память этой переменной? Если предполагается, что свободен в функции mounts_release, то это потенциальная утечка памяти.
что seq_release (inode, файл); вызов делает? –
Функция mounts_release() должна освобождать память, связанную с установленным устройством, насколько я знаю! – dsingh