Commit b610626523cf5c780bf7d9746580c323e90580e6

Authored by Jan-Simon Möller
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 *)&sector, 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 }