* [PATCH 1/3] crypto-ansi_cprng: Use common error handling code in get_prng_bytes()
2017-10-21 17:12 [PATCH 0/3] crypto-ansi_cprng: Fine-tuning for three function implementations SF Markus Elfring
@ 2017-10-21 17:14 ` SF Markus Elfring
2017-10-21 17:15 ` [PATCH 2/3] crypto-ansi_cprng: Delete two variable assignments " SF Markus Elfring
2017-10-21 17:17 ` [PATCH 3/3] crypto-ansi_cprng: Delete unnecessary blank lines SF Markus Elfring
2 siblings, 0 replies; 4+ messages in thread
From: SF Markus Elfring @ 2017-10-21 17:14 UTC (permalink / raw)
To: linux-crypto, David S. Miller, Herbert Xu, Neil Horman
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Sat, 21 Oct 2017 15:17:52 +0200
Adjust jump targets so that a bit of exception handling can be better
reused at the end of this function.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
crypto/ansi_cprng.c | 34 ++++++++++++++++------------------
1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
index eff337ce9003..111c8982a47f 100644
--- a/crypto/ansi_cprng.c
+++ b/crypto/ansi_cprng.c
@@ -195,7 +195,7 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
err = -EINVAL;
if (ctx->flags & PRNG_NEED_RESET)
- goto done;
+ goto unlock;
/*
* If the FIXED_SIZE flag is on, only return whole blocks of
@@ -204,7 +204,7 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
err = -EINVAL;
if (ctx->flags & PRNG_FIXED_SIZE) {
if (nbytes < DEFAULT_BLK_SZ)
- goto done;
+ goto unlock;
byte_count = DEFAULT_BLK_SZ;
}
@@ -219,13 +219,9 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
remainder:
- if (ctx->rand_data_valid == DEFAULT_BLK_SZ) {
- if (_get_more_prng_bytes(ctx, do_cont_test) < 0) {
- memset(buf, 0, nbytes);
- err = -EINVAL;
- goto done;
- }
- }
+ if (ctx->rand_data_valid == DEFAULT_BLK_SZ &&
+ _get_more_prng_bytes(ctx, do_cont_test) < 0)
+ goto reset_memory;
/*
* Copy any data less than an entire block
@@ -238,7 +234,7 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
byte_count--;
ctx->rand_data_valid++;
if (byte_count == 0)
- goto done;
+ goto unlock;
}
}
@@ -246,13 +242,10 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
* Now copy whole blocks
*/
for (; byte_count >= DEFAULT_BLK_SZ; byte_count -= DEFAULT_BLK_SZ) {
- if (ctx->rand_data_valid == DEFAULT_BLK_SZ) {
- if (_get_more_prng_bytes(ctx, do_cont_test) < 0) {
- memset(buf, 0, nbytes);
- err = -EINVAL;
- goto done;
- }
- }
+ if (ctx->rand_data_valid == DEFAULT_BLK_SZ &&
+ _get_more_prng_bytes(ctx, do_cont_test) < 0)
+ goto reset_memory;
+
if (ctx->rand_data_valid > 0)
goto empty_rbuf;
memcpy(ptr, ctx->rand_data, DEFAULT_BLK_SZ);
@@ -266,11 +259,16 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
if (byte_count)
goto remainder;
-done:
+unlock:
spin_unlock_bh(&ctx->prng_lock);
dbgprint(KERN_CRIT "returning %d from get_prng_bytes in context %p\n",
err, ctx);
return err;
+
+reset_memory:
+ memset(buf, 0, nbytes);
+ err = -EINVAL;
+ goto unlock;
}
static void free_prng_context(struct prng_context *ctx)
--
2.14.2
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 2/3] crypto-ansi_cprng: Delete two variable assignments in get_prng_bytes()
2017-10-21 17:12 [PATCH 0/3] crypto-ansi_cprng: Fine-tuning for three function implementations SF Markus Elfring
2017-10-21 17:14 ` [PATCH 1/3] crypto-ansi_cprng: Use common error handling code in get_prng_bytes() SF Markus Elfring
@ 2017-10-21 17:15 ` SF Markus Elfring
2017-10-21 17:17 ` [PATCH 3/3] crypto-ansi_cprng: Delete unnecessary blank lines SF Markus Elfring
2 siblings, 0 replies; 4+ messages in thread
From: SF Markus Elfring @ 2017-10-21 17:15 UTC (permalink / raw)
To: linux-crypto, David S. Miller, Herbert Xu, Neil Horman
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Sat, 21 Oct 2017 16:10:43 +0200
Adjust a jump target so that two error code assignments which are redundant
before condition checks can be removed because the same value will be set
as an exception handling at the end of this function.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
crypto/ansi_cprng.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
index 111c8982a47f..3d805bf6d0c6 100644
--- a/crypto/ansi_cprng.c
+++ b/crypto/ansi_cprng.c
@@ -192,19 +192,16 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
spin_lock_bh(&ctx->prng_lock);
-
- err = -EINVAL;
if (ctx->flags & PRNG_NEED_RESET)
- goto unlock;
+ goto failure_indication;
/*
* If the FIXED_SIZE flag is on, only return whole blocks of
* pseudo random data
*/
- err = -EINVAL;
if (ctx->flags & PRNG_FIXED_SIZE) {
if (nbytes < DEFAULT_BLK_SZ)
- goto unlock;
+ goto failure_indication;
byte_count = DEFAULT_BLK_SZ;
}
@@ -267,6 +264,7 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
reset_memory:
memset(buf, 0, nbytes);
+failure_indication:
err = -EINVAL;
goto unlock;
}
--
2.14.2
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 3/3] crypto-ansi_cprng: Delete unnecessary blank lines
2017-10-21 17:12 [PATCH 0/3] crypto-ansi_cprng: Fine-tuning for three function implementations SF Markus Elfring
2017-10-21 17:14 ` [PATCH 1/3] crypto-ansi_cprng: Use common error handling code in get_prng_bytes() SF Markus Elfring
2017-10-21 17:15 ` [PATCH 2/3] crypto-ansi_cprng: Delete two variable assignments " SF Markus Elfring
@ 2017-10-21 17:17 ` SF Markus Elfring
2 siblings, 0 replies; 4+ messages in thread
From: SF Markus Elfring @ 2017-10-21 17:17 UTC (permalink / raw)
To: linux-crypto, David S. Miller, Herbert Xu, Neil Horman
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Sat, 21 Oct 2017 16:27:56 +0200
The script "checkpatch.pl" pointed information out like the following.
CHECK: Please don't use multiple blank lines
Thus fix the affected source code places.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
crypto/ansi_cprng.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
index 3d805bf6d0c6..b9ec1975dde7 100644
--- a/crypto/ansi_cprng.c
+++ b/crypto/ansi_cprng.c
@@ -40,7 +40,6 @@
* for implementation details
*/
-
struct prng_context {
spinlock_t prng_lock;
unsigned char rand_data[DEFAULT_BLK_SZ];
@@ -77,8 +76,8 @@ static void xor_vectors(unsigned char *in1, unsigned char *in2,
for (i = 0; i < size; i++)
out[i] = in1[i] ^ in2[i];
-
}
+
/*
* Returns DEFAULT_BLK_SZ bytes of random data per call
* returns 0 if generation succeeded, <0 if something went wrong
@@ -89,7 +88,6 @@ static int _get_more_prng_bytes(struct prng_context *ctx, int cont_test)
unsigned char tmp[DEFAULT_BLK_SZ];
unsigned char *output = NULL;
-
dbgprint(KERN_CRIT "Calling _get_more_prng_bytes for context %p\n",
ctx);
@@ -101,7 +99,6 @@ static int _get_more_prng_bytes(struct prng_context *ctx, int cont_test)
* This algorithm is a 3 stage state machine
*/
for (i = 0; i < 3; i++) {
-
switch (i) {
case 0:
/*
@@ -156,10 +153,8 @@ static int _get_more_prng_bytes(struct prng_context *ctx, int cont_test)
break;
}
-
/* do the encryption */
crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
-
}
/*
@@ -190,7 +185,6 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
unsigned int byte_count = (unsigned int)nbytes;
int err;
-
spin_lock_bh(&ctx->prng_lock);
if (ctx->flags & PRNG_NEED_RESET)
goto failure_indication;
@@ -214,7 +208,6 @@ static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
dbgprint(KERN_CRIT "getting %d random bytes for context %p\n",
byte_count, ctx);
-
remainder:
if (ctx->rand_data_valid == DEFAULT_BLK_SZ &&
_get_more_prng_bytes(ctx, do_cont_test) < 0)
--
2.14.2
^ permalink raw reply [flat|nested] 4+ messages in thread