2017年7月3日 星期一

[工作] Kernel driver讀寫文件的方式

Header檔:
#include <linux/fs.h>
#include <linux/file.h>
#include <asm/uaccess.h>

程式碼:
char *path = "/abc/test"
struct file *fp = NULL;
mm_segment_t old_fs;
u8 buf[256];

fp = filp_open(path, O_RDONLY, 0);
if (fp == NULL) {
    return -1;
}

old_fs = get_fs();
set_fs(KERNEL_DS);

fp->f_op->read(fp, buf, sizeof(buf), &fp->f_pos);

set_fs(old_fs);

filp_close(fp, NULL);


主要重點是紅字的部份

簡單來說是要防止User space破壞到Kernel space的內容

傳遞給->read / ->write的參數因為是kernel的位址

會被認為不合法, user被禁止存取,

所以要先把ds改成kernel, 才不會被誤認成user

大概是個root的概念

不過操作完記得設回來

沒有留言:

張貼留言