summaryrefslogtreecommitdiff
path: root/msm8998
diff options
context:
space:
mode:
authorNiranjan Pendharkar <npendhar@codeaurora.org>2017-08-08 17:02:57 -0700
committerErik Kline <ek@google.com>2017-08-08 17:14:01 -0700
commite549f669e0b541e30de78dc8b3db78b07407955e (patch)
treea11d50dc7e61b7d646712fc1166f2c91a2bee52c /msm8998
parentd772782af329301ccb551636d8ad18cd4755c09f (diff)
downloadipacfg-mgr-e549f669e0b541e30de78dc8b3db78b07407955e.tar.gz
IPA HAL: Input Checks
Check input args for v4/v6 address and ifaces. Test: as follows - built - flashed - booted - manually ran these VTS tests with setenforce 0 Bug: 38220415 Bug: 64479437 CRs-fixed: 2083182 Change-Id: Ife548b0bbfd1854dbcd2500ccb6477e85c6291b7 Signed-off-by: Tyler Wear <twear@codeaurora.org> Signed-off-by: Niranjan Pendharkar <npendhar@codeaurora.org> (cherry picked from commit dd34999536cfe0f512e0347de8f37f038bde12af)
Diffstat (limited to 'msm8998')
-rw-r--r--msm8998/hal/src/HAL.cpp56
-rw-r--r--msm8998/hal/src/PrefixParser.cpp12
2 files changed, 46 insertions, 22 deletions
diff --git a/msm8998/hal/src/HAL.cpp b/msm8998/hal/src/HAL.cpp
index 8ff0aa8..22aff0f 100644
--- a/msm8998/hal/src/HAL.cpp
+++ b/msm8998/hal/src/HAL.cpp
@@ -41,6 +41,7 @@
/* External Includes */
#include <cutils/log.h>
#include <string>
+#include <sys/socket.h>
#include <sys/types.h>
#include <vector>
@@ -399,15 +400,26 @@ Return<void> HAL::setLocalPrefixes
const hidl_vec<hidl_string>& prefixes,
setLocalPrefixes_cb hidl_cb
) {
+ BoolResult res;
+ PrefixParser parser;
+ vector<string> prefixesStr = convertHidlStrToStdStr(prefixes);
+
LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("prefixes", "unused");
- #pragma unused(prefixes)
+ fl.addArg("prefixes", prefixesStr);
- /* Fake Success */
- BoolResult res = ipaResultToBoolResult(RET::SUCCESS);
- hidl_cb(res.success, res.errMsg);
+ if (!isInitialized()) {
+ BoolResult res = makeInputCheckFailure("Not initialized");
+ } else if(prefixesStr.size() < 1) {
+ res = ipaResultToBoolResult(RET::FAIL_INPUT_CHECK);
+ } else if (!parser.add(prefixesStr)) {
+ res = makeInputCheckFailure(parser.getLastErrAsStr());
+ } else {
+ res = ipaResultToBoolResult(RET::SUCCESS);
+ }
+ hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
+ mLogs.addLog(fl);
return Void();
} /* setLocalPrefixes */
@@ -484,7 +496,12 @@ Return<void> HAL::setUpstreamParameters
* qualified here. But then, how do we allow them to be empty/null as well
* while still preserving a sane API on PrefixParser?
*/
- if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) {
+ if (!isInitialized()) {
+ BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
+ hidl_cb(res.success, res.errMsg);
+ fl.setResult(res.success, res.errMsg);
+ }
+ else if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) {
BoolResult res = makeInputCheckFailure(v4AddrParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
@@ -496,19 +513,6 @@ Return<void> HAL::setUpstreamParameters
BoolResult res = makeInputCheckFailure(v6GwParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
- } else if (v6GwParser.size() > 1) {
- RET ipaReturn = mIPA->stopAllOffload();
- if (ipaReturn != RET::SUCCESS) {
- BoolResult res =
- makeInputCheckFailure("Cannot accept more than 1 IPv6 Gateway. Offload still running and may result in data path errors");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else {
- BoolResult res =
- makeInputCheckFailure("Cannot accept more than 1 IPv6 Gateway. In an effort to avoid any data path errors, offload has been stopped");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
} else {
RET ipaReturn = mIPA->setUpstream(
iface.c_str(),
@@ -535,7 +539,12 @@ Return<void> HAL::addDownstream
PrefixParser prefixParser;
- if (!prefixParser.add(prefix)) {
+ if (!isInitialized()) {
+ BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
+ hidl_cb(res.success, res.errMsg);
+ fl.setResult(res.success, res.errMsg);
+ }
+ else if (!prefixParser.add(prefix)) {
BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
@@ -564,7 +573,12 @@ Return<void> HAL::removeDownstream
PrefixParser prefixParser;
- if (!prefixParser.add(prefix)) {
+ if (!isInitialized()) {
+ BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
+ hidl_cb(res.success, res.errMsg);
+ fl.setResult(res.success, res.errMsg);
+ }
+ else if (!prefixParser.add(prefix)) {
BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
diff --git a/msm8998/hal/src/PrefixParser.cpp b/msm8998/hal/src/PrefixParser.cpp
index 60aae08..d38bec0 100644
--- a/msm8998/hal/src/PrefixParser.cpp
+++ b/msm8998/hal/src/PrefixParser.cpp
@@ -118,6 +118,9 @@ string PrefixParser::getLastErrAsStr() {
/* ------------------------------ PRIVATE ----------------------------------- */
bool PrefixParser::add(vector<string> in, IP_FAM famHint) {
+ if (in.size() == 0)
+ return false;
+
for (size_t i = 0; i < in.size(); i++) {
if (!add(in[i], famHint))
return false;
@@ -126,6 +129,11 @@ bool PrefixParser::add(vector<string> in, IP_FAM famHint) {
} /* add */
bool PrefixParser::add(string in, IP_FAM famHint) {
+ if (in.length() == 0) {
+ mLastErr = "Failed to parse string, length = 0...";
+ return false;
+ }
+
if (famHint == IP_FAM::INVALID)
famHint = guessIPFamily(in);
@@ -138,8 +146,10 @@ bool PrefixParser::add(string in, IP_FAM famHint) {
}
int mask = parseSubnetMask(subnet, famHint);
- if (!isMaskValid(mask, famHint))
+ if (!isMaskValid(mask, famHint)) {
+ mLastErr = "Invalid mask";
return false;
+ }
Prefix pre = makeBlankPrefix(famHint);