Browse Source

qcacmn: Modify wlan_crypto_setkey return values

Modify return values in wlan_crypto_setkey to
reflect the exact error condition.

Change-Id: I21729bf999a6561d6282bb456451e1e1a0748609
CRs-Fixed: 3629285
Sai Pratyusha Magam 1 year ago
parent
commit
0aeb537f6a

+ 12 - 0
qdf/inc/qdf_status.h

@@ -78,6 +78,12 @@
  * @QDF_STATUS_E_RESTART: return error code for wait_event_interruptible
  * @QDF_STATUS_FILT_REQ_ERROR: return error code cee filter rule request
  * @QDF_STATUS_TDLS_MLO_SYNC: tdls mlo sync
+ * @QDF_STATUS_CRYPTO_INVALID_KEYLEN: return code for invalid key length
+ * @QDF_STATUS_CRYPTO_INVALID_KEYID: return code for invalid key index
+ * @QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE: return code for invalid cipher type
+ * @QDF_STATUS_INVALID_ASSOCID: return code for invalid assoc id
+ * @QDF_STATUS_MAX_VHT_STREAMS: Max VHT streams
+ * @QDF_STATUS_NO_OVERLAP_LEGACY_RATES: no overlap legacy rate with assoc-req
  * @QDF_STATUS_MAX: not a real value just a place holder for max
  */
 typedef enum {
@@ -132,6 +138,12 @@ typedef enum {
 	QDF_STATUS_E_RESTART,
 	QDF_STATUS_FILT_REQ_ERROR,
 	QDF_STATUS_TDLS_MLO_SYNC,
+	QDF_STATUS_CRYPTO_INVALID_KEYLEN,
+	QDF_STATUS_CRYPTO_INVALID_KEYID,
+	QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE,
+	QDF_STATUS_INVALID_ASSOCID,
+	QDF_STATUS_MAX_VHT_STREAMS,
+	QDF_STATUS_NO_OVERLAP_LEGACY_RATES,
 	QDF_STATUS_MAX
 } QDF_STATUS;
 

+ 20 - 1
qdf/linux/src/qdf_status.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -21,6 +21,24 @@
 #include "qdf_module.h"
 #include "qdf_status.h"
 
+/*
+ * Customer to make use of this API to map
+ * QDF errors to customer specific error codes
+ * or standard errors as need be.
+ */
+#ifdef WLAN_CUSTOMIZE_ERROR_CODES
+int qdf_status_to_os_return(QDF_STATUS status)
+{
+	switch (status) {
+	case QDF_STATUS_SUCCESS:
+		return 0;
+	default:
+		return -EPERM;
+	}
+}
+
+qdf_export_symbol(qdf_status_to_os_return);
+#else
 int qdf_status_to_os_return(QDF_STATUS status)
 {
 	switch (status) {
@@ -75,6 +93,7 @@ int qdf_status_to_os_return(QDF_STATUS status)
 	}
 }
 qdf_export_symbol(qdf_status_to_os_return);
+#endif
 
 QDF_STATUS qdf_status_from_os_return(int rc)
 {

+ 10 - 10
umac/cmn_services/crypto/src/wlan_crypto_global_api.c

@@ -793,14 +793,14 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 			return QDF_STATUS_SUCCESS;
 		}
 		crypto_err("req_key len zero");
-		return QDF_STATUS_E_INVAL;
+		return QDF_STATUS_CRYPTO_INVALID_KEYLEN;
 	}
 
 	cipher = wlan_crypto_cipher_ops[req_key->type];
 
 	if (!cipher && !IS_MGMT_CIPHER(req_key->type)) {
 		crypto_err("cipher invalid");
-		return QDF_STATUS_E_INVAL;
+		return QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE;
 	}
 
 	if (cipher && (!IS_FILS_CIPHER(req_key->type)) &&
@@ -808,13 +808,13 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 	    ((req_key->keylen != (cipher->keylen / CRYPTO_NBBY)) &&
 	    (req_key->type != WLAN_CRYPTO_CIPHER_WEP))) {
 		crypto_err("cipher invalid");
-		return QDF_STATUS_E_INVAL;
+		return QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE;
 	} else if ((req_key->type == WLAN_CRYPTO_CIPHER_WEP) &&
 		!((req_key->keylen == WLAN_CRYPTO_KEY_WEP40_LEN)
 		|| (req_key->keylen == WLAN_CRYPTO_KEY_WEP104_LEN)
 		|| (req_key->keylen == WLAN_CRYPTO_KEY_WEP128_LEN))) {
 		crypto_err("wep key len invalid. keylen: %d", req_key->keylen);
-		return QDF_STATUS_E_INVAL;
+		return QDF_STATUS_CRYPTO_INVALID_KEYLEN;
 	}
 
 	if (req_key->keyix == WLAN_CRYPTO_KEYIX_NONE) {
@@ -826,7 +826,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 	} else {
 		if ((req_key->keyix >= WLAN_CRYPTO_MAX_VLANKEYIX)
 			&& (!IS_MGMT_CIPHER(req_key->type))) {
-			return QDF_STATUS_E_INVAL;
+			return QDF_STATUS_CRYPTO_INVALID_KEYID;
 		}
 
 		req_key->flags |= (WLAN_CRYPTO_KEY_XMIT
@@ -874,7 +874,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 			    !(is_bigtk(req_key->keyix))) {
 				crypto_err("igtk/bigtk key invalid keyid %d",
 					   req_key->keyix);
-				return QDF_STATUS_E_INVAL;
+				return QDF_STATUS_CRYPTO_INVALID_KEYID;
 			}
 			key = qdf_mem_malloc(sizeof(struct wlan_crypto_key));
 			if (!key)
@@ -902,11 +902,11 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 		} else {
 			if (IS_FILS_CIPHER(req_key->type)) {
 				crypto_err("FILS key is not for BroadCast pkt");
-				return QDF_STATUS_E_INVAL;
+				return QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE;
 			}
 			if (!HAS_MCAST_CIPHER(crypto_params, req_key->type)
 				&& (req_key->type != WLAN_CRYPTO_CIPHER_WEP)) {
-				return QDF_STATUS_E_INVAL;
+				return QDF_STATUS_CRYPTO_INVALID_CIPHERTYPE;
 			}
 			if (!priv_key->key[req_key->keyix]) {
 				priv_key->key[req_key->keyix]
@@ -979,7 +979,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 			    !(is_bigtk(req_key->keyix))) {
 				crypto_err("igtk/bigtk key invalid keyid %d",
 					   req_key->keyix);
-				status = QDF_STATUS_E_INVAL;
+				status = QDF_STATUS_CRYPTO_INVALID_KEYID;
 				goto err;
 			}
 			key = qdf_mem_malloc(sizeof(struct wlan_crypto_key));
@@ -1010,7 +1010,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 				kid = 0;
 			if (kid >= WLAN_CRYPTO_MAX_VLANKEYIX) {
 				crypto_err("invalid keyid %d", kid);
-				status = QDF_STATUS_E_INVAL;
+				status = QDF_STATUS_CRYPTO_INVALID_KEYID;
 				goto err;
 			}
 			if (!priv_key->key[kid]) {