【问题标题】:Accessing memory causes system to freeze访问内存导致系统死机
【发布时间】:2021-04-18 00:37:56
【问题描述】:

我正在尝试根据进程的vma's 从内存中读取值。但是,每当我尝试集体访问这些位置时,系统都会挂起然后崩溃。

void print_mmap(struct vm_area_struct *mmap)
{ 
        while (mmap != NULL)
        {
            printk(KERN_INFO "vm_start: %lu vm_end: %lu difference: %lu\n", mmap->vm_start, mmap->vm_end, (mmap->vm_end-mmap->vm_start));
            int i;
            for (i=0;mmap->vm_start<mmap->vm_end;i++)
            {
                (unsigned long*) (mmap->vm_start+i);
            }
            mmap = mmap->vm_next;
        }
}

为什么会发生这种情况?我在调用函数之前使用了 rcu_read_lock() 和 task_lock()。如果我从内存中只打印一个值或几个值,那么驱动程序运行得很好,它似乎只有在我从头到尾访问时才会挂起。有更好的方法吗?

【问题讨论】:

    标签: c module kernel driver


    【解决方案1】:

    我造成了一个无限循环。

    对于 (i=0;mmap->vm_startvm_end;i++)

    需要

    for (i=0;i vm_end-mmap->vm_start);i++)

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多