summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiranjan Pendharkar <npendhar@codeaurora.org>2017-09-25 09:10:27 -0700
committerpkanwar <pkanwar@google.com>2017-09-25 13:14:44 -0700
commit54c7bcf052d7a0cec20a2ecdaa64258ce1ffccbf (patch)
tree1209b4b7f259d495bd7bfdc5e3d50943c22fd538
parentf7f77065b32563a6ed376a337638a7375d332fc4 (diff)
downloadipacfg-mgr-54c7bcf052d7a0cec20a2ecdaa64258ce1ffccbf.tar.gz
IPA HAL: Remove Downstream Iface
Empty iface and garbage iface names should return an error when passed to removeDownstream. Bug: 65612332 Test: compile Crs-fixed: 2105305 Change-Id: Ib4a99bd6cefe372ac4292b53842bd76e767449a1 Signed-off-by: Tyler Wear <twear@codeaurora.org> Signed-off-by: Niranjan Pendharkar <npendhar@codeaurora.org> (cherry picked from commit f4102a5c59f994d40d22bdb9f1806d6bcc120a79)
-rw-r--r--msm8998/ipacm/inc/IPACM_OffloadManager.h4
-rw-r--r--msm8998/ipacm/src/IPACM_OffloadManager.cpp18
2 files changed, 21 insertions, 1 deletions
diff --git a/msm8998/ipacm/inc/IPACM_OffloadManager.h b/msm8998/ipacm/inc/IPACM_OffloadManager.h
index 9d94253..72070dd 100644
--- a/msm8998/ipacm/inc/IPACM_OffloadManager.h
+++ b/msm8998/ipacm/inc/IPACM_OffloadManager.h
@@ -29,7 +29,7 @@
#ifndef _IPACM_OFFLOAD_MANAGER_H_
#define _IPACM_OFFLOAD_MANAGER_H_
-
+#include <list>
#include <stdint.h>
#include <IOffloadManager.h>
#include "IPACM_Defs.h"
@@ -96,6 +96,8 @@ public:
private:
+ std::list<const char *> valid_ifaces;
+
bool upstream_v4_up;
bool upstream_v6_up;
diff --git a/msm8998/ipacm/src/IPACM_OffloadManager.cpp b/msm8998/ipacm/src/IPACM_OffloadManager.cpp
index f2cc16c..bc88024 100644
--- a/msm8998/ipacm/src/IPACM_OffloadManager.cpp
+++ b/msm8998/ipacm/src/IPACM_OffloadManager.cpp
@@ -263,6 +263,13 @@ RET IPACM_OffloadManager::addDownstream(const char * downstream_name, const Pref
return SUCCESS;
}
+ /* Iface is valid, add to list if not present */
+ if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end())
+ {
+ /* Iface is new, add it to the list */
+ valid_ifaces.push_back(downstream_name);
+ }
+
evt_data = (ipacm_event_ipahal_stream*)malloc(sizeof(ipacm_event_ipahal_stream));
if(evt_data == NULL)
{
@@ -291,6 +298,17 @@ RET IPACM_OffloadManager::removeDownstream(const char * downstream_name, const P
ipacm_event_ipahal_stream *evt_data;
IPACMDBG_H("removeDownstream name(%s), ip-family(%d) \n", downstream_name, prefix.fam);
+ if(strnlen(downstream_name, sizeof(downstream_name)) == 0)
+ {
+ IPACMERR("iface length is 0.\n");
+ return FAIL_HARDWARE;
+ }
+ if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end())
+ {
+ IPACMERR("iface is not present in list.\n");
+ return FAIL_HARDWARE;
+ }
+
if(ipa_get_if_index(downstream_name, &index))
{
IPACMERR("netdev(%s) already removed, ignored\n", downstream_name);