Sponsored Content
Operating Systems Linux Read data of a page frame (linux) make freeze the system Post 302353302 by hahai on Tuesday 15th of September 2009 05:27:17 AM
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..
 

8 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

8. 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
STATFS(2)						     Linux Programmer's Manual							 STATFS(2)

NAME
statfs, fstatfs - get file system statistics SYNOPSIS
#include <sys/vfs.h> int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf); DESCRIPTION
statfs returns information about a mounted file system. path is the path name of any file within the mounted filesystem. buf is a pointer to a statfs structure defined as follows: struct statfs { long f_type; /* type of filesystem (see below) */ long f_bsize; /* optimal transfer block size */ long f_blocks; /* total data blocks in file system */ long f_bfree; /* free blocks in fs */ long f_bavail; /* free blocks avail to non-superuser */ long f_files; /* total file nodes in file system */ long f_ffree; /* free file nodes in fs */ fsid_t f_fsid; /* file system id */ long f_namelen; /* maximum length of filenames */ long f_spare[6]; /* spare for later */ }; File system types: linux/affs_fs.h: AFFS_SUPER_MAGIC 0xADFF linux/efs_fs.h: EFS_SUPER_MAGIC 0x00414A53 linux/ext_fs.h: EXT_SUPER_MAGIC 0x137D linux/ext2_fs.h: EXT2_OLD_SUPER_MAGIC 0xEF51 EXT2_SUPER_MAGIC 0xEF53 linux/hpfs_fs.h: HPFS_SUPER_MAGIC 0xF995E849 linux/iso_fs.h: ISOFS_SUPER_MAGIC 0x9660 linux/minix_fs.h: MINIX_SUPER_MAGIC 0x137F /* orig. minix */ MINIX_SUPER_MAGIC2 0x138F /* 30 char minix */ MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */ MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 char names */ linux/msdos_fs.h: MSDOS_SUPER_MAGIC 0x4d44 linux/ncp_fs.h: NCP_SUPER_MAGIC 0x564c linux/nfs_fs.h: NFS_SUPER_MAGIC 0x6969 linux/proc_fs.h: PROC_SUPER_MAGIC 0x9fa0 linux/smb_fs.h: SMB_SUPER_MAGIC 0x517B linux/sysv_fs.h: XENIX_SUPER_MAGIC 0x012FF7B4 SYSV4_SUPER_MAGIC 0x012FF7B5 SYSV2_SUPER_MAGIC 0x012FF7B6 COH_SUPER_MAGIC 0x012FF7B7 linux/ufs_fs.h: UFS_MAGIC 0x00011954 linux/xfs_fs.h: XFS_SUPER_MAGIC 0x58465342 linux/xia_fs.h: _XIAFS_SUPER_MAGIC 0x012FD16D Fields that are undefined for a particular file system are set to 0. fstatfs returns the same information about an open file referenced by descriptor fd. RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is set appropriately. ERRORS
For statfs: ENOTDIR A component of the path prefix of path is not a directory. ENAMETOOLONG path is too long. ENOENT The file referred to by path does not exist. EACCES Search permission is denied for a component of the path prefix of path. ELOOP Too many symbolic links were encountered in translating path. EFAULT Buf or path points to an invalid address. EIO An I/O error occurred while reading from or writing to the file system. ENOMEM Insufficient kernel memory was available. ENOSYS The filesystem path is on does not support statfs. For fstatfs: EBADF fd is not a valid open file descriptor. EFAULT buf points to an invalid address. EIO An I/O error occurred while reading from or writing to the file system. ENOSYS The filesystem fd is open on does not support statfs. CONFORMING TO
The Linux statfs was inspired by the 4.4BSD one (but they do not use the same structure). SEE ALSO
stat(2) Linux 2.0.30 1997-08-21 STATFS(2)
All times are GMT -4. The time now is 11:22 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy