Re: filesystem encryption problem.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Sun, Jul 12, 2015 at 8:08 PM, Freeman Zhang <freeman.zhang1992@xxxxxxxxx> wrote:
-------- Original Message --------
> hello
> I am working on adding a simple encryption to file contents in ext4 driver
> (for learning purposes) I added simple XOR encryption to aio_read and
> aio_write functions and it worked until I faced this problem:
>
> when I open a file in encrypted filesystem using VIM text editor and when I
> try to save it it gives me this error:
>
>>> pointer block id wrong
>>> can not find line 1
>
> and it just corrupts the entire file!
>
> this is my aio_write function:
>
> aio_write_enc(struct kiocb *iocb, const struct iovec *iov,
>         unsigned long nr_segs, loff_t pos)
> {
>     size_t i;
>     ssize_t ret;
>     char *data=""> >     copy_from_user(data,iov->iov_base,iov->iov_len);
>
>     for(i=0;i<iov->iov_len;i++)
>     {
>         data[i]^=5;
>     }
>     struct iovec iov_enc= { .iov_base = iov->iov_base, .iov_len =
> iov->iov_len };
>
>     copy_to_user(iov_enc.iov_base,data,iov->iov_len);
>     ret=ext4_file_write(iocb,&iov_enc,nr_segs,pos);
>     vfree(data);
>     return ret;
> }
>
> this just changes the data and then calls original function.
>
> is there anything wrong with this function? can anyone help me?
>
>
>
Hi Amir,

I'm not quite sure about what's wrong with your function, but here are
two suggestions I got from the list when I did similar things:

1. wrapfs
2. ecryptfs

I think you should check these two stackable filesystems if you haven't.

Hope this can help a little bit!

Freeman


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Hi Amir,

I agree with Freeman Zhang over here. The way you are doing it is not right. There is a mechanism to create stacks of file system and you should go down that path.

Having said this, you should definitely debug the issue that you are facing. Some pointers : -
1. As you have already mentioned that this is happening only for vim and not while regular read(using cat, etc), you need to check what vim does special to read a file. I would suggest make use of strace and do reading with and without vim, maybe you will get something of interest.
2. re-read code to check, you might be messing up while write or read.

Apart from these some basic practices you need to follow is : -

1. check for error conditions, like you missed checking error from vmalloc() and the below code will execute even if it failed, this should be avoided.
2. copy_from_user & again copying back to user is in-efficient.


Enjoy life,
Rohan
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux