Commit b610626523cf5c780bf7d9746580c323e90580e6
Committed by
Behan Webster
1 parent
37e5265437
crypto, dm: LLVMLinux: Remove VLAIS usage from dm-crypt
Replaced the use of a Variable Length Array In Struct (VLAIS) with a C99 compliant equivalent. This patch allocates the appropriate amount of memory using a char array using the SHASH_DESC_ON_STACK macro. The new code can be compiled with both gcc and clang. Signed-off-by: Jan-Simon Möller <dl9pf@gmx.de> Signed-off-by: Behan Webster <behanw@converseincode.com> Reviewed-by: Mark Charlebois <charlebm@gmail.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Cc: pageexec@freemail.hu Cc: gmazyland@gmail.com Cc: "David S. Miller" <davem@davemloft.net>
Showing 1 changed file with 14 additions and 20 deletions Side-by-side Diff
drivers/md/dm-crypt.c
... | ... | @@ -526,29 +526,26 @@ |
526 | 526 | u8 *data) |
527 | 527 | { |
528 | 528 | struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk; |
529 | - struct { | |
530 | - struct shash_desc desc; | |
531 | - char ctx[crypto_shash_descsize(lmk->hash_tfm)]; | |
532 | - } sdesc; | |
529 | + SHASH_DESC_ON_STACK(desc, lmk->hash_tfm); | |
533 | 530 | struct md5_state md5state; |
534 | 531 | __le32 buf[4]; |
535 | 532 | int i, r; |
536 | 533 | |
537 | - sdesc.desc.tfm = lmk->hash_tfm; | |
538 | - sdesc.desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; | |
534 | + desc->tfm = lmk->hash_tfm; | |
535 | + desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP; | |
539 | 536 | |
540 | - r = crypto_shash_init(&sdesc.desc); | |
537 | + r = crypto_shash_init(desc); | |
541 | 538 | if (r) |
542 | 539 | return r; |
543 | 540 | |
544 | 541 | if (lmk->seed) { |
545 | - r = crypto_shash_update(&sdesc.desc, lmk->seed, LMK_SEED_SIZE); | |
542 | + r = crypto_shash_update(desc, lmk->seed, LMK_SEED_SIZE); | |
546 | 543 | if (r) |
547 | 544 | return r; |
548 | 545 | } |
549 | 546 | |
550 | 547 | /* Sector is always 512B, block size 16, add data of blocks 1-31 */ |
551 | - r = crypto_shash_update(&sdesc.desc, data + 16, 16 * 31); | |
548 | + r = crypto_shash_update(desc, data + 16, 16 * 31); | |
552 | 549 | if (r) |
553 | 550 | return r; |
554 | 551 | |
555 | 552 | |
... | ... | @@ -557,12 +554,12 @@ |
557 | 554 | buf[1] = cpu_to_le32((((u64)dmreq->iv_sector >> 32) & 0x00FFFFFF) | 0x80000000); |
558 | 555 | buf[2] = cpu_to_le32(4024); |
559 | 556 | buf[3] = 0; |
560 | - r = crypto_shash_update(&sdesc.desc, (u8 *)buf, sizeof(buf)); | |
557 | + r = crypto_shash_update(desc, (u8 *)buf, sizeof(buf)); | |
561 | 558 | if (r) |
562 | 559 | return r; |
563 | 560 | |
564 | 561 | /* No MD5 padding here */ |
565 | - r = crypto_shash_export(&sdesc.desc, &md5state); | |
562 | + r = crypto_shash_export(desc, &md5state); | |
566 | 563 | if (r) |
567 | 564 | return r; |
568 | 565 | |
... | ... | @@ -679,10 +676,7 @@ |
679 | 676 | struct iv_tcw_private *tcw = &cc->iv_gen_private.tcw; |
680 | 677 | u64 sector = cpu_to_le64((u64)dmreq->iv_sector); |
681 | 678 | u8 buf[TCW_WHITENING_SIZE]; |
682 | - struct { | |
683 | - struct shash_desc desc; | |
684 | - char ctx[crypto_shash_descsize(tcw->crc32_tfm)]; | |
685 | - } sdesc; | |
679 | + SHASH_DESC_ON_STACK(desc, tcw->crc32_tfm); | |
686 | 680 | int i, r; |
687 | 681 | |
688 | 682 | /* xor whitening with sector number */ |
689 | 683 | |
690 | 684 | |
691 | 685 | |
... | ... | @@ -691,16 +685,16 @@ |
691 | 685 | crypto_xor(&buf[8], (u8 *)§or, 8); |
692 | 686 | |
693 | 687 | /* calculate crc32 for every 32bit part and xor it */ |
694 | - sdesc.desc.tfm = tcw->crc32_tfm; | |
695 | - sdesc.desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; | |
688 | + desc->tfm = tcw->crc32_tfm; | |
689 | + desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP; | |
696 | 690 | for (i = 0; i < 4; i++) { |
697 | - r = crypto_shash_init(&sdesc.desc); | |
691 | + r = crypto_shash_init(desc); | |
698 | 692 | if (r) |
699 | 693 | goto out; |
700 | - r = crypto_shash_update(&sdesc.desc, &buf[i * 4], 4); | |
694 | + r = crypto_shash_update(desc, &buf[i * 4], 4); | |
701 | 695 | if (r) |
702 | 696 | goto out; |
703 | - r = crypto_shash_final(&sdesc.desc, &buf[i * 4]); | |
697 | + r = crypto_shash_final(desc, &buf[i * 4]); | |
704 | 698 | if (r) |
705 | 699 | goto out; |
706 | 700 | } |