diff --git a/linuxkm/Makefile b/linuxkm/Makefile index d0a146a9e..1d26de88e 100644 --- a/linuxkm/Makefile +++ b/linuxkm/Makefile @@ -61,9 +61,9 @@ libwolfssl.ko: @mkdir -p linuxkm src wolfcrypt/src wolfcrypt/test @if test ! -h $(SRC_TOP)/Kbuild; then ln -s $(MODULE_TOP)/Kbuild $(SRC_TOP)/Kbuild; fi ifeq "$(ENABLED_LINUXKM_PIE)" "yes" - +$(MAKE) -C $(KERNEL_ROOT) M=$(MODULE_TOP) src=$(SRC_TOP) CC_FLAGS_FTRACE= + +$(MAKE) -C $(KERNEL_ROOT) M=$(MODULE_TOP) src=$(SRC_TOP) $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE= else - +$(MAKE) -C $(KERNEL_ROOT) M=$(MODULE_TOP) src=$(SRC_TOP) + +$(MAKE) -C $(KERNEL_ROOT) M=$(MODULE_TOP) src=$(SRC_TOP) $(KBUILD_EXTRA_FLAGS) endif libwolfssl.ko.signed: libwolfssl.ko diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index cb78a7681..86f49d284 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -4352,13 +4352,45 @@ static int _sp_mont_red(sp_int* a, sp_int* m, sp_int_digit mp); */ static void _sp_zero(sp_int* a) { - a->used = 0; - a->dp[0] = 0; + sp_int_minimal* am = (sp_int_minimal *)a; + am->used = 0; + am->dp[0] = 0; #ifdef WOLFSSL_SP_INT_NEGATIVE - a->sign = MP_ZPOS; + am->sign = MP_ZPOS; #endif } + +/* Initialize the multi-precision number to be zero with a given max size. + * + * @param [out] a SP integer. + * @param [in] size Number of words to say are available. + * + * @return MP_OKAY on success. + * @return MP_VAL when a is NULL. + */ +int sp_init_size(sp_int* a, int size) +{ + sp_int_minimal* am = (sp_int_minimal *)a; + int err = MP_OKAY; + + if (a == NULL) { + err = MP_VAL; + } + if (err == MP_OKAY) { + #ifdef HAVE_WOLF_BIGINT + wc_bigint_init(&am->raw); + #endif + _sp_zero(a); + } + + if (err == MP_OKAY) { + am->size = size; + } + + return err; +} + /* Initialize the multi-precision number to be zero. * * @param [out] a SP integer. @@ -4368,39 +4400,7 @@ static void _sp_zero(sp_int* a) */ int sp_init(sp_int* a) { - int err = MP_OKAY; - - if (a == NULL) { - err = MP_VAL; - } - if (err == MP_OKAY) { - #ifdef HAVE_WOLF_BIGINT - wc_bigint_init(&a->raw); - #endif - _sp_zero(a); - a->size = SP_INT_DIGITS; - } - - return err; -} - -/* Initialize the multi-precision number to be zero and have a maximum size. - * - * @param [out] a SP integer. - * @param [in] size Number of words to say are available. - * - * @return MP_OKAY on success. - * @return MP_VAL when a is NULL. - */ -int sp_init_size(sp_int* a, int size) -{ - int err = sp_init(a); - - if (err == MP_OKAY) { - a->size = size; - } - - return err; + return sp_init_size(a, SP_INT_DIGITS); } #if !defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(NO_DH) || defined(HAVE_ECC) diff --git a/wolfssl/wolfcrypt/sp_int.h b/wolfssl/wolfcrypt/sp_int.h index ca91b52e1..7d5de0674 100644 --- a/wolfssl/wolfcrypt/sp_int.h +++ b/wolfssl/wolfcrypt/sp_int.h @@ -778,6 +778,19 @@ typedef struct sp_int { sp_int_digit dp[SP_INT_DIGITS]; } sp_int; +typedef struct sp_int_minimal { + int used; + int size; +#ifdef WOLFSSL_SP_INT_NEGATIVE + int sign; +#endif +#ifdef HAVE_WOLF_BIGINT + struct WC_BIGINT raw; +#endif + /** First digit of number. */ + sp_int_digit dp[1]; +} sp_int_minimal; + /* Multi-precision integer type is SP integer type. */ typedef sp_int mp_int; /* Multi-precision integer digit type is SP integer digit type.