qcacmn: Bound check while setting Spectral params

Do bounds check for some Spectral params and throw an
error in case of any out of bound inputs.

CRs-Fixed: 2449740 2449704
Change-Id: Ibc3159267076fa355ab3e50f2d8b0b1524ae444c
diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c
index 97124d0..f142c63 100644
--- a/target_if/spectral/target_if_spectral.c
+++ b/target_if/spectral/target_if_spectral.c
@@ -1971,6 +1971,8 @@
 		    TLV_TAG_SPECTRAL_SUMMARY_REPORT_GEN3;
 		spectral->tag_sscan_fft_exp = TLV_TAG_SEARCH_FFT_REPORT_GEN3;
 		spectral->tlvhdr_size = SPECTRAL_PHYERR_TLVSIZE_GEN3;
+		spectral->fft_size_min = SPECTRAL_PARAM_FFT_SIZE_MIN_GEN3;
+		spectral->fft_size_max = SPECTRAL_PARAM_FFT_SIZE_MAX_GEN3;
 	} else {
 		spectral->spectral_gen = SPECTRAL_GEN2;
 		spectral->hdr_sig_exp = SPECTRAL_PHYERR_SIGNATURE_GEN2;
@@ -1978,6 +1980,8 @@
 		    TLV_TAG_SPECTRAL_SUMMARY_REPORT_GEN2;
 		spectral->tag_sscan_fft_exp = TLV_TAG_SEARCH_FFT_REPORT_GEN2;
 		spectral->tlvhdr_size = sizeof(struct spectral_phyerr_tlv_gen2);
+		spectral->fft_size_min = SPECTRAL_PARAM_FFT_SIZE_MIN_GEN2;
+		spectral->fft_size_max = SPECTRAL_PARAM_FFT_SIZE_MAX_GEN2;
 	}
 
 	spectral->params_valid = false;
@@ -2106,6 +2110,9 @@
 		spectral->params.ss_spectral_pri = (!!value) ? true : false;
 		break;
 	case SPECTRAL_PARAM_FFT_SIZE:
+		if ((value < spectral->fft_size_min) ||
+		    (value > spectral->fft_size_max))
+			return -EINVAL;
 		spectral->params.ss_fft_size = value;
 		break;
 	case SPECTRAL_PARAM_GC_ENA:
@@ -2139,6 +2146,9 @@
 		spectral->params.ss_pwr_format = !!value;
 		break;
 	case SPECTRAL_PARAM_RPT_MODE:
+		if ((value < SPECTRAL_PARAM_RPT_MODE_MIN) ||
+		    (value > SPECTRAL_PARAM_RPT_MODE_MAX))
+			return -EINVAL;
 		spectral->params.ss_rpt_mode = value;
 		break;
 	case SPECTRAL_PARAM_BIN_SCALE:
diff --git a/target_if/spectral/target_if_spectral.h b/target_if/spectral/target_if_spectral.h
index 37dd407..3f6b139 100644
--- a/target_if/spectral/target_if_spectral.h
+++ b/target_if/spectral/target_if_spectral.h
@@ -79,6 +79,14 @@
 #define OFFSET_CH_WIDTH_80	56
 #define OFFSET_CH_WIDTH_160	50
 
+/* Min and max for relevant Spectral params */
+#define SPECTRAL_PARAM_FFT_SIZE_MIN_GEN2   (1)
+#define SPECTRAL_PARAM_FFT_SIZE_MAX_GEN2   (9)
+#define SPECTRAL_PARAM_FFT_SIZE_MIN_GEN3   (5)
+#define SPECTRAL_PARAM_FFT_SIZE_MAX_GEN3   (9)
+#define SPECTRAL_PARAM_RPT_MODE_MIN        (0)
+#define SPECTRAL_PARAM_RPT_MODE_MAX        (3)
+
 #ifdef BIG_ENDIAN_HOST
 #define SPECTRAL_MESSAGE_COPY_CHAR_ARRAY(destp, srcp, len)  do { \
 	int j; \
@@ -908,6 +916,8 @@
 	void *spectral_report_cache;
 	uint32_t last_fft_timestamp;
 	uint32_t timestamp_war_offset;
+	uint16_t fft_size_min;
+	uint16_t fft_size_max;
 };
 
 /**