wubingzheng 发表于 2007-5-8 22:08:09

[请教]文件系统元数据加密问题

《linux设备驱动编程 第三版》(LDD3) 中的块设备例子sbull。实际设备是一块内存。

request处理函数最后会调用下面这个函数来实现读写:其中dev->data是那块实际的内存。

本来很正常。但如果我想把数据加密,使得在内存中的数据是加密的。即在写前加密,读后解密。加解密过程在驱动中实现,对内核是透明的。如下面这个函数中注释掉的两行。

static void sbull_transfer(struct sbull_dev *dev, unsigned long sector,
                unsigned long nsect, char *buffer, int write)
{
      unsigned long offset = sector*KERNEL_SECTOR_SIZE;
      unsigned long nbytes = nsect*KERNEL_SECTOR_SIZE;

      if ((offset + nbytes) > dev->size) {
                printk (KERN_NOTICE "Beyond-end write (%ld %ld)\n", offset, nbytes);
                return;
      }
      if (write) {
                //encrypt((unsigned char *)buffer, nbytes);
                memcpy(dev->data + offset, buffer, nbytes);
      } else {
                memcpy(buffer, dev->data + offset, nbytes);
                //decrypt((unsigned char *)buffer, nbytes);
      }
}


问题就出现了。装载这个驱动模块后,对设备 fdisk,正常。mkfs正常。但mount时,报 错误的文件系统 的错误。

在 /var/log/message中的信息是:
May2 21:09:08 wub kernel: EXT2-fs error (device vdefsa1): ext2_check_descriptors: Block bitmap for group 0 not in group (block 4260704353)!
May2 21:09:08 wub kernel: EXT2-fs: group descriptors corrupted!

好像是元数据越界。

我觉得加解密对内核是透明的,为什么会报错呢?
页: [1]
查看完整版本: [请教]文件系统元数据加密问题