Module: wine Branch: master Commit: 7231d4586d3ceccdf46f13bdd696d2b3ce0dc675 URL: https://gitlab.winehq.org/wine/wine/-/commit/7231d4586d3ceccdf46f13bdd696d2b...
Author: Hans Leidekker hans@codeweavers.com Date: Mon Jan 22 13:49:37 2024 +0100
bcrypt: Fix private data size in wow64 thunks.
---
dlls/bcrypt/bcrypt_internal.h | 3 ++- dlls/bcrypt/gnutls.c | 14 +++++--------- 2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h index f6556eb2aaa..f0157e86a73 100644 --- a/dlls/bcrypt/bcrypt_internal.h +++ b/dlls/bcrypt/bcrypt_internal.h @@ -184,11 +184,12 @@ struct key_asymmetric DSSSEED dss_seed; };
+#define PRIVATE_DATA_SIZE 3 struct key { struct object hdr; enum alg_id alg_id; - UINT64 private[3]; /* private data for backend */ + UINT64 private[PRIVATE_DATA_SIZE]; /* private data for backend */ union { struct key_symmetric s; diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c index 512731dfcd3..ec1f0fb09ce 100644 --- a/dlls/bcrypt/gnutls.c +++ b/dlls/bcrypt/gnutls.c @@ -2741,7 +2741,7 @@ struct key32 { struct object hdr; enum alg_id alg_id; - UINT64 private[2]; /* private data for backend */ + UINT64 private[PRIVATE_DATA_SIZE]; /* private data for backend */ union { struct key_symmetric32 s; @@ -2791,8 +2791,7 @@ static struct key *get_symmetric_key( struct key32 *key32, struct key *key ) { key->hdr = key32->hdr; key->alg_id = key32->alg_id; - key->private[0] = key32->private[0]; - key->private[1] = key32->private[1]; + memcpy( key->private, key32->private, sizeof(key->private) ); key->u.s.mode = key32->u.s.mode; key->u.s.block_size = key32->u.s.block_size; key->u.s.vector = ULongToPtr(key32->u.s.vector); @@ -2806,8 +2805,7 @@ static struct key *get_asymmetric_key( struct key32 *key32, struct key *key ) { key->hdr = key32->hdr; key->alg_id = key32->alg_id; - key->private[0] = key32->private[0]; - key->private[1] = key32->private[1]; + memcpy( key->private, key32->private, sizeof(key->private) ); key->u.a.bitlen = key32->u.a.bitlen; key->u.a.flags = key32->u.a.flags; key->u.a.dss_seed = key32->u.a.dss_seed; @@ -2816,14 +2814,12 @@ static struct key *get_asymmetric_key( struct key32 *key32, struct key *key )
static void put_symmetric_key32( struct key *key, struct key32 *key32 ) { - key32->private[0] = key->private[0]; - key32->private[1] = key->private[1]; + memcpy( key32->private, key->private, sizeof(key32->private) ); }
static void put_asymmetric_key32( struct key *key, struct key32 *key32 ) { - key32->private[0] = key->private[0]; - key32->private[1] = key->private[1]; + memcpy( key32->private, key->private, sizeof(key32->private) ); key32->u.a.flags = key->u.a.flags; key32->u.a.dss_seed = key->u.a.dss_seed; }