用户态的指针失效,发生了错误的内存访问,修改如下:
ssize_t new_sync_write_crypt(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
{
char* mybuf = (char*)kmalloc(sizeof(char)*len,GFP_KERNEL);
int i;
copy_from_user(mybuf,buf,len);
//在此处添加对长度为len的buf数据进行加密(简单移位密码,将每个字符值+25)
for(i=0;i<len;i++){
mybuf[i] = (mybuf[i] + 25)%128;
}
printk("haha encrypt %ld\n", len);
return new_sync_write(filp, mybuf, len, ppos);//调用默认的写函数,把加密数据写入
}
ssize_t new_sync_read_crypt(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
{
char* mybuf = (char*)kmalloc(sizeof(char)*len,GFP_KERNEL);
int i;
//先调用默认的读函数读取文件数据
ssize_t ret = new_sync_read(filp, mybuf, len, ppos);
//此处添加对文件的解密(简单移位解密,将每个字符值-25)
for(i=0;i<len;i++){
mybuf[i] = (mybuf[i] - 25 + 128)%128;
}
copy_to_user(buf,mybuf,len);
printk("haha encrypt %ld\n", len);
return ret;
}