diff --git a/services/cameraservice/sinkservice/include/distributedcamera/distributed_camera_sink_stub.h b/services/cameraservice/sinkservice/include/distributedcamera/distributed_camera_sink_stub.h index 3ec0f8208973496206177421ef4aad8f1e85a4cb..b045da962d09c019737f1c1dc111938e2938723a 100644 --- a/services/cameraservice/sinkservice/include/distributedcamera/distributed_camera_sink_stub.h +++ b/services/cameraservice/sinkservice/include/distributedcamera/distributed_camera_sink_stub.h @@ -44,6 +44,7 @@ private: int32_t ResumeDistributedHardwareInner(MessageParcel &data, MessageParcel &reply); int32_t StopDistributedHardwareInner(MessageParcel &data, MessageParcel &reply); bool HasAccessDHPermission(); + bool CheckUid(); using DCameraFunc = int32_t (DistributedCameraSinkStub::*)(MessageParcel &data, MessageParcel &reply); std::map memberFuncMap_; diff --git a/services/cameraservice/sinkservice/src/distributedcamera/distributed_camera_sink_stub.cpp b/services/cameraservice/sinkservice/src/distributedcamera/distributed_camera_sink_stub.cpp index be87cebdfc9482517e8027b525e8073eacfcb88b..bbf7dcdef0dbbc04820293d88b5594a597d1a991 100644 --- a/services/cameraservice/sinkservice/src/distributedcamera/distributed_camera_sink_stub.cpp +++ b/services/cameraservice/sinkservice/src/distributedcamera/distributed_camera_sink_stub.cpp @@ -15,6 +15,7 @@ #include "accesstoken_kit.h" #include "dcamera_ipc_interface_code.h" +#include "distributed_camera_constants.h" #include "distributed_camera_sink_stub.h" #include "distributed_camera_errno.h" #include "distributed_hardware_log.h" @@ -63,6 +64,13 @@ bool DistributedCameraSinkStub::HasEnableDHPermission() return (result == Security::AccessToken::PERMISSION_GRANTED); } +bool DistributedCameraSinkStub::CheckUid() +{ + DHLOGI("DCameraSinkController CheckPermission Start"); + auto uid = IPCSkeleton::GetCallingUid(); + return uid == DCAMERA_UID; +} + int32_t DistributedCameraSinkStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { @@ -157,6 +165,11 @@ int32_t DistributedCameraSinkStub::SubscribeLocalHardwareInner(MessageParcel &da DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!HasEnableDHPermission()) { + DHLOGE("The caller has no ENABLE_DISTRIBUTED_HARDWARE permission."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); std::string parameters = data.ReadString(); if (parameters.empty() || parameters.size() > PARAM_MAX_SIZE || dhId.empty() || @@ -176,6 +189,11 @@ int32_t DistributedCameraSinkStub::UnsubscribeLocalHardwareInner(MessageParcel & DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!HasEnableDHPermission()) { + DHLOGE("The caller has no ENABLE_DISTRIBUTED_HARDWARE permission."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE) { DHLOGE("params is invalid"); @@ -193,6 +211,11 @@ int32_t DistributedCameraSinkStub::StopCaptureInner(MessageParcel &data, Message DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE) { DHLOGE("params is invalid"); @@ -210,6 +233,11 @@ int32_t DistributedCameraSinkStub::ChannelNegInner(MessageParcel &data, MessageP DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); std::string channelInfo = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE || channelInfo.empty() || @@ -229,6 +257,11 @@ int32_t DistributedCameraSinkStub::GetCameraInfoInner(MessageParcel &data, Messa DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); std::string cameraInfo = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE) { @@ -247,6 +280,11 @@ int32_t DistributedCameraSinkStub::OpenChannelInner(MessageParcel &data, Message DHLOGD("DistributedCameraSinkStub OpenChannelInner Begin"); int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); std::string openInfo = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE || openInfo.empty()|| @@ -267,6 +305,11 @@ int32_t DistributedCameraSinkStub::CloseChannelInner(MessageParcel &data, Messag DHLOGD("enter"); int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string dhId = data.ReadString(); if (dhId.empty() || dhId.size() > DID_MAX_SIZE) { DHLOGE("params is invalid"); diff --git a/services/cameraservice/sinkservice/test/unittest/common/distributedcamera/distributed_camera_sink_stub_test.cpp b/services/cameraservice/sinkservice/test/unittest/common/distributedcamera/distributed_camera_sink_stub_test.cpp index 6f935d22bf1a882213234eef5e439e8e9e50441c..9113a891ff48d46db34cbaed77aeb397d07f5ae4 100644 --- a/services/cameraservice/sinkservice/test/unittest/common/distributedcamera/distributed_camera_sink_stub_test.cpp +++ b/services/cameraservice/sinkservice/test/unittest/common/distributedcamera/distributed_camera_sink_stub_test.cpp @@ -95,7 +95,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_001, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string params = "params000"; int32_t ret = sinkProxy.InitSink(params, sinkCallback); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -110,7 +110,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_002, TestSize.Level1) sptr sinkStubPtr(new MockDistributedCameraSinkStub()); DistributedCameraSinkProxy sinkProxy(sinkStubPtr); int32_t ret = sinkProxy.ReleaseSink(); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -127,7 +127,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_003, TestSize.Level1) std::string dhId = "dhId000"; std::string params = "params000"; int32_t ret = sinkProxy.SubscribeLocalHardware(dhId, params); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -143,7 +143,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_004, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string dhId = "dhId000"; int32_t ret = sinkProxy.UnsubscribeLocalHardware(dhId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -159,7 +159,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_005, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string dhId = "dhId000"; int32_t ret = sinkProxy.StopCapture(dhId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -176,7 +176,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_006, TestSize.Level1) std::string dhId = "dhId000"; std::string channelInfo = "channelInfo000"; int32_t ret = sinkProxy.ChannelNeg(dhId, channelInfo); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -193,7 +193,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_007, TestSize.Level1) std::string dhId = "dhId000"; std::string cameraInfo = "cameraInfo000"; int32_t ret = sinkProxy.GetCameraInfo(dhId, cameraInfo); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -210,7 +210,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_008, TestSize.Level1) std::string dhId = "dhId000"; std::string openInfo = "openInfo000"; int32_t ret = sinkProxy.OpenChannel(dhId, openInfo); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -226,7 +226,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_009, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string dhId = "dhId000"; int32_t ret = sinkProxy.CloseChannel(dhId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -242,7 +242,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_010, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string networkId = "test10"; int32_t ret = sinkProxy.PauseDistributedHardware(networkId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -258,7 +258,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_011, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string networkId = "test11"; int32_t ret = sinkProxy.ResumeDistributedHardware(networkId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -274,7 +274,7 @@ HWTEST_F(DcameraSinkStubTest, dcamera_sink_stub_test_012, TestSize.Level1) DistributedCameraSinkProxy sinkProxy(sinkStubPtr); std::string networkId = "test12"; int32_t ret = sinkProxy.StopDistributedHardware(networkId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h index 99df7ea9bed8f300c7b1a78ba9127c0bf9374caa..335dae95f0f9c8c1ad362d59e34c8f4806874406 100644 --- a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h +++ b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h @@ -40,6 +40,7 @@ private: bool CheckUnregParams(const std::string& devId, const std::string& dhId, const std::string& reqId); bool CheckNotifyParams(const std::string& devId, const std::string& dhId, std::string& events); bool HasEnableDHPermission(); + bool CheckUid(); using DCameraFunc = int32_t (DistributedCameraSourceStub::*)(MessageParcel &data, MessageParcel &reply); std::map memberFuncMap_; diff --git a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp index 41b41e7a08718e1f02200baf5c3269e2034d75be..dff98fb321fcebec1f47df81c9a37dbf4654449a 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp @@ -18,6 +18,7 @@ #include "dcamera_ipc_interface_code.h" #include "dcamera_source_callback_proxy.h" +#include "distributed_camera_constants.h" #include "distributed_camera_errno.h" #include "distributed_hardware_log.h" #include "ipc_skeleton.h" @@ -50,6 +51,13 @@ bool DistributedCameraSourceStub::HasEnableDHPermission() return (result == Security::AccessToken::PERMISSION_GRANTED); } +bool DistributedCameraSourceStub::CheckUid() +{ + DHLOGI("DCameraSinkController CheckPermission Start"); + auto uid = IPCSkeleton::GetCallingUid(); + return uid == DCAMERA_UID; +} + int32_t DistributedCameraSourceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { @@ -224,6 +232,11 @@ int32_t DistributedCameraSourceStub::DCameraNotifyInner(MessageParcel &data, Mes { int32_t ret = DCAMERA_OK; do { + if (!CheckUid()) { + DHLOGE("The caller uid is not dcamera_uid."); + ret = DCAMERA_BAD_VALUE; + break; + } std::string devId = data.ReadString(); std::string dhId = data.ReadString(); std::string events = data.ReadString(); diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp index a6cbf45191bcf21e0edccb2d70131c0b50711bee..2bf296b682a1aef94de1fa0fe76e1211dc98fc78 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp @@ -97,7 +97,7 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_001, TestSize.Level1) std::string params = "params000"; sptr callback(new DCameraSourceCallback()); int32_t ret = sourceProxy.InitSource(params, callback); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -112,7 +112,7 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_002, TestSize.Level1) sptr sourceStubPtr(new MockDistributedCameraSourceStub()); DistributedCameraSourceProxy sourceProxy(sourceStubPtr); int32_t ret = sourceProxy.ReleaseSource(); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -135,7 +135,7 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_003, TestSize.Level1) param.sinkVersion = "1"; param.sinkAttrs = "sinkattrs"; int32_t ret = sourceProxy.RegisterDistributedHardware(devId, dhId, reqId, param); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -153,7 +153,7 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_004, TestSize.Level1) std::string dhId = "dhId000"; std::string reqId = "reqId000"; int32_t ret = sourceProxy.UnregisterDistributedHardware(devId, dhId, reqId); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /** @@ -171,7 +171,7 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_005, TestSize.Level1) std::string dhId = "dhId000"; std::string events = "events000"; int32_t ret = sourceProxy.DCameraNotify(devId, dhId, events); - EXPECT_EQ(DCAMERA_OK, ret); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } /**