diff options
author | Andreas Gampe <agampe@google.com> | 2014-08-19 22:31:31 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-08-22 01:44:06 -0700 |
commit | 049249ce7addafaa0bd09480cd8858cd2c54138f (patch) | |
tree | d97559db3a4658231163f816ebc05d9e92ad86da /libnativebridge/tests | |
parent | a59b6ac6973b3f5ce1246bf73969094779436892 (diff) | |
download | system_core-049249ce7addafaa0bd09480cd8858cd2c54138f.zip system_core-049249ce7addafaa0bd09480cd8858cd2c54138f.tar.gz system_core-049249ce7addafaa0bd09480cd8858cd2c54138f.tar.bz2 |
NativeBridge: Tighten security on libnativebridge
Do not allow arbitrary paths for the native bridge - only allow
simple names.
Do not allow re-setup of the native bridge.
Bug: 16404669
(cherry picked from commit cd2ef4c1af69727231b84ebc82864c170ff0e8ad)
Change-Id: Ie22de356d2307fe2758f9094a85d44e61a4098a1
Diffstat (limited to 'libnativebridge/tests')
-rw-r--r-- | libnativebridge/tests/Android.mk | 33 | ||||
-rw-r--r-- | libnativebridge/tests/InvalidCharsNativeBridge_test.cpp | 40 | ||||
-rw-r--r-- | libnativebridge/tests/NativeBridgeTest.h | 33 | ||||
-rw-r--r-- | libnativebridge/tests/ReSetupNativeBridge_test.cpp | 32 | ||||
-rw-r--r-- | libnativebridge/tests/UnavailableNativeBridge_test.cpp | 28 | ||||
-rw-r--r-- | libnativebridge/tests/ValidNameNativeBridge_test.cpp | 33 |
6 files changed, 199 insertions, 0 deletions
diff --git a/libnativebridge/tests/Android.mk b/libnativebridge/tests/Android.mk new file mode 100644 index 0000000..f58b8f7 --- /dev/null +++ b/libnativebridge/tests/Android.mk @@ -0,0 +1,33 @@ +# Build the unit tests. +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +# Build the unit tests. +test_src_files := \ + InvalidCharsNativeBridge_test.cpp \ + ReSetupNativeBridge_test.cpp \ + UnavailableNativeBridge_test.cpp \ + ValidNameNativeBridge_test.cpp + +shared_libraries := \ + libnativebridge + +$(foreach file,$(test_src_files), \ + $(eval include $(CLEAR_VARS)) \ + $(eval LOCAL_CLANG := true) \ + $(eval LOCAL_CPPFLAGS := -std=gnu++11) \ + $(eval LOCAL_SHARED_LIBRARIES := $(shared_libraries)) \ + $(eval LOCAL_SRC_FILES := $(file)) \ + $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \ + $(eval include $(BUILD_NATIVE_TEST)) \ +) + +$(foreach file,$(test_src_files), \ + $(eval include $(CLEAR_VARS)) \ + $(eval LOCAL_CLANG := true) \ + $(eval LOCAL_CPPFLAGS := -std=gnu++11) \ + $(eval LOCAL_SHARED_LIBRARIES := $(shared_libraries)) \ + $(eval LOCAL_SRC_FILES := $(file)) \ + $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \ + $(eval include $(BUILD_HOST_NATIVE_TEST)) \ +) diff --git a/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp b/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp new file mode 100644 index 0000000..f37e9c1 --- /dev/null +++ b/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "NativeBridgeTest.h" + +namespace android { + +static const char* kTestName = "../librandom$@-bridge_not.existing.so"; + +TEST_F(NativeBridgeTest, InvalidChars) { + // Do one test actually calling setup. + EXPECT_EQ(false, NativeBridgeError()); + SetupNativeBridge(kTestName, nullptr); + // This should lead to an error for invalid characters. + EXPECT_EQ(true, NativeBridgeError()); + + // Further tests need to use NativeBridgeNameAcceptable, as the error + // state can't be changed back. + EXPECT_EQ(false, NativeBridgeNameAcceptable(".")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("..")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("_")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("-")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("lib@.so")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("lib$.so")); +} + +} // namespace android diff --git a/libnativebridge/tests/NativeBridgeTest.h b/libnativebridge/tests/NativeBridgeTest.h new file mode 100644 index 0000000..0d731cb --- /dev/null +++ b/libnativebridge/tests/NativeBridgeTest.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_BRIDGE_TEST_H_ +#define NATIVE_BRIDGE_TEST_H_ + +#define LOG_TAG "NativeBridge_test" + +#include <nativebridge/native_bridge.h> +#include <gtest/gtest.h> + +namespace android { + +class NativeBridgeTest : public testing::Test { +}; + +}; // namespace android + +#endif // NATIVE_BRIDGE_H_ + diff --git a/libnativebridge/tests/ReSetupNativeBridge_test.cpp b/libnativebridge/tests/ReSetupNativeBridge_test.cpp new file mode 100644 index 0000000..ef5bfce --- /dev/null +++ b/libnativebridge/tests/ReSetupNativeBridge_test.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "NativeBridgeTest.h" + +namespace android { + +static const char* kTestName = "librandom-bridge_not.existing.so"; + +TEST_F(NativeBridgeTest, ReSetup) { + EXPECT_EQ(false, NativeBridgeError()); + SetupNativeBridge(kTestName, nullptr); + EXPECT_EQ(false, NativeBridgeError()); + SetupNativeBridge(kTestName, nullptr); + // This should lead to an error for trying to re-setup a native bridge. + EXPECT_EQ(true, NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/UnavailableNativeBridge_test.cpp b/libnativebridge/tests/UnavailableNativeBridge_test.cpp new file mode 100644 index 0000000..27d1233 --- /dev/null +++ b/libnativebridge/tests/UnavailableNativeBridge_test.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "NativeBridgeTest.h" + +namespace android { + +TEST_F(NativeBridgeTest, NoNativeBridge) { + EXPECT_EQ(false, NativeBridgeAvailable()); + // This should lead to an error for trying to initialize a not-setup + // native bridge. + EXPECT_EQ(true, NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/ValidNameNativeBridge_test.cpp b/libnativebridge/tests/ValidNameNativeBridge_test.cpp new file mode 100644 index 0000000..3e01923 --- /dev/null +++ b/libnativebridge/tests/ValidNameNativeBridge_test.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <NativeBridgeTest.h> + +namespace android { + +static const char* kTestName = "librandom-bridge_not.existing.so"; + +TEST_F(NativeBridgeTest, ValidName) { + EXPECT_EQ(false, NativeBridgeError()); + SetupNativeBridge(kTestName, nullptr); + EXPECT_EQ(false, NativeBridgeError()); + EXPECT_EQ(false, NativeBridgeAvailable()); + // This should lead to an error for trying to initialize a not-existing + // native bridge. + EXPECT_EQ(true, NativeBridgeError()); +} + +} // namespace android |