Read data of a page frame (linux) make freeze the system


 
Thread Tools Search this Thread
Operating Systems Linux Read data of a page frame (linux) make freeze the system
# 1  
Old 09-15-2009
Read data of a page frame (linux) make freeze the system

Hello,

I'm writing a linux driver that reading the data of a page frame of an process. But when I use it, it make immediately freeze the system. Can you help me? Thank for reading my question!

system: Ubuntu 9.04, kernel 2.6.28.15, Intel Duo

Code:
static int read_addr(int pid, unsigned long linear_addr, unsigned int n_bytes, char* buff){
    /* 
    pid: id of process
    linear_addr: linear address of memory region to be read
    n_bytes: nombre bytes to be read
    buff: the buffer containing the result
    */
    
    struct task_struct *task;
       struct mm_struct *mm = NULL;

    pgd_t *pgd;
    pmd_t *pmd; 
    pte_t *pte; 
    unsigned long pteval;

    int ret = 0;    

    for_each_process(task) {
        if ( task->pid == pid) {
            mm = task->mm;
        }
    }
    if(mm == NULL)
        return 1;
 
    spin_lock(&mm->page_table_lock); 
    
    pgd = pgd_offset(mm, linear_addr); 
    if (pgd_none(*pgd)) { ret = 2; goto out; }
    
    pmd = pmd_offset(pgd, linear_addr); 
    if (pmd_none(*pmd)) { ret = 3; goto out; }
    
    pte = pte_offset_map(pmd, linear_addr);
    
    if (pte_present(*pte)){
        unsigned long pteid = pte_index(linear_addr);
        pteval = pte_val(*pte);
        memcpy(buff, pteval + pteid, n_bytes);     
    } else { 
        ret = 4;
        goto out;
    } 
    pte_unmap(pte);
    spin_unlock(&mm->page_table_lock);
    return 0; 

 out:
     printk("error: %d\n", ret); 
    spin_unlock(&mm->page_table_lock);
    return ret;        
}


Last edited by hahai; 09-15-2009 at 09:47 AM..
# 2  
Old 09-15-2009
I'm not a kernel programmer, but this seems like a deadlock; I'd be concerned about pte_offset_map trying to do the same lock you made earlier.
# 3  
Old 09-15-2009
Thank Corona688.

I think that the problem does not locate at the pte_offset_map because it gives a positive result. In the code above, the command that make freeze the system is the memcpy

memcpy(buff, pteval + pteid, n_bytes);

But I don't know why.
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Programming

How to make use others' C library installed not for the system-wide (Ubuntu/Linux)?

I have downloaded and installed a library called htslib for specific bioinformatic use but not for the system (I'm using Ubuntu 18.04). Only parts of the library is needed for my exercise to parse data in a type called VCF format (basically tab-delimited file but contains many information in... (14 Replies)
Discussion started by: yifangt
14 Replies

2. UNIX for Dummies Questions & Answers

Read data from excel and upload into html page

Hi, I have requirement for automation, wanna confirm whether is it possible in shell scripting. 1) Need to read data from excel sheet 2) And upload the details in html page I know first requirement is possible by converting excel into csv form, but not sure about the second one. If... (6 Replies)
Discussion started by: stew
6 Replies

3. Cybersecurity

Freeze system

hello is there any freeze software for Linux-redhat system to prevent any changes on /root (wish open topic on right forum) (3 Replies)
Discussion started by: nimafire
3 Replies

4. UNIX for Advanced & Expert Users

how to make a full system backup excluding data and restoring it to a new system

Hi, In order to have a sand box machine that I could use to test some system changes before going to production state, I'd like to duplicate a working system to a virtual one. Ideally, I'd like to manage to do it this way : - Make a full system backup excluding the user file system (this... (7 Replies)
Discussion started by: pagaille
7 Replies

5. UNIX for Advanced & Expert Users

read system call reading the same data

Hi, I wrote a program, to read from a master terminal. However, the 'read' system call keeps returning the same data endlessly (I expected it to read once and then block). What will cause t data to be flushed, after 1 read? #include <stdio.h> #include <string.h> #include <sys/types.h>... (1 Reply)
Discussion started by: karthikb23
1 Replies

6. SCO

Help on System Freeze in SCO

Hi, My SCO server freezes suddenly. I just want to know if there any tools / commands availble that can find which is causing the freeze? Any help on this would be greatly appreciated. Regards, Ravikumar R (4 Replies)
Discussion started by: rrb2009
4 Replies

7. Linux

How to trace the module after system freeze?

Hi, I wrote a kernel module that did a virtual network protocol and library that provide interface for application use to interact with the kernel module by ioctl actions. insmod the module and unload the module, there will be no problem. But once I call the library with my example... (0 Replies)
Discussion started by: a2156z
0 Replies

8. Filesystems, Disks and Memory

How to mount/make a FAT system on Linux

Yea i was wondering how i would mount, and create a FAT directory that way i can save files in the FAT directory in a windows system and be able to access them on Linux systems. Or if there is any other way to share files between Linux and Windows. Any responds will help... thanks! (2 Replies)
Discussion started by: kyoist
2 Replies
Login or Register to Ask a Question