diff options
Diffstat (limited to 'crypto/cipher.c')
-rw-r--r-- | crypto/cipher.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/crypto/cipher.c b/crypto/cipher.c index d8ca0ec8d0be..326461780673 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c | |||
@@ -45,15 +45,10 @@ static unsigned int crypt_slow(const struct cipher_desc *desc, | |||
45 | u8 buffer[bsize * 2 + alignmask]; | 45 | u8 buffer[bsize * 2 + alignmask]; |
46 | u8 *src = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1); | 46 | u8 *src = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1); |
47 | u8 *dst = src + bsize; | 47 | u8 *dst = src + bsize; |
48 | unsigned int n; | ||
49 | |||
50 | n = scatterwalk_copychunks(src, in, bsize, 0); | ||
51 | scatterwalk_advance(in, n); | ||
52 | 48 | ||
49 | scatterwalk_copychunks(src, in, bsize, 0); | ||
53 | desc->prfn(desc, dst, src, bsize); | 50 | desc->prfn(desc, dst, src, bsize); |
54 | 51 | scatterwalk_copychunks(dst, out, bsize, 1); | |
55 | n = scatterwalk_copychunks(dst, out, bsize, 1); | ||
56 | scatterwalk_advance(out, n); | ||
57 | 52 | ||
58 | return bsize; | 53 | return bsize; |
59 | } | 54 | } |
@@ -64,12 +59,16 @@ static inline unsigned int crypt_fast(const struct cipher_desc *desc, | |||
64 | unsigned int nbytes, u8 *tmp) | 59 | unsigned int nbytes, u8 *tmp) |
65 | { | 60 | { |
66 | u8 *src, *dst; | 61 | u8 *src, *dst; |
62 | u8 *real_src, *real_dst; | ||
63 | |||
64 | real_src = scatterwalk_map(in, 0); | ||
65 | real_dst = scatterwalk_map(out, 1); | ||
67 | 66 | ||
68 | src = in->data; | 67 | src = real_src; |
69 | dst = scatterwalk_samebuf(in, out) ? src : out->data; | 68 | dst = scatterwalk_samebuf(in, out) ? src : real_dst; |
70 | 69 | ||
71 | if (tmp) { | 70 | if (tmp) { |
72 | memcpy(tmp, in->data, nbytes); | 71 | memcpy(tmp, src, nbytes); |
73 | src = tmp; | 72 | src = tmp; |
74 | dst = tmp; | 73 | dst = tmp; |
75 | } | 74 | } |
@@ -77,7 +76,10 @@ static inline unsigned int crypt_fast(const struct cipher_desc *desc, | |||
77 | nbytes = desc->prfn(desc, dst, src, nbytes); | 76 | nbytes = desc->prfn(desc, dst, src, nbytes); |
78 | 77 | ||
79 | if (tmp) | 78 | if (tmp) |
80 | memcpy(out->data, tmp, nbytes); | 79 | memcpy(real_dst, tmp, nbytes); |
80 | |||
81 | scatterwalk_unmap(real_src, 0); | ||
82 | scatterwalk_unmap(real_dst, 1); | ||
81 | 83 | ||
82 | scatterwalk_advance(in, nbytes); | 84 | scatterwalk_advance(in, nbytes); |
83 | scatterwalk_advance(out, nbytes); | 85 | scatterwalk_advance(out, nbytes); |
@@ -126,9 +128,6 @@ static int crypt(const struct cipher_desc *desc, | |||
126 | tmp = (u8 *)buffer; | 128 | tmp = (u8 *)buffer; |
127 | } | 129 | } |
128 | 130 | ||
129 | scatterwalk_map(&walk_in, 0); | ||
130 | scatterwalk_map(&walk_out, 1); | ||
131 | |||
132 | n = scatterwalk_clamp(&walk_in, n); | 131 | n = scatterwalk_clamp(&walk_in, n); |
133 | n = scatterwalk_clamp(&walk_out, n); | 132 | n = scatterwalk_clamp(&walk_out, n); |
134 | 133 | ||