Browse Source

src/Mayaqua/Secure.c: fix potential null pointer dereference

found by coverity

   CID 343528 (#1 of 1): Dereference before null check (REVERSE_INULL)
   check_after_deref: Null-checking name suggests that it may be null,
   but it has already been dereferenced on all paths leading to the
   check.
   438        if (name == NULL || k == NULL || k->private_key == false)
   439        {
   440                sec->Error = SEC_ERROR_BAD_PARAMETER;
   441                return false;
   442        }
Ilya Shipitsin 2 years ago
parent
commit
c59df82666
1 changed files with 22 additions and 21 deletions
  1. 22 21
      src/Mayaqua/Secure.c

+ 22 - 21
src/Mayaqua/Secure.c

@@ -404,6 +404,28 @@ bool WriteSecKey(SECURE *sec, bool private_obj, char *name, K *k)
 	UCHAR modules[MAX_SIZE], pub[MAX_SIZE], pri[MAX_SIZE], prime1[MAX_SIZE], prime2[MAX_SIZE];
 	UCHAR modules[MAX_SIZE], pub[MAX_SIZE], pri[MAX_SIZE], prime1[MAX_SIZE], prime2[MAX_SIZE];
 	UCHAR exp1[MAX_SIZE], exp2[MAX_SIZE], coeff[MAX_SIZE];
 	UCHAR exp1[MAX_SIZE], exp2[MAX_SIZE], coeff[MAX_SIZE];
 	const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp;
 	const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp;
+
+	// Validate arguments
+	if (sec == NULL)
+	{
+		return false;
+	}
+	if (name == NULL || k == NULL || k->private_key == false)
+	{
+		sec->Error = SEC_ERROR_BAD_PARAMETER;
+		return false;
+	}
+	if (sec->SessionCreated == false)
+	{
+		sec->Error = SEC_ERROR_NO_SESSION;
+		return false;
+	}
+	if (sec->LoginFlag == false && private_obj)
+	{
+		sec->Error = SEC_ERROR_NOT_LOGIN;
+		return false;
+	}
+
 	CK_ATTRIBUTE a[] =
 	CK_ATTRIBUTE a[] =
 	{
 	{
 		{CKA_MODULUS,			modules,		0},		// 0
 		{CKA_MODULUS,			modules,		0},		// 0
@@ -430,27 +452,6 @@ bool WriteSecKey(SECURE *sec, bool private_obj, char *name, K *k)
 		{CKA_MODIFIABLE,		&b_false,		sizeof(b_false)},
 		{CKA_MODIFIABLE,		&b_false,		sizeof(b_false)},
 	};
 	};
 
 
-	// Validate arguments
-	if (sec == NULL)
-	{
-		return false;
-	}
-	if (name == NULL || k == NULL || k->private_key == false)
-	{
-		sec->Error = SEC_ERROR_BAD_PARAMETER;
-		return false;
-	}
-	if (sec->SessionCreated == false)
-	{
-		sec->Error = SEC_ERROR_NO_SESSION;
-		return false;
-	}
-	if (sec->LoginFlag == false && private_obj)
-	{
-		sec->Error = SEC_ERROR_NOT_LOGIN;
-		return false;
-	}
-
 	// Numeric data generation
 	// Numeric data generation
 	rsa = EVP_PKEY_get0_RSA(k->pkey);
 	rsa = EVP_PKEY_get0_RSA(k->pkey);
 	if (rsa == NULL)
 	if (rsa == NULL)