[dm-crypt] Bypass encrypt and decrypt data in dm-crypt

FAN ZHANG fzhangcsc at yahoo.com
Wed Jan 18 16:56:38 CET 2012

We are using dm-crypt for Android device encryption.  However, we need reserve some sectors in block device for status and integration check and do not want to encrypt/decrypt some sectors when using dm-crypt.
So in crypt_convert_block()
offset sector of ctx +  sector number of bio_in  is the range of bypass sector list.
instead call
if (bio_data_dir(ctx->bio_in) == WRITE)
 r = crypt_copy_write_data(bv_in, bv_out, offset, 1 << SECTOR_SHIFT); else  r = crypt_copy_read_data(bv_in, bv_out, offset, 1 << SECTOR_SHIFT);
I want to call another function to copy data of a sector from 
ctx->bio_in to
ctx->bio_out directly.
I tried the following implementation 
in ps_copy_write_data()
struct bio_vec *bv_in = bio_iovec_idx(ctx->bio_in, ctx->idx_in); 
struct bio_vec *bv_out = bio_iovec_idx(ctx->bio_out, ctx->idx_out); 
struct page * page_in = bv_in->bv_page; 
struct page * page_out = bv_out->bv_page;
void * addr1 = kmap_atomic(page_in, KM_USER0); 
void * addr2 = kmap_atomic(page_out, KM_USER1);
unsigned int offset = ctx->offset_in;
memcpy(addr2 + offset, addr1 + offset, 1 << SECTOR_SHIFT);
kunmap_atomic(addr2, KM_USER1);
kunmap_atomic(addr1, KM_USER0);
but above implementation works for read (since bv_in and bv_out are same for decryption) but does not work for write. 
It seems that 
memcpy(addr2 + offset, addr1 + offset, 1 << SECTOR_SHIFT);
fails to copy page associated with bv_in  to page associated with bv_out 
Could you give me a hint to reslove this issue?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.saout.de/pipermail/dm-crypt/attachments/20120118/5b77916d/attachment.html>

More information about the dm-crypt mailing list