修改Linux写文件部分时的一些困惑

Old123 2007-07-12 03:44:35
我想实现一个加密文件系统,需求如下:内存和缓冲区里面全部是明文,磁盘上的数据全部是密文。现在读文件部分问题已经解决了,在写文件部分遇到了一些麻烦。
对读文件的修改如下:在block_read_full_page函数中,设置缓冲区头部的b_end_io函数时,根据缓冲区头部的设备号判断是不是指定的设备,如果是,则换成指定的b_end_io函数。在这个函数里解密数据。
写文件比读文件要复杂的多。写之前会在缓冲区中查找是否被缓存,如果没有还要先读到缓冲区。而且写的过程不是立即写入,还要交给驱动,让驱动慢慢写入。我现在有两条路:
1,缓冲区在进程写完后有bdflush线程刷如设备,bdflush线程调用了write_locked_buffers函数,这个函数会设置缓冲区头部的b_end_io字段,在这里判断是不是指定的设备,如果是,则把这个换成自定义的b_end_io函数,这个函数里解密数据。可以把数据先加密,在IO完成后会自动调用b_end_io解密,以保证磁盘里面是密文。
2.新建一个缓冲区头部,并申请一块内存。新申请的缓冲区头部指向申请的内存,申请的内存里面存的是加密后的数据。将新缓冲区头部指向的数据写入设备,而老的则释放。
但上面两种方法都有缺陷,方法一在于需要多次加解密操作,太费时。方法二在于如果进程在数据还未写设备时又修改了,会不会造成不一致。而且上面两种方法还有个共同缺陷,就是不仅bdflush会将数据刷到设备,kupdate等其他内核线程也会完成同样的功能。
我想问一下达人,我究竟该怎么改。
...全文
414 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hefuhua 2007-07-17
  • 打赏
  • 举报
回复
up 关注
Old123 2007-07-15
  • 打赏
  • 举报
回复
楼上的想法我也曾考虑过,我有一点忘了说,我加密和解密是用另一块芯片做的,还要在内核里面调用驱动,我不知道具体怎么做,也不知道会不会造成内核的不稳定。
tiger0607 2007-07-12
  • 打赏
  • 举报
回复
为什么不直接在do_rw_disk里面和中断里面加解密呢?

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧