Fixing a few misc bugs in prng.c: - Remove prng_key/prng_iv from prng_context (both kept in tfm ptr) - Making _get_more_prng_bytes return meaningful err codes (not just -1/0) Signed-off-by: Neil Horman <nhorman@xxxxxxxxxxxxx> crypto/prng.c | 26 +++++++++----------------- firmware/Makefile | 4 ++-- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/crypto/prng.c b/crypto/prng.c index 7aeb0d0..933b4bc 100644 --- a/crypto/prng.c +++ b/crypto/prng.c @@ -56,8 +56,6 @@ struct prng_context { - char *prng_key; - char *prng_iv; spinlock_t prng_lock; unsigned char rand_data[DEFAULT_BLK_SZ]; unsigned char last_rand_data[DEFAULT_BLK_SZ]; @@ -158,7 +156,7 @@ static int _get_more_prng_bytes(struct prng_context *ctx) "ctx %p Failed repetition check!\n", ctx); ctx->flags |= PRNG_NEED_RESET; - return -1; + return -EFAULT; } memcpy(ctx->last_rand_data, ctx->rand_data, DEFAULT_BLK_SZ); @@ -186,7 +184,7 @@ static int _get_more_prng_bytes(struct prng_context *ctx) dbgprint(KERN_CRIT "Crypt of block failed for context %p\n", ctx); ctx->rand_data_valid = DEFAULT_BLK_SZ; - return -1; + return -EFAULT; } } @@ -273,7 +271,7 @@ remainder: for (; byte_count >= DEFAULT_BLK_SZ; byte_count -= DEFAULT_BLK_SZ) { if (_get_more_prng_bytes(ctx) < 0) { memset(buf, 0, nbytes); - err = -1; + err = -EFAULT; goto done; } memcpy(ptr, ctx->rand_data, DEFAULT_BLK_SZ); @@ -329,19 +327,14 @@ int reset_prng_context(struct prng_context *ctx, int ret; int iv_len; int rc = -EFAULT; - + unsigned char *prng_key; + unsigned char *prng_iv; spin_lock(&ctx->prng_lock); ctx->flags |= PRNG_NEED_RESET; - if (key) - memcpy(ctx->prng_key, key, strlen(ctx->prng_key)); - else - ctx->prng_key = DEFAULT_PRNG_KEY; + prng_key = (key != NULL) ? key : (unsigned char *)DEFAULT_PRNG_KEY; - if (iv) - memcpy(ctx->prng_iv, iv, strlen(ctx->prng_iv)); - else - ctx->prng_iv = DEFAULT_PRNG_IV; + prng_iv = iv ? iv : (unsigned char *)DEFAULT_PRNG_IV; if (V) memcpy(ctx->V, V, DEFAULT_BLK_SZ); @@ -369,8 +362,7 @@ int reset_prng_context(struct prng_context *ctx, ctx->rand_data_valid = DEFAULT_BLK_SZ; - ret = crypto_blkcipher_setkey(ctx->tfm, ctx->prng_key, - strlen(ctx->prng_key)); + ret = crypto_blkcipher_setkey(ctx->tfm, prng_key, strlen(prng_key)); if (ret) { dbgprint(KERN_CRIT "PRNG: setkey() failed flags=%x\n", crypto_blkcipher_get_flags(ctx->tfm)); @@ -380,7 +372,7 @@ int reset_prng_context(struct prng_context *ctx, iv_len = crypto_blkcipher_ivsize(ctx->tfm); if (iv_len) - crypto_blkcipher_set_iv(ctx->tfm, ctx->prng_iv, iv_len); + crypto_blkcipher_set_iv(ctx->tfm, prng_iv, iv_len); rc = 0; ctx->flags &= ~PRNG_NEED_RESET; diff --git a/firmware/Makefile b/firmware/Makefile index 809a526..3515814 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -34,8 +34,8 @@ fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \ sb16/ima_adpcm_capture.csp fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \ yamaha/ds1e_ctrl.fw -fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \ - tigon/tg3_tso5.bin +#fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \ +# tigon/tg3_tso5.bin fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.bin fw-shipped-$(CONFIG_USB_EMI26) += emi26/loader.fw emi26/firmware.fw \ emi26/bitstream.fw -- /**************************************************** * Neil Horman <nhorman@xxxxxxxxxxxxx> * Software Engineer, Red Hat ****************************************************/ -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html