wlan: Batch scan input validation

Validating batch scan user input at HDD level and using default
value if some optional arguemnt is passed wrong value

Change-Id: Ibe6b612570b5b8723f088bf78f1196af4a575882
CRs-fixed: 578330
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index dfe76ee..45c0f5a 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -804,12 +804,17 @@
     tANI_U8 *inPtr = pValue;
     tANI_U8 val = 0;
     tANI_U8 lastArg = 0;
+    tANI_U32 nScanFreq;
+    tANI_U32 nMscan;
+    tANI_U32 nBestN;
+    tANI_U8  ucRfBand;
+    tANI_U32 nRtt;
 
     /*initialize default values*/
-    pHddSetBatchScanReq->scanFrequency = HDD_SET_BATCH_SCAN_DEFAULT_FREQ;
-    pHddSetBatchScanReq->rfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND;
-    pHddSetBatchScanReq->rtt = 0;
-    pHddSetBatchScanReq->bestNetwork = HDD_SET_BATCH_SCAN_BEST_NETWORK;
+    nScanFreq = HDD_SET_BATCH_SCAN_DEFAULT_FREQ;
+    ucRfBand = HDD_SET_BATCH_SCAN_DEFAULT_BAND;
+    nRtt = 0;
+    nBestN = HDD_SET_BATCH_SCAN_BEST_NETWORK;
 
     /*go to space after WLS_BATCHING_SET command*/
     inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
@@ -838,7 +843,13 @@
     if ((strncmp(inPtr, "SCANFREQ", 8) == 0))
     {
         inPtr = hdd_extract_assigned_int_from_str(inPtr, 10,
-                    &pHddSetBatchScanReq->scanFrequency, &lastArg);
+                    &nScanFreq, &lastArg);
+
+        if (0 == nScanFreq)
+        {
+           nScanFreq = HDD_SET_BATCH_SCAN_DEFAULT_FREQ;
+        }
+
         if ( (NULL == inPtr) || (TRUE == lastArg))
         {
             return -EINVAL;
@@ -849,7 +860,15 @@
     if ((strncmp(inPtr, "MSCAN", 5) == 0))
     {
         inPtr = hdd_extract_assigned_int_from_str(inPtr, 10,
-                    &pHddSetBatchScanReq->numberOfScansToBatch, &lastArg);
+                    &nMscan, &lastArg);
+
+        if (0 == nMscan)
+        {
+            VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+                "invalid MSCAN=%d", nMscan);
+            return -EINVAL;
+        }
+
         if (TRUE == lastArg)
         {
             goto done;
@@ -868,7 +887,13 @@
     if ((strncmp(inPtr, "BESTN", 5) == 0))
     {
         inPtr = hdd_extract_assigned_int_from_str(inPtr, 10,
-                    &pHddSetBatchScanReq->bestNetwork, &lastArg);
+                    &nBestN, &lastArg);
+
+        if (0 == nBestN)
+        {
+           nBestN = HDD_SET_BATCH_SCAN_BEST_NETWORK;
+        }
+
         if (TRUE == lastArg)
         {
             goto done;
@@ -893,11 +918,11 @@
         }
         if (('A' == val) || ('a' == val))
         {
-            pHddSetBatchScanReq->rfBand = HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY;
+            ucRfBand = HDD_SET_BATCH_SCAN_24GHz_BAND_ONLY;
         }
         else if (('B' == val) || ('b' == val))
         {
-            pHddSetBatchScanReq->rfBand = HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY;
+            ucRfBand = HDD_SET_BATCH_SCAN_5GHz_BAND_ONLY;
         }
         else
         {
@@ -909,7 +934,7 @@
     if ((strncmp(inPtr, "RTT", 3) == 0))
     {
         inPtr = hdd_extract_assigned_int_from_str(inPtr, 10,
-                    &pHddSetBatchScanReq->rtt, &lastArg);
+                    &nRtt, &lastArg);
         if (TRUE == lastArg)
         {
             goto done;
@@ -923,6 +948,12 @@
 
 done:
 
+    pHddSetBatchScanReq->scanFrequency = nScanFreq;
+    pHddSetBatchScanReq->numberOfScansToBatch = nMscan;
+    pHddSetBatchScanReq->bestNetwork = nBestN;
+    pHddSetBatchScanReq->rfBand = ucRfBand;
+    pHddSetBatchScanReq->rtt = nRtt;
+
     VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
       "Received WLS_BATCHING_SET with SCANFREQ=%d "
       "MSCAN=%d BESTN=%d CHANNEL=%d RTT=%d",