From 64e320b697df1c781fb34c0d339b5d97f11425f5 Mon Sep 17 00:00:00 2001 From: Edayilliam Jayadev Date: Tue, 21 May 2019 16:14:08 +0530 Subject: [PATCH] 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 --- target_if/spectral/target_if_spectral.c | 10 ++++++++++ target_if/spectral/target_if_spectral.h | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index 97124d070ab4..f142c632f7ba 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/target_if/spectral/target_if_spectral.c @@ -1971,6 +1971,8 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) 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 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev) 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 @@ target_if_set_spectral_config(struct wlan_objmgr_pdev *pdev, 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 @@ target_if_set_spectral_config(struct wlan_objmgr_pdev *pdev, 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 37dd40735553..3f6b139c539c 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 @@ struct target_if_spectral { void *spectral_report_cache; uint32_t last_fft_timestamp; uint32_t timestamp_war_offset; + uint16_t fft_size_min; + uint16_t fft_size_max; }; /**