1
2
3
4
5
6
7
8
9#include <linux/completion.h>
10#include <linux/err.h>
11#include <linux/module.h>
12#include <linux/init.h>
13#include <linux/kernel.h>
14#include <linux/bio.h>
15#include <linux/blkdev.h>
16#include <linux/mempool.h>
17#include <linux/slab.h>
18#include <linux/crypto.h>
19#include <linux/workqueue.h>
20#include <linux/backing-dev.h>
21#include <linux/percpu.h>
22#include <linux/atomic.h>
23#include <linux/scatterlist.h>
24#include <asm/page.h>
25#include <asm/unaligned.h>
26#include <crypto/hash.h>
27#include <crypto/md5.h>
28#include <crypto/algapi.h>
29
30#include <linux/device-mapper.h>
31
32#define DM_MSG_PREFIX "crypt"
33
34
35
36
37struct convert_context {
38 struct completion restart;
39 struct bio *bio_in;
40 struct bio *bio_out;
41 unsigned int offset_in;
42 unsigned int offset_out;
43 unsigned int idx_in;
44 unsigned int idx_out;
45 sector_t cc_sector;
46 atomic_t cc_pending;
47};
48
49
50
51
52struct dm_crypt_io {
53 struct crypt_config *cc;
54 struct bio *base_bio;
55 struct work_struct work;
56
57 struct convert_context ctx;
58
59 atomic_t io_pending;
60 int error;
61 sector_t sector;
62 struct dm_crypt_io *base_io;
63};
64
65struct dm_crypt_request {
66 struct convert_context *ctx;
67 struct scatterlist sg_in;
68 struct scatterlist sg_out;
69 sector_t iv_sector;
70};
71
72struct crypt_config;
73
74struct crypt_iv_operations {
75 int (*ctr)(struct crypt_config *cc, struct dm_target *ti,
76 const char *opts);
77 void (*dtr)(struct crypt_config *cc);
78 int (*init)(struct crypt_config *cc);
79 int (*wipe)(struct crypt_config *cc);
80 int (*generator)(struct crypt_config *cc, u8 *iv,
81 struct dm_crypt_request *dmreq);
82 int (*post)(struct crypt_config *cc, u8 *iv,
83 struct dm_crypt_request *dmreq);
84};
85
86struct iv_essiv_private {
87 struct crypto_hash *hash_tfm;
88 u8 *salt;
89};
90
91struct iv_benbi_private {
92 int shift;
93};
94
95#define LMK_SEED_SIZE 64
96struct iv_lmk_private {
97 struct crypto_shash *hash_tfm;
98 u8 *seed;
99};
100
101
102
103
104
105enum flags { DM_CRYPT_SUSPENDED, DM_CRYPT_KEY_VALID };
106
107
108
109
110struct crypt_cpu {
111 struct ablkcipher_request *req;
112};
113
114
115
116
117
118struct crypt_config {
119 struct dm_dev *dev;
120 sector_t start;
121
122
123
124
125
126 mempool_t *io_pool;
127 mempool_t *req_pool;
128 mempool_t *page_pool;
129 struct bio_set *bs;
130
131 struct workqueue_struct *io_queue;
132 struct workqueue_struct *crypt_queue;
133
134 char *cipher;
135 char *cipher_string;
136
137 struct crypt_iv_operations *iv_gen_ops;
138 union {
139 struct iv_essiv_private essiv;
140 struct iv_benbi_private benbi;
141 struct iv_lmk_private lmk;
142 } iv_gen_private;
143 sector_t iv_offset;
144 unsigned int iv_size;
145
146
147
148
149
150 struct crypt_cpu __percpu *cpu;
151
152
153 void *iv_private;
154 struct crypto_ablkcipher **tfms;
155 unsigned tfms_count;
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170 unsigned int dmreq_start;
171
172 unsigned long flags;
173 unsigned int key_size;
174 unsigned int key_parts;
175 u8 key[0];
176};
177
178#define MIN_IOS 16
179#define MIN_POOL_PAGES 32
180
181static struct kmem_cache *_crypt_io_pool;
182
183static void clone_init(struct dm_crypt_io *, struct bio *);
184static void kcryptd_queue_crypt(struct dm_crypt_io *io);
185static u8 *iv_of_dmreq(struct crypt_config *cc, struct dm_crypt_request *dmreq);
186
187static struct crypt_cpu *this_crypt_config(struct crypt_config *cc)
188{
189 return this_cpu_ptr(cc->cpu);
190}
191
192
193
194
195static struct crypto_ablkcipher *any_tfm(struct crypt_config *cc)
196{
197 return cc->tfms[0];
198}
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237static int crypt_iv_plain_gen(struct crypt_config *cc, u8 *iv,
238 struct dm_crypt_request *dmreq)
239{
240 memset(iv, 0, cc->iv_size);
241 *(__le32 *)iv = cpu_to_le32(dmreq->iv_sector & 0xffffffff);
242
243 return 0;
244}
245
246static int crypt_iv_plain64_gen(struct crypt_config *cc, u8 *iv,
247 struct dm_crypt_request *dmreq)
248{
249 memset(iv, 0, cc->iv_size);
250 *(__le64 *)iv = cpu_to_le64(dmreq->iv_sector);
251
252 return 0;
253}
254
255
256static int crypt_iv_essiv_init(struct crypt_config *cc)
257{
258 struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv;
259 struct hash_desc desc;
260 struct scatterlist sg;
261 struct crypto_cipher *essiv_tfm;
262 int err;
263
264 sg_init_one(&sg, cc->key, cc->key_size);
265 desc.tfm = essiv->hash_tfm;
266 desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
267
268 err = crypto_hash_digest(&desc, &sg, cc->key_size, essiv->salt);
269 if (err)
270 return err;
271
272 essiv_tfm = cc->iv_private;
273
274 err = crypto_cipher_setkey(essiv_tfm, essiv->salt,
275 crypto_hash_digestsize(essiv->hash_tfm));
276 if (err)
277 return err;
278
279 return 0;
280}
281
282
283static int crypt_iv_essiv_wipe(struct crypt_config *cc)
284{
285 struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv;
286 unsigned salt_size = crypto_hash_digestsize(essiv->hash_tfm);
287 struct crypto_cipher *essiv_tfm;
288 int r, err = 0;
289
290 memset(essiv->salt, 0, salt_size);
291
292 essiv_tfm = cc->iv_private;
293 r = crypto_cipher_setkey(essiv_tfm, essiv->salt, salt_size);
294 if (r)
295 err = r;
296
297 return err;
298}
299
300
301static struct crypto_cipher *setup_essiv_cpu(struct crypt_config *cc,
302 struct dm_target *ti,
303 u8 *salt, unsigned saltsize)
304{
305 struct crypto_cipher *essiv_tfm;
306 int err;
307
308
309 essiv_tfm = crypto_alloc_cipher(cc->cipher, 0, CRYPTO_ALG_ASYNC);
310 if (IS_ERR(essiv_tfm)) {
311 ti->error = "Error allocating crypto tfm for ESSIV";
312 return essiv_tfm;
313 }
314
315 if (crypto_cipher_blocksize(essiv_tfm) !=
316 crypto_ablkcipher_ivsize(any_tfm(cc))) {
317 ti->error = "Block size of ESSIV cipher does "
318 "not match IV size of block cipher";
319 crypto_free_cipher(essiv_tfm);
320 return ERR_PTR(-EINVAL);
321 }
322
323 err = crypto_cipher_setkey(essiv_tfm, salt, saltsize);
324 if (err) {
325 ti->error = "Failed to set key for ESSIV cipher";
326 crypto_free_cipher(essiv_tfm);
327 return ERR_PTR(err);
328 }
329
330 return essiv_tfm;
331}
332
333static void crypt_iv_essiv_dtr(struct crypt_config *cc)
334{
335 struct crypto_cipher *essiv_tfm;
336 struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv;
337
338 crypto_free_hash(essiv->hash_tfm);
339 essiv->hash_tfm = NULL;
340
341 kzfree(essiv->salt);
342 essiv->salt = NULL;
343
344 essiv_tfm = cc->iv_private;
345
346 if (essiv_tfm)
347 crypto_free_cipher(essiv_tfm);
348
349 cc->iv_private = NULL;
350}
351
352static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti,
353 const char *opts)
354{
355 struct crypto_cipher *essiv_tfm = NULL;
356 struct crypto_hash *hash_tfm = NULL;
357 u8 *salt = NULL;
358 int err;
359
360 if (!opts) {
361 ti->error = "Digest algorithm missing for ESSIV mode";
362 return -EINVAL;
363 }
364
365
366 hash_tfm = crypto_alloc_hash(opts, 0, CRYPTO_ALG_ASYNC);
367 if (IS_ERR(hash_tfm)) {
368 ti->error = "Error initializing ESSIV hash";
369 err = PTR_ERR(hash_tfm);
370 goto bad;
371 }
372
373 salt = kzalloc(crypto_hash_digestsize(hash_tfm), GFP_KERNEL);
374 if (!salt) {
375 ti->error = "Error kmallocing salt storage in ESSIV";
376 err = -ENOMEM;
377 goto bad;
378 }
379
380 cc->iv_gen_private.essiv.salt = salt;
381 cc->iv_gen_private.essiv.hash_tfm = hash_tfm;
382
383 essiv_tfm = setup_essiv_cpu(cc, ti, salt,
384 crypto_hash_digestsize(hash_tfm));
385 if (IS_ERR(essiv_tfm)) {
386 crypt_iv_essiv_dtr(cc);
387 return PTR_ERR(essiv_tfm);
388 }
389 cc->iv_private = essiv_tfm;
390
391 return 0;
392
393bad:
394 if (hash_tfm && !IS_ERR(hash_tfm))
395 crypto_free_hash(hash_tfm);
396 kfree(salt);
397 return err;
398}
399
400static int crypt_iv_essiv_gen(struct crypt_config *cc, u8 *iv,
401 struct dm_crypt_request *dmreq)
402{
403 struct crypto_cipher *essiv_tfm = cc->iv_private;
404
405 memset(iv, 0, cc->iv_size);
406 *(__le64 *)iv = cpu_to_le64(dmreq->iv_sector);
407 crypto_cipher_encrypt_one(essiv_tfm, iv, iv);
408
409 return 0;
410}
411
412static int crypt_iv_benbi_ctr(struct crypt_config *cc, struct dm_target *ti,
413 const char *opts)
414{
415 unsigned bs = crypto_ablkcipher_blocksize(any_tfm(cc));
416 int log = ilog2(bs);
417
418
419
420
421 if (1 << log != bs) {
422 ti->error = "cypher blocksize is not a power of 2";
423 return -EINVAL;
424 }
425
426 if (log > 9) {
427 ti->error = "cypher blocksize is > 512";
428 return -EINVAL;
429 }
430
431 cc->iv_gen_private.benbi.shift = 9 - log;
432
433 return 0;
434}
435
436static void crypt_iv_benbi_dtr(struct crypt_config *cc)
437{
438}
439
440static int crypt_iv_benbi_gen(struct crypt_config *cc, u8 *iv,
441 struct dm_crypt_request *dmreq)
442{
443 __be64 val;
444
445 memset(iv, 0, cc->iv_size - sizeof(u64));
446
447 val = cpu_to_be64(((u64)dmreq->iv_sector << cc->iv_gen_private.benbi.shift) + 1);
448 put_unaligned(val, (__be64 *)(iv + cc->iv_size - sizeof(u64)));
449
450 return 0;
451}
452
453static int crypt_iv_null_gen(struct crypt_config *cc, u8 *iv,
454 struct dm_crypt_request *dmreq)
455{
456 memset(iv, 0, cc->iv_size);
457
458 return 0;
459}
460
461static void crypt_iv_lmk_dtr(struct crypt_config *cc)
462{
463 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
464
465 if (lmk->hash_tfm && !IS_ERR(lmk->hash_tfm))
466 crypto_free_shash(lmk->hash_tfm);
467 lmk->hash_tfm = NULL;
468
469 kzfree(lmk->seed);
470 lmk->seed = NULL;
471}
472
473static int crypt_iv_lmk_ctr(struct crypt_config *cc, struct dm_target *ti,
474 const char *opts)
475{
476 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
477
478 lmk->hash_tfm = crypto_alloc_shash("md5", 0, 0);
479 if (IS_ERR(lmk->hash_tfm)) {
480 ti->error = "Error initializing LMK hash";
481 return PTR_ERR(lmk->hash_tfm);
482 }
483
484
485 if (cc->key_parts == cc->tfms_count) {
486 lmk->seed = NULL;
487 return 0;
488 }
489
490 lmk->seed = kzalloc(LMK_SEED_SIZE, GFP_KERNEL);
491 if (!lmk->seed) {
492 crypt_iv_lmk_dtr(cc);
493 ti->error = "Error kmallocing seed storage in LMK";
494 return -ENOMEM;
495 }
496
497 return 0;
498}
499
500static int crypt_iv_lmk_init(struct crypt_config *cc)
501{
502 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
503 int subkey_size = cc->key_size / cc->key_parts;
504
505
506 if (lmk->seed)
507 memcpy(lmk->seed, cc->key + (cc->tfms_count * subkey_size),
508 crypto_shash_digestsize(lmk->hash_tfm));
509
510 return 0;
511}
512
513static int crypt_iv_lmk_wipe(struct crypt_config *cc)
514{
515 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
516
517 if (lmk->seed)
518 memset(lmk->seed, 0, LMK_SEED_SIZE);
519
520 return 0;
521}
522
523static int crypt_iv_lmk_one(struct crypt_config *cc, u8 *iv,
524 struct dm_crypt_request *dmreq,
525 u8 *data)
526{
527 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
528 struct {
529 struct shash_desc desc;
530 char ctx[crypto_shash_descsize(lmk->hash_tfm)];
531 } sdesc;
532 struct md5_state md5state;
533 u32 buf[4];
534 int i, r;
535
536 sdesc.desc.tfm = lmk->hash_tfm;
537 sdesc.desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
538
539 r = crypto_shash_init(&sdesc.desc);
540 if (r)
541 return r;
542
543 if (lmk->seed) {
544 r = crypto_shash_update(&sdesc.desc, lmk->seed, LMK_SEED_SIZE);
545 if (r)
546 return r;
547 }
548
549
550 r = crypto_shash_update(&sdesc.desc, data + 16, 16 * 31);
551 if (r)
552 return r;
553
554
555 buf[0] = cpu_to_le32(dmreq->iv_sector & 0xFFFFFFFF);
556 buf[1] = cpu_to_le32((((u64)dmreq->iv_sector >> 32) & 0x00FFFFFF) | 0x80000000);
557 buf[2] = cpu_to_le32(4024);
558 buf[3] = 0;
559 r = crypto_shash_update(&sdesc.desc, (u8 *)buf, sizeof(buf));
560 if (r)
561 return r;
562
563
564 r = crypto_shash_export(&sdesc.desc, &md5state);
565 if (r)
566 return r;
567
568 for (i = 0; i < MD5_HASH_WORDS; i++)
569 __cpu_to_le32s(&md5state.hash[i]);
570 memcpy(iv, &md5state.hash, cc->iv_size);
571
572 return 0;
573}
574
575static int crypt_iv_lmk_gen(struct crypt_config *cc, u8 *iv,
576 struct dm_crypt_request *dmreq)
577{
578 u8 *src;
579 int r = 0;
580
581 if (bio_data_dir(dmreq->ctx->bio_in) == WRITE) {
582 src = kmap_atomic(sg_page(&dmreq->sg_in));
583 r = crypt_iv_lmk_one(cc, iv, dmreq, src + dmreq->sg_in.offset);
584 kunmap_atomic(src);
585 } else
586 memset(iv, 0, cc->iv_size);
587
588 return r;
589}
590
591static int crypt_iv_lmk_post(struct crypt_config *cc, u8 *iv,
592 struct dm_crypt_request *dmreq)
593{
594 u8 *dst;
595 int r;
596
597 if (bio_data_dir(dmreq->ctx->bio_in) == WRITE)
598 return 0;
599
600 dst = kmap_atomic(sg_page(&dmreq->sg_out));
601 r = crypt_iv_lmk_one(cc, iv, dmreq, dst + dmreq->sg_out.offset);
602
603
604 if (!r)
605 crypto_xor(dst + dmreq->sg_out.offset, iv, cc->iv_size);
606
607 kunmap_atomic(dst);
608 return r;
609}
610
611static struct crypt_iv_operations crypt_iv_plain_ops = {
612 .generator = crypt_iv_plain_gen
613};
614
615static struct crypt_iv_operations crypt_iv_plain64_ops = {
616 .generator = crypt_iv_plain64_gen
617};
618
619static struct crypt_iv_operations crypt_iv_essiv_ops = {
620 .ctr = crypt_iv_essiv_ctr,
621 .dtr = crypt_iv_essiv_dtr,
622 .init = crypt_iv_essiv_init,
623 .wipe = crypt_iv_essiv_wipe,
624 .generator = crypt_iv_essiv_gen
625};
626
627static struct crypt_iv_operations crypt_iv_benbi_ops = {
628 .ctr = crypt_iv_benbi_ctr,
629 .dtr = crypt_iv_benbi_dtr,
630 .generator = crypt_iv_benbi_gen
631};
632
633static struct crypt_iv_operations crypt_iv_null_ops = {
634 .generator = crypt_iv_null_gen
635};
636
637static struct crypt_iv_operations crypt_iv_lmk_ops = {
638 .ctr = crypt_iv_lmk_ctr,
639 .dtr = crypt_iv_lmk_dtr,
640 .init = crypt_iv_lmk_init,
641 .wipe = crypt_iv_lmk_wipe,
642 .generator = crypt_iv_lmk_gen,
643 .post = crypt_iv_lmk_post
644};
645
646static void crypt_convert_init(struct crypt_config *cc,
647 struct convert_context *ctx,
648 struct bio *bio_out, struct bio *bio_in,
649 sector_t sector)
650{
651 ctx->bio_in = bio_in;
652 ctx->bio_out = bio_out;
653 ctx->offset_in = 0;
654 ctx->offset_out = 0;
655 ctx->idx_in = bio_in ? bio_in->bi_idx : 0;
656 ctx->idx_out = bio_out ? bio_out->bi_idx : 0;
657 ctx->cc_sector = sector + cc->iv_offset;
658 init_completion(&ctx->restart);
659}
660
661static struct dm_crypt_request *dmreq_of_req(struct crypt_config *cc,
662 struct ablkcipher_request *req)
663{
664 return (struct dm_crypt_request *)((char *)req + cc->dmreq_start);
665}
666
667static struct ablkcipher_request *req_of_dmreq(struct crypt_config *cc,
668 struct dm_crypt_request *dmreq)
669{
670 return (struct ablkcipher_request *)((char *)dmreq - cc->dmreq_start);
671}
672
673static u8 *iv_of_dmreq(struct crypt_config *cc,
674 struct dm_crypt_request *dmreq)
675{
676 return (u8 *)ALIGN((unsigned long)(dmreq + 1),
677 crypto_ablkcipher_alignmask(any_tfm(cc)) + 1);
678}
679
680static int crypt_convert_block(struct crypt_config *cc,
681 struct convert_context *ctx,
682 struct ablkcipher_request *req)
683{
684 struct bio_vec *bv_in = bio_iovec_idx(ctx->bio_in, ctx->idx_in);
685 struct bio_vec *bv_out = bio_iovec_idx(ctx->bio_out, ctx->idx_out);
686 struct dm_crypt_request *dmreq;
687 u8 *iv;
688 int r;
689
690 dmreq = dmreq_of_req(cc, req);
691 iv = iv_of_dmreq(cc, dmreq);
692
693 dmreq->iv_sector = ctx->cc_sector;
694 dmreq->ctx = ctx;
695 sg_init_table(&dmreq->sg_in, 1);
696 sg_set_page(&dmreq->sg_in, bv_in->bv_page, 1 << SECTOR_SHIFT,
697 bv_in->bv_offset + ctx->offset_in);
698
699 sg_init_table(&dmreq->sg_out, 1);
700 sg_set_page(&dmreq->sg_out, bv_out->bv_page, 1 << SECTOR_SHIFT,
701 bv_out->bv_offset + ctx->offset_out);
702
703 ctx->offset_in += 1 << SECTOR_SHIFT;
704 if (ctx->offset_in >= bv_in->bv_len) {
705 ctx->offset_in = 0;
706 ctx->idx_in++;
707 }
708
709 ctx->offset_out += 1 << SECTOR_SHIFT;
710 if (ctx->offset_out >= bv_out->bv_len) {
711 ctx->offset_out = 0;
712 ctx->idx_out++;
713 }
714
715 if (cc->iv_gen_ops) {
716 r = cc->iv_gen_ops->generator(cc, iv, dmreq);
717 if (r < 0)
718 return r;
719 }
720
721 ablkcipher_request_set_crypt(req, &dmreq->sg_in, &dmreq->sg_out,
722 1 << SECTOR_SHIFT, iv);
723
724 if (bio_data_dir(ctx->bio_in) == WRITE)
725 r = crypto_ablkcipher_encrypt(req);
726 else
727 r = crypto_ablkcipher_decrypt(req);
728
729 if (!r && cc->iv_gen_ops && cc->iv_gen_ops->post)
730 r = cc->iv_gen_ops->post(cc, iv, dmreq);
731
732 return r;
733}
734
735static void kcryptd_async_done(struct crypto_async_request *async_req,
736 int error);
737
738static void crypt_alloc_req(struct crypt_config *cc,
739 struct convert_context *ctx)
740{
741 struct crypt_cpu *this_cc = this_crypt_config(cc);
742 unsigned key_index = ctx->cc_sector & (cc->tfms_count - 1);
743
744 if (!this_cc->req)
745 this_cc->req = mempool_alloc(cc->req_pool, GFP_NOIO);
746
747 ablkcipher_request_set_tfm(this_cc->req, cc->tfms[key_index]);
748 ablkcipher_request_set_callback(this_cc->req,
749 CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
750 kcryptd_async_done, dmreq_of_req(cc, this_cc->req));
751}
752
753
754
755
756static int crypt_convert(struct crypt_config *cc,
757 struct convert_context *ctx)
758{
759 struct crypt_cpu *this_cc = this_crypt_config(cc);
760 int r;
761
762 atomic_set(&ctx->cc_pending, 1);
763
764 while(ctx->idx_in < ctx->bio_in->bi_vcnt &&
765 ctx->idx_out < ctx->bio_out->bi_vcnt) {
766
767 crypt_alloc_req(cc, ctx);
768
769 atomic_inc(&ctx->cc_pending);
770
771 r = crypt_convert_block(cc, ctx, this_cc->req);
772
773 switch (r) {
774
775 case -EBUSY:
776 wait_for_completion(&ctx->restart);
777 INIT_COMPLETION(ctx->restart);
778
779 case -EINPROGRESS:
780 this_cc->req = NULL;
781 ctx->cc_sector++;
782 continue;
783
784
785 case 0:
786 atomic_dec(&ctx->cc_pending);
787 ctx->cc_sector++;
788 cond_resched();
789 continue;
790
791
792 default:
793 atomic_dec(&ctx->cc_pending);
794 return r;
795 }
796 }
797
798 return 0;
799}
800
801
802
803
804
805
806
807static struct bio *crypt_alloc_buffer(struct dm_crypt_io *io, unsigned size,
808 unsigned *out_of_pages)
809{
810 struct crypt_config *cc = io->cc;
811 struct bio *clone;
812 unsigned int nr_iovecs = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
813 gfp_t gfp_mask = GFP_NOIO | __GFP_HIGHMEM;
814 unsigned i, len;
815 struct page *page;
816
817 clone = bio_alloc_bioset(GFP_NOIO, nr_iovecs, cc->bs);
818 if (!clone)
819 return NULL;
820
821 clone_init(io, clone);
822 *out_of_pages = 0;
823
824 for (i = 0; i < nr_iovecs; i++) {
825 page = mempool_alloc(cc->page_pool, gfp_mask);
826 if (!page) {
827 *out_of_pages = 1;
828 break;
829 }
830
831
832
833
834
835
836 gfp_mask = (gfp_mask | __GFP_NOWARN) & ~__GFP_WAIT;
837
838 len = (size > PAGE_SIZE) ? PAGE_SIZE : size;
839
840 if (!bio_add_page(clone, page, len, 0)) {
841 mempool_free(page, cc->page_pool);
842 break;
843 }
844
845 size -= len;
846 }
847
848 if (!clone->bi_size) {
849 bio_put(clone);
850 return NULL;
851 }
852
853 return clone;
854}
855
856static void crypt_free_buffer_pages(struct crypt_config *cc, struct bio *clone)
857{
858 unsigned int i;
859 struct bio_vec *bv;
860
861 for (i = 0; i < clone->bi_vcnt; i++) {
862 bv = bio_iovec_idx(clone, i);
863 BUG_ON(!bv->bv_page);
864 mempool_free(bv->bv_page, cc->page_pool);
865 bv->bv_page = NULL;
866 }
867}
868
869static struct dm_crypt_io *crypt_io_alloc(struct crypt_config *cc,
870 struct bio *bio, sector_t sector)
871{
872 struct dm_crypt_io *io;
873
874 io = mempool_alloc(cc->io_pool, GFP_NOIO);
875 io->cc = cc;
876 io->base_bio = bio;
877 io->sector = sector;
878 io->error = 0;
879 io->base_io = NULL;
880 atomic_set(&io->io_pending, 0);
881
882 return io;
883}
884
885static void crypt_inc_pending(struct dm_crypt_io *io)
886{
887 atomic_inc(&io->io_pending);
888}
889
890
891
892
893
894
895static void crypt_dec_pending(struct dm_crypt_io *io)
896{
897 struct crypt_config *cc = io->cc;
898 struct bio *base_bio = io->base_bio;
899 struct dm_crypt_io *base_io = io->base_io;
900 int error = io->error;
901
902 if (!atomic_dec_and_test(&io->io_pending))
903 return;
904
905 mempool_free(io, cc->io_pool);
906
907 if (likely(!base_io))
908 bio_endio(base_bio, error);
909 else {
910 if (error && !base_io->error)
911 base_io->error = error;
912 crypt_dec_pending(base_io);
913 }
914}
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933static void crypt_endio(struct bio *clone, int error)
934{
935 struct dm_crypt_io *io = clone->bi_private;
936 struct crypt_config *cc = io->cc;
937 unsigned rw = bio_data_dir(clone);
938
939 if (unlikely(!bio_flagged(clone, BIO_UPTODATE) && !error))
940 error = -EIO;
941
942
943
944
945 if (rw == WRITE)
946 crypt_free_buffer_pages(cc, clone);
947
948 bio_put(clone);
949
950 if (rw == READ && !error) {
951 kcryptd_queue_crypt(io);
952 return;
953 }
954
955 if (unlikely(error))
956 io->error = error;
957
958 crypt_dec_pending(io);
959}
960
961static void clone_init(struct dm_crypt_io *io, struct bio *clone)
962{
963 struct crypt_config *cc = io->cc;
964
965 clone->bi_private = io;
966 clone->bi_end_io = crypt_endio;
967 clone->bi_bdev = cc->dev->bdev;
968 clone->bi_rw = io->base_bio->bi_rw;
969}
970
971static int kcryptd_io_read(struct dm_crypt_io *io, gfp_t gfp)
972{
973 struct crypt_config *cc = io->cc;
974 struct bio *base_bio = io->base_bio;
975 struct bio *clone;
976
977
978
979
980
981
982 clone = bio_clone_bioset(base_bio, gfp, cc->bs);
983 if (!clone)
984 return 1;
985
986 crypt_inc_pending(io);
987
988 clone_init(io, clone);
989 clone->bi_sector = cc->start + io->sector;
990
991 generic_make_request(clone);
992 return 0;
993}
994
995static void kcryptd_io_write(struct dm_crypt_io *io)
996{
997 struct bio *clone = io->ctx.bio_out;
998 generic_make_request(clone);
999}
1000
1001static void kcryptd_io(struct work_struct *work)
1002{
1003 struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work);
1004
1005 if (bio_data_dir(io->base_bio) == READ) {
1006 crypt_inc_pending(io);
1007 if (kcryptd_io_read(io, GFP_NOIO))
1008 io->error = -ENOMEM;
1009 crypt_dec_pending(io);
1010 } else
1011 kcryptd_io_write(io);
1012}
1013
1014static void kcryptd_queue_io(struct dm_crypt_io *io)
1015{
1016 struct crypt_config *cc = io->cc;
1017
1018 INIT_WORK(&io->work, kcryptd_io);
1019 queue_work(cc->io_queue, &io->work);
1020}
1021
1022static void kcryptd_crypt_write_io_submit(struct dm_crypt_io *io, int async)
1023{
1024 struct bio *clone = io->ctx.bio_out;
1025 struct crypt_config *cc = io->cc;
1026
1027 if (unlikely(io->error < 0)) {
1028 crypt_free_buffer_pages(cc, clone);
1029 bio_put(clone);
1030 crypt_dec_pending(io);
1031 return;
1032 }
1033
1034
1035 BUG_ON(io->ctx.idx_out < clone->bi_vcnt);
1036
1037 clone->bi_sector = cc->start + io->sector;
1038
1039 if (async)
1040 kcryptd_queue_io(io);
1041 else
1042 generic_make_request(clone);
1043}
1044
1045static void kcryptd_crypt_write_convert(struct dm_crypt_io *io)
1046{
1047 struct crypt_config *cc = io->cc;
1048 struct bio *clone;
1049 struct dm_crypt_io *new_io;
1050 int crypt_finished;
1051 unsigned out_of_pages = 0;
1052 unsigned remaining = io->base_bio->bi_size;
1053 sector_t sector = io->sector;
1054 int r;
1055
1056
1057
1058
1059 crypt_inc_pending(io);
1060 crypt_convert_init(cc, &io->ctx, NULL, io->base_bio, sector);
1061
1062
1063
1064
1065
1066 while (remaining) {
1067 clone = crypt_alloc_buffer(io, remaining, &out_of_pages);
1068 if (unlikely(!clone)) {
1069 io->error = -ENOMEM;
1070 break;
1071 }
1072
1073 io->ctx.bio_out = clone;
1074 io->ctx.idx_out = 0;
1075
1076 remaining -= clone->bi_size;
1077 sector += bio_sectors(clone);
1078
1079 crypt_inc_pending(io);
1080
1081 r = crypt_convert(cc, &io->ctx);
1082 if (r < 0)
1083 io->error = -EIO;
1084
1085 crypt_finished = atomic_dec_and_test(&io->ctx.cc_pending);
1086
1087
1088 if (crypt_finished) {
1089 kcryptd_crypt_write_io_submit(io, 0);
1090
1091
1092
1093
1094
1095 if (unlikely(r < 0))
1096 break;
1097
1098 io->sector = sector;
1099 }
1100
1101
1102
1103
1104
1105 if (unlikely(out_of_pages))
1106 congestion_wait(BLK_RW_ASYNC, HZ/100);
1107
1108
1109
1110
1111
1112 if (unlikely(!crypt_finished && remaining)) {
1113 new_io = crypt_io_alloc(io->cc, io->base_bio,
1114 sector);
1115 crypt_inc_pending(new_io);
1116 crypt_convert_init(cc, &new_io->ctx, NULL,
1117 io->base_bio, sector);
1118 new_io->ctx.idx_in = io->ctx.idx_in;
1119 new_io->ctx.offset_in = io->ctx.offset_in;
1120
1121
1122
1123
1124
1125 if (!io->base_io)
1126 new_io->base_io = io;
1127 else {
1128 new_io->base_io = io->base_io;
1129 crypt_inc_pending(io->base_io);
1130 crypt_dec_pending(io);
1131 }
1132
1133 io = new_io;
1134 }
1135 }
1136
1137 crypt_dec_pending(io);
1138}
1139
1140static void kcryptd_crypt_read_done(struct dm_crypt_io *io)
1141{
1142 crypt_dec_pending(io);
1143}
1144
1145static void kcryptd_crypt_read_convert(struct dm_crypt_io *io)
1146{
1147 struct crypt_config *cc = io->cc;
1148 int r = 0;
1149
1150 crypt_inc_pending(io);
1151
1152 crypt_convert_init(cc, &io->ctx, io->base_bio, io->base_bio,
1153 io->sector);
1154
1155 r = crypt_convert(cc, &io->ctx);
1156 if (r < 0)
1157 io->error = -EIO;
1158
1159 if (atomic_dec_and_test(&io->ctx.cc_pending))
1160 kcryptd_crypt_read_done(io);
1161
1162 crypt_dec_pending(io);
1163}
1164
1165static void kcryptd_async_done(struct crypto_async_request *async_req,
1166 int error)
1167{
1168 struct dm_crypt_request *dmreq = async_req->data;
1169 struct convert_context *ctx = dmreq->ctx;
1170 struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx);
1171 struct crypt_config *cc = io->cc;
1172
1173 if (error == -EINPROGRESS) {
1174 complete(&ctx->restart);
1175 return;
1176 }
1177
1178 if (!error && cc->iv_gen_ops && cc->iv_gen_ops->post)
1179 error = cc->iv_gen_ops->post(cc, iv_of_dmreq(cc, dmreq), dmreq);
1180
1181 if (error < 0)
1182 io->error = -EIO;
1183
1184 mempool_free(req_of_dmreq(cc, dmreq), cc->req_pool);
1185
1186 if (!atomic_dec_and_test(&ctx->cc_pending))
1187 return;
1188
1189 if (bio_data_dir(io->base_bio) == READ)
1190 kcryptd_crypt_read_done(io);
1191 else
1192 kcryptd_crypt_write_io_submit(io, 1);
1193}
1194
1195static void kcryptd_crypt(struct work_struct *work)
1196{
1197 struct dm_crypt_io *io = container_of(work, struct dm_crypt_io, work);
1198
1199 if (bio_data_dir(io->base_bio) == READ)
1200 kcryptd_crypt_read_convert(io);
1201 else
1202 kcryptd_crypt_write_convert(io);
1203}
1204
1205static void kcryptd_queue_crypt(struct dm_crypt_io *io)
1206{
1207 struct crypt_config *cc = io->cc;
1208
1209 INIT_WORK(&io->work, kcryptd_crypt);
1210 queue_work(cc->crypt_queue, &io->work);
1211}
1212
1213
1214
1215
1216static int crypt_decode_key(u8 *key, char *hex, unsigned int size)
1217{
1218 char buffer[3];
1219 unsigned int i;
1220
1221 buffer[2] = '\0';
1222
1223 for (i = 0; i < size; i++) {
1224 buffer[0] = *hex++;
1225 buffer[1] = *hex++;
1226
1227 if (kstrtou8(buffer, 16, &key[i]))
1228 return -EINVAL;
1229 }
1230
1231 if (*hex != '\0')
1232 return -EINVAL;
1233
1234 return 0;
1235}
1236
1237
1238
1239
1240static void crypt_encode_key(char *hex, u8 *key, unsigned int size)
1241{
1242 unsigned int i;
1243
1244 for (i = 0; i < size; i++) {
1245 sprintf(hex, "%02x", *key);
1246 hex += 2;
1247 key++;
1248 }
1249}
1250
1251static void crypt_free_tfms(struct crypt_config *cc)
1252{
1253 unsigned i;
1254
1255 if (!cc->tfms)
1256 return;
1257
1258 for (i = 0; i < cc->tfms_count; i++)
1259 if (cc->tfms[i] && !IS_ERR(cc->tfms[i])) {
1260 crypto_free_ablkcipher(cc->tfms[i]);
1261 cc->tfms[i] = NULL;
1262 }
1263
1264 kfree(cc->tfms);
1265 cc->tfms = NULL;
1266}
1267
1268static int crypt_alloc_tfms(struct crypt_config *cc, char *ciphermode)
1269{
1270 unsigned i;
1271 int err;
1272
1273 cc->tfms = kmalloc(cc->tfms_count * sizeof(struct crypto_ablkcipher *),
1274 GFP_KERNEL);
1275 if (!cc->tfms)
1276 return -ENOMEM;
1277
1278 for (i = 0; i < cc->tfms_count; i++) {
1279 cc->tfms[i] = crypto_alloc_ablkcipher(ciphermode, 0, 0);
1280 if (IS_ERR(cc->tfms[i])) {
1281 err = PTR_ERR(cc->tfms[i]);
1282 crypt_free_tfms(cc);
1283 return err;
1284 }
1285 }
1286
1287 return 0;
1288}
1289
1290static int crypt_setkey_allcpus(struct crypt_config *cc)
1291{
1292 unsigned subkey_size = cc->key_size >> ilog2(cc->tfms_count);
1293 int err = 0, i, r;
1294
1295 for (i = 0; i < cc->tfms_count; i++) {
1296 r = crypto_ablkcipher_setkey(cc->tfms[i],
1297 cc->key + (i * subkey_size),
1298 subkey_size);
1299 if (r)
1300 err = r;
1301 }
1302
1303 return err;
1304}
1305
1306static int crypt_set_key(struct crypt_config *cc, char *key)
1307{
1308 int r = -EINVAL;
1309 int key_string_len = strlen(key);
1310
1311
1312 if (cc->key_size != (key_string_len >> 1))
1313 goto out;
1314
1315
1316 if (!cc->key_size && strcmp(key, "-"))
1317 goto out;
1318
1319 if (cc->key_size && crypt_decode_key(cc->key, key, cc->key_size) < 0)
1320 goto out;
1321
1322 set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
1323
1324 r = crypt_setkey_allcpus(cc);
1325
1326out:
1327
1328 memset(key, '0', key_string_len);
1329
1330 return r;
1331}
1332
1333static int crypt_wipe_key(struct crypt_config *cc)
1334{
1335 clear_bit(DM_CRYPT_KEY_VALID, &cc->flags);
1336 memset(&cc->key, 0, cc->key_size * sizeof(u8));
1337
1338 return crypt_setkey_allcpus(cc);
1339}
1340
1341static void crypt_dtr(struct dm_target *ti)
1342{
1343 struct crypt_config *cc = ti->private;
1344 struct crypt_cpu *cpu_cc;
1345 int cpu;
1346
1347 ti->private = NULL;
1348
1349 if (!cc)
1350 return;
1351
1352 if (cc->io_queue)
1353 destroy_workqueue(cc->io_queue);
1354 if (cc->crypt_queue)
1355 destroy_workqueue(cc->crypt_queue);
1356
1357 if (cc->cpu)
1358 for_each_possible_cpu(cpu) {
1359 cpu_cc = per_cpu_ptr(cc->cpu, cpu);
1360 if (cpu_cc->req)
1361 mempool_free(cpu_cc->req, cc->req_pool);
1362 }
1363
1364 crypt_free_tfms(cc);
1365
1366 if (cc->bs)
1367 bioset_free(cc->bs);
1368
1369 if (cc->page_pool)
1370 mempool_destroy(cc->page_pool);
1371 if (cc->req_pool)
1372 mempool_destroy(cc->req_pool);
1373 if (cc->io_pool)
1374 mempool_destroy(cc->io_pool);
1375
1376 if (cc->iv_gen_ops && cc->iv_gen_ops->dtr)
1377 cc->iv_gen_ops->dtr(cc);
1378
1379 if (cc->dev)
1380 dm_put_device(ti, cc->dev);
1381
1382 if (cc->cpu)
1383 free_percpu(cc->cpu);
1384
1385 kzfree(cc->cipher);
1386 kzfree(cc->cipher_string);
1387
1388
1389 kzfree(cc);
1390}
1391
1392static int crypt_ctr_cipher(struct dm_target *ti,
1393 char *cipher_in, char *key)
1394{
1395 struct crypt_config *cc = ti->private;
1396 char *tmp, *cipher, *chainmode, *ivmode, *ivopts, *keycount;
1397 char *cipher_api = NULL;
1398 int ret = -EINVAL;
1399 char dummy;
1400
1401
1402 if (strchr(cipher_in, '(')) {
1403 ti->error = "Bad cipher specification";
1404 return -EINVAL;
1405 }
1406
1407 cc->cipher_string = kstrdup(cipher_in, GFP_KERNEL);
1408 if (!cc->cipher_string)
1409 goto bad_mem;
1410
1411
1412
1413
1414
1415 tmp = cipher_in;
1416 keycount = strsep(&tmp, "-");
1417 cipher = strsep(&keycount, ":");
1418
1419 if (!keycount)
1420 cc->tfms_count = 1;
1421 else if (sscanf(keycount, "%u%c", &cc->tfms_count, &dummy) != 1 ||
1422 !is_power_of_2(cc->tfms_count)) {
1423 ti->error = "Bad cipher key count specification";
1424 return -EINVAL;
1425 }
1426 cc->key_parts = cc->tfms_count;
1427
1428 cc->cipher = kstrdup(cipher, GFP_KERNEL);
1429 if (!cc->cipher)
1430 goto bad_mem;
1431
1432 chainmode = strsep(&tmp, "-");
1433 ivopts = strsep(&tmp, "-");
1434 ivmode = strsep(&ivopts, ":");
1435
1436 if (tmp)
1437 DMWARN("Ignoring unexpected additional cipher options");
1438
1439 cc->cpu = __alloc_percpu(sizeof(*(cc->cpu)),
1440 __alignof__(struct crypt_cpu));
1441 if (!cc->cpu) {
1442 ti->error = "Cannot allocate per cpu state";
1443 goto bad_mem;
1444 }
1445
1446
1447
1448
1449
1450 if (!chainmode || (!strcmp(chainmode, "plain") && !ivmode)) {
1451 chainmode = "cbc";
1452 ivmode = "plain";
1453 }
1454
1455 if (strcmp(chainmode, "ecb") && !ivmode) {
1456 ti->error = "IV mechanism required";
1457 return -EINVAL;
1458 }
1459
1460 cipher_api = kmalloc(CRYPTO_MAX_ALG_NAME, GFP_KERNEL);
1461 if (!cipher_api)
1462 goto bad_mem;
1463
1464 ret = snprintf(cipher_api, CRYPTO_MAX_ALG_NAME,
1465 "%s(%s)", chainmode, cipher);
1466 if (ret < 0) {
1467 kfree(cipher_api);
1468 goto bad_mem;
1469 }
1470
1471
1472 ret = crypt_alloc_tfms(cc, cipher_api);
1473 if (ret < 0) {
1474 ti->error = "Error allocating crypto tfm";
1475 goto bad;
1476 }
1477
1478
1479 ret = crypt_set_key(cc, key);
1480 if (ret < 0) {
1481 ti->error = "Error decoding and setting key";
1482 goto bad;
1483 }
1484
1485
1486 cc->iv_size = crypto_ablkcipher_ivsize(any_tfm(cc));
1487 if (cc->iv_size)
1488
1489 cc->iv_size = max(cc->iv_size,
1490 (unsigned int)(sizeof(u64) / sizeof(u8)));
1491 else if (ivmode) {
1492 DMWARN("Selected cipher does not support IVs");
1493 ivmode = NULL;
1494 }
1495
1496
1497 if (ivmode == NULL)
1498 cc->iv_gen_ops = NULL;
1499 else if (strcmp(ivmode, "plain") == 0)
1500 cc->iv_gen_ops = &crypt_iv_plain_ops;
1501 else if (strcmp(ivmode, "plain64") == 0)
1502 cc->iv_gen_ops = &crypt_iv_plain64_ops;
1503 else if (strcmp(ivmode, "essiv") == 0)
1504 cc->iv_gen_ops = &crypt_iv_essiv_ops;
1505 else if (strcmp(ivmode, "benbi") == 0)
1506 cc->iv_gen_ops = &crypt_iv_benbi_ops;
1507 else if (strcmp(ivmode, "null") == 0)
1508 cc->iv_gen_ops = &crypt_iv_null_ops;
1509 else if (strcmp(ivmode, "lmk") == 0) {
1510 cc->iv_gen_ops = &crypt_iv_lmk_ops;
1511
1512
1513
1514
1515 if (cc->key_size % cc->key_parts)
1516 cc->key_parts++;
1517 } else {
1518 ret = -EINVAL;
1519 ti->error = "Invalid IV mode";
1520 goto bad;
1521 }
1522
1523
1524 if (cc->iv_gen_ops && cc->iv_gen_ops->ctr) {
1525 ret = cc->iv_gen_ops->ctr(cc, ti, ivopts);
1526 if (ret < 0) {
1527 ti->error = "Error creating IV";
1528 goto bad;
1529 }
1530 }
1531
1532
1533 if (cc->iv_gen_ops && cc->iv_gen_ops->init) {
1534 ret = cc->iv_gen_ops->init(cc);
1535 if (ret < 0) {
1536 ti->error = "Error initialising IV";
1537 goto bad;
1538 }
1539 }
1540
1541 ret = 0;
1542bad:
1543 kfree(cipher_api);
1544 return ret;
1545
1546bad_mem:
1547 ti->error = "Cannot allocate cipher strings";
1548 return -ENOMEM;
1549}
1550
1551
1552
1553
1554
1555static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1556{
1557 struct crypt_config *cc;
1558 unsigned int key_size, opt_params;
1559 unsigned long long tmpll;
1560 int ret;
1561 struct dm_arg_set as;
1562 const char *opt_string;
1563 char dummy;
1564
1565 static struct dm_arg _args[] = {
1566 {0, 1, "Invalid number of feature args"},
1567 };
1568
1569 if (argc < 5) {
1570 ti->error = "Not enough arguments";
1571 return -EINVAL;
1572 }
1573
1574 key_size = strlen(argv[1]) >> 1;
1575
1576 cc = kzalloc(sizeof(*cc) + key_size * sizeof(u8), GFP_KERNEL);
1577 if (!cc) {
1578 ti->error = "Cannot allocate encryption context";
1579 return -ENOMEM;
1580 }
1581 cc->key_size = key_size;
1582
1583 ti->private = cc;
1584 ret = crypt_ctr_cipher(ti, argv[0], argv[1]);
1585 if (ret < 0)
1586 goto bad;
1587
1588 ret = -ENOMEM;
1589 cc->io_pool = mempool_create_slab_pool(MIN_IOS, _crypt_io_pool);
1590 if (!cc->io_pool) {
1591 ti->error = "Cannot allocate crypt io mempool";
1592 goto bad;
1593 }
1594
1595 cc->dmreq_start = sizeof(struct ablkcipher_request);
1596 cc->dmreq_start += crypto_ablkcipher_reqsize(any_tfm(cc));
1597 cc->dmreq_start = ALIGN(cc->dmreq_start, crypto_tfm_ctx_alignment());
1598 cc->dmreq_start += crypto_ablkcipher_alignmask(any_tfm(cc)) &
1599 ~(crypto_tfm_ctx_alignment() - 1);
1600
1601 cc->req_pool = mempool_create_kmalloc_pool(MIN_IOS, cc->dmreq_start +
1602 sizeof(struct dm_crypt_request) + cc->iv_size);
1603 if (!cc->req_pool) {
1604 ti->error = "Cannot allocate crypt request mempool";
1605 goto bad;
1606 }
1607
1608 cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0);
1609 if (!cc->page_pool) {
1610 ti->error = "Cannot allocate page mempool";
1611 goto bad;
1612 }
1613
1614 cc->bs = bioset_create(MIN_IOS, 0);
1615 if (!cc->bs) {
1616 ti->error = "Cannot allocate crypt bioset";
1617 goto bad;
1618 }
1619
1620 ret = -EINVAL;
1621 if (sscanf(argv[2], "%llu%c", &tmpll, &dummy) != 1) {
1622 ti->error = "Invalid iv_offset sector";
1623 goto bad;
1624 }
1625 cc->iv_offset = tmpll;
1626
1627 if (dm_get_device(ti, argv[3], dm_table_get_mode(ti->table), &cc->dev)) {
1628 ti->error = "Device lookup failed";
1629 goto bad;
1630 }
1631
1632 if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1) {
1633 ti->error = "Invalid device sector";
1634 goto bad;
1635 }
1636 cc->start = tmpll;
1637
1638 argv += 5;
1639 argc -= 5;
1640
1641
1642 if (argc) {
1643 as.argc = argc;
1644 as.argv = argv;
1645
1646 ret = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
1647 if (ret)
1648 goto bad;
1649
1650 opt_string = dm_shift_arg(&as);
1651
1652 if (opt_params == 1 && opt_string &&
1653 !strcasecmp(opt_string, "allow_discards"))
1654 ti->num_discard_requests = 1;
1655 else if (opt_params) {
1656 ret = -EINVAL;
1657 ti->error = "Invalid feature arguments";
1658 goto bad;
1659 }
1660 }
1661
1662 ret = -ENOMEM;
1663 cc->io_queue = alloc_workqueue("kcryptd_io",
1664 WQ_NON_REENTRANT|
1665 WQ_MEM_RECLAIM,
1666 1);
1667 if (!cc->io_queue) {
1668 ti->error = "Couldn't create kcryptd io queue";
1669 goto bad;
1670 }
1671
1672 cc->crypt_queue = alloc_workqueue("kcryptd",
1673 WQ_NON_REENTRANT|
1674 WQ_CPU_INTENSIVE|
1675 WQ_MEM_RECLAIM,
1676 1);
1677 if (!cc->crypt_queue) {
1678 ti->error = "Couldn't create kcryptd queue";
1679 goto bad;
1680 }
1681
1682 ti->num_flush_requests = 1;
1683 ti->discard_zeroes_data_unsupported = true;
1684
1685 return 0;
1686
1687bad:
1688 crypt_dtr(ti);
1689 return ret;
1690}
1691
1692static int crypt_map(struct dm_target *ti, struct bio *bio)
1693{
1694 struct dm_crypt_io *io;
1695 struct crypt_config *cc = ti->private;
1696
1697
1698
1699
1700
1701
1702 if (unlikely(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))) {
1703 bio->bi_bdev = cc->dev->bdev;
1704 if (bio_sectors(bio))
1705 bio->bi_sector = cc->start + dm_target_offset(ti, bio->bi_sector);
1706 return DM_MAPIO_REMAPPED;
1707 }
1708
1709 io = crypt_io_alloc(cc, bio, dm_target_offset(ti, bio->bi_sector));
1710
1711 if (bio_data_dir(io->base_bio) == READ) {
1712 if (kcryptd_io_read(io, GFP_NOWAIT))
1713 kcryptd_queue_io(io);
1714 } else
1715 kcryptd_queue_crypt(io);
1716
1717 return DM_MAPIO_SUBMITTED;
1718}
1719
1720static int crypt_status(struct dm_target *ti, status_type_t type,
1721 unsigned status_flags, char *result, unsigned maxlen)
1722{
1723 struct crypt_config *cc = ti->private;
1724 unsigned int sz = 0;
1725
1726 switch (type) {
1727 case STATUSTYPE_INFO:
1728 result[0] = '\0';
1729 break;
1730
1731 case STATUSTYPE_TABLE:
1732 DMEMIT("%s ", cc->cipher_string);
1733
1734 if (cc->key_size > 0) {
1735 if ((maxlen - sz) < ((cc->key_size << 1) + 1))
1736 return -ENOMEM;
1737
1738 crypt_encode_key(result + sz, cc->key, cc->key_size);
1739 sz += cc->key_size << 1;
1740 } else {
1741 if (sz >= maxlen)
1742 return -ENOMEM;
1743 result[sz++] = '-';
1744 }
1745
1746 DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset,
1747 cc->dev->name, (unsigned long long)cc->start);
1748
1749 if (ti->num_discard_requests)
1750 DMEMIT(" 1 allow_discards");
1751
1752 break;
1753 }
1754 return 0;
1755}
1756
1757static void crypt_postsuspend(struct dm_target *ti)
1758{
1759 struct crypt_config *cc = ti->private;
1760
1761 set_bit(DM_CRYPT_SUSPENDED, &cc->flags);
1762}
1763
1764static int crypt_preresume(struct dm_target *ti)
1765{
1766 struct crypt_config *cc = ti->private;
1767
1768 if (!test_bit(DM_CRYPT_KEY_VALID, &cc->flags)) {
1769 DMERR("aborting resume - crypt key is not set.");
1770 return -EAGAIN;
1771 }
1772
1773 return 0;
1774}
1775
1776static void crypt_resume(struct dm_target *ti)
1777{
1778 struct crypt_config *cc = ti->private;
1779
1780 clear_bit(DM_CRYPT_SUSPENDED, &cc->flags);
1781}
1782
1783
1784
1785
1786
1787static int crypt_message(struct dm_target *ti, unsigned argc, char **argv)
1788{
1789 struct crypt_config *cc = ti->private;
1790 int ret = -EINVAL;
1791
1792 if (argc < 2)
1793 goto error;
1794
1795 if (!strcasecmp(argv[0], "key")) {
1796 if (!test_bit(DM_CRYPT_SUSPENDED, &cc->flags)) {
1797 DMWARN("not suspended during key manipulation.");
1798 return -EINVAL;
1799 }
1800 if (argc == 3 && !strcasecmp(argv[1], "set")) {
1801 ret = crypt_set_key(cc, argv[2]);
1802 if (ret)
1803 return ret;
1804 if (cc->iv_gen_ops && cc->iv_gen_ops->init)
1805 ret = cc->iv_gen_ops->init(cc);
1806 return ret;
1807 }
1808 if (argc == 2 && !strcasecmp(argv[1], "wipe")) {
1809 if (cc->iv_gen_ops && cc->iv_gen_ops->wipe) {
1810 ret = cc->iv_gen_ops->wipe(cc);
1811 if (ret)
1812 return ret;
1813 }
1814 return crypt_wipe_key(cc);
1815 }
1816 }
1817
1818error:
1819 DMWARN("unrecognised message received.");
1820 return -EINVAL;
1821}
1822
1823static int crypt_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
1824 struct bio_vec *biovec, int max_size)
1825{
1826 struct crypt_config *cc = ti->private;
1827 struct request_queue *q = bdev_get_queue(cc->dev->bdev);
1828
1829 if (!q->merge_bvec_fn)
1830 return max_size;
1831
1832 bvm->bi_bdev = cc->dev->bdev;
1833 bvm->bi_sector = cc->start + dm_target_offset(ti, bvm->bi_sector);
1834
1835 return min(max_size, q->merge_bvec_fn(q, bvm, biovec));
1836}
1837
1838static int crypt_iterate_devices(struct dm_target *ti,
1839 iterate_devices_callout_fn fn, void *data)
1840{
1841 struct crypt_config *cc = ti->private;
1842
1843 return fn(ti, cc->dev, cc->start, ti->len, data);
1844}
1845
1846static struct target_type crypt_target = {
1847 .name = "crypt",
1848 .version = {1, 12, 0},
1849 .module = THIS_MODULE,
1850 .ctr = crypt_ctr,
1851 .dtr = crypt_dtr,
1852 .map = crypt_map,
1853 .status = crypt_status,
1854 .postsuspend = crypt_postsuspend,
1855 .preresume = crypt_preresume,
1856 .resume = crypt_resume,
1857 .message = crypt_message,
1858 .merge = crypt_merge,
1859 .iterate_devices = crypt_iterate_devices,
1860};
1861
1862static int __init dm_crypt_init(void)
1863{
1864 int r;
1865
1866 _crypt_io_pool = KMEM_CACHE(dm_crypt_io, 0);
1867 if (!_crypt_io_pool)
1868 return -ENOMEM;
1869
1870 r = dm_register_target(&crypt_target);
1871 if (r < 0) {
1872 DMERR("register failed %d", r);
1873 kmem_cache_destroy(_crypt_io_pool);
1874 }
1875
1876 return r;
1877}
1878
1879static void __exit dm_crypt_exit(void)
1880{
1881 dm_unregister_target(&crypt_target);
1882 kmem_cache_destroy(_crypt_io_pool);
1883}
1884
1885module_init(dm_crypt_init);
1886module_exit(dm_crypt_exit);
1887
1888MODULE_AUTHOR("Christophe Saout <christophe@saout.de>");
1889MODULE_DESCRIPTION(DM_NAME " target for transparent encryption / decryption");
1890MODULE_LICENSE("GPL");
1891