已开启
fd_test_1 #20358
已开启
xhz-sz创建于 8 天前
3 个文件变更+82-16
@@ -14,6 +14,7 @@
14 */14 */
15 15 
16#include "ability_manager_stub.h"16#include "ability_manager_stub.h"
17+#include "want_fd_scope.h"
17#include "insight_intent_query_param.h"18#include "insight_intent_query_param.h"
18 19 
19#include "ability_manager_errors.h"20#include "ability_manager_errors.h"
@@ -1287,6 +1288,7 @@ int AbilityManagerStub::TerminateAbilityInner(MessageParcel &data, MessageParcel
1287 }1288 }
1288 reply.WriteInt32(result);1289 reply.WriteInt32(result);
1289 if (resultWant != nullptr) {1290 if (resultWant != nullptr) {
1291+ resultWant->CloseAllFd();
1290 delete resultWant;1292 delete resultWant;
1291 }1293 }
1292 return NO_ERROR;1294 return NO_ERROR;
@@ -1307,6 +1309,7 @@ int AbilityManagerStub::BackToCallerInner(MessageParcel &data, MessageParcel &re
1307 int32_t result = BackToCallerAbilityWithResult(token, resultCode, resultWant, callerRequestCode);1309 int32_t result = BackToCallerAbilityWithResult(token, resultCode, resultWant, callerRequestCode);
1308 reply.WriteInt32(result);1310 reply.WriteInt32(result);
1309 if (resultWant != nullptr) {1311 if (resultWant != nullptr) {
1312+ resultWant->CloseAllFd();
1310 delete resultWant;1313 delete resultWant;
1311 }1314 }
1312 return NO_ERROR;1315 return NO_ERROR;
@@ -1341,6 +1344,7 @@ int AbilityManagerStub::TerminateUIExtensionAbilityInner(MessageParcel &data, Me
1341 }1344 }
1342 reply.WriteInt32(result);1345 reply.WriteInt32(result);
1343 if (resultWant != nullptr) {1346 if (resultWant != nullptr) {
1347+ resultWant->CloseAllFd();
1344 delete resultWant;1348 delete resultWant;
1345 }1349 }
1346 return NO_ERROR;1350 return NO_ERROR;
@@ -1371,6 +1375,7 @@ int AbilityManagerStub::SendResultToAbilityInner(MessageParcel &data, MessagePar
1371 int32_t result = SendResultToAbility(requestCode, resultCode, *resultWant);1375 int32_t result = SendResultToAbility(requestCode, resultCode, *resultWant);
1372 reply.WriteInt32(result);1376 reply.WriteInt32(result);
1373 if (resultWant != nullptr) {1377 if (resultWant != nullptr) {
1378+ resultWant->CloseAllFd();
1374 delete resultWant;1379 delete resultWant;
1375 }1380 }
1376 return NO_ERROR;1381 return NO_ERROR;
@@ -1574,6 +1579,7 @@ int AbilityManagerStub::StartAbilityInner(MessageParcel &data, MessageParcel &re
1574 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1579 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1575 return ERR_INVALID_VALUE;1580 return ERR_INVALID_VALUE;
1576 }1581 }
1582+ WantFdScope fdScope(*want);
1577 SanitizeWantParams(*want);1583 SanitizeWantParams(*want);
1578 int32_t userId = data.ReadInt32();1584 int32_t userId = data.ReadInt32();
1579 int requestCode = data.ReadInt32();1585 int requestCode = data.ReadInt32();
@@ -1590,6 +1596,7 @@ int AbilityManagerStub::StartAbilityInnerSpecifyTokenId(MessageParcel &data, Mes
1590 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1596 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1591 return ERR_INVALID_VALUE;1597 return ERR_INVALID_VALUE;
1592 }1598 }
1599+ WantFdScope fdScope(*want);
1593 SanitizeWantParams(*want);1600 SanitizeWantParams(*want);
1594 1601 
1595 sptr<IRemoteObject> callerToken = nullptr;1602 sptr<IRemoteObject> callerToken = nullptr;
@@ -1611,6 +1618,7 @@ int AbilityManagerStub::StartAbilityByUIContentSessionAddCallerInner(MessageParc
1611 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1618 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1612 return ERR_INVALID_VALUE;1619 return ERR_INVALID_VALUE;
1613 }1620 }
1621+ WantFdScope fdScope(*want);
1614 SanitizeWantParams(*want);1622 SanitizeWantParams(*want);
1615 1623 
1616 sptr<IRemoteObject> callerToken = nullptr;1624 sptr<IRemoteObject> callerToken = nullptr;
@@ -1645,6 +1653,7 @@ int AbilityManagerStub::StartAbilityByUIContentSessionForOptionsInner(MessagePar
1645 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1653 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1646 return ERR_INVALID_VALUE;1654 return ERR_INVALID_VALUE;
1647 }1655 }
1656+ WantFdScope fdScope(*want);
1648 SanitizeWantParams(*want);1657 SanitizeWantParams(*want);
1649 std::unique_ptr<StartOptions> startOptions(data.ReadParcelable<StartOptions>());1658 std::unique_ptr<StartOptions> startOptions(data.ReadParcelable<StartOptions>());
1650 if (startOptions == nullptr) {1659 if (startOptions == nullptr) {
@@ -1683,6 +1692,7 @@ int AbilityManagerStub::StartExtensionAbilityInner(MessageParcel &data, MessageP
1683 TAG_LOGE(AAFwkTag::SERVICE_EXT, "want null");1692 TAG_LOGE(AAFwkTag::SERVICE_EXT, "want null");
1684 return ERR_INVALID_VALUE;1693 return ERR_INVALID_VALUE;
1685 }1694 }
1695+ WantFdScope fdScope(*want);
1686 SanitizeWantParams(*want);1696 SanitizeWantParams(*want);
1687 sptr<IRemoteObject> callerToken = nullptr;1697 sptr<IRemoteObject> callerToken = nullptr;
1688 if (data.ReadBool()) {1698 if (data.ReadBool()) {
@@ -1703,6 +1713,7 @@ int AbilityManagerStub::RequestModalUIExtensionInner(MessageParcel &data, Messag
1703 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1713 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1704 return ERR_INVALID_VALUE;1714 return ERR_INVALID_VALUE;
1705 }1715 }
1716+ WantFdScope fdScope(*want);
1706 SanitizeWantParams(*want);1717 SanitizeWantParams(*want);
1707 int32_t result = RequestModalUIExtension(*want);1718 int32_t result = RequestModalUIExtension(*want);
1708 reply.WriteInt32(result);1719 reply.WriteInt32(result);
@@ -1716,6 +1727,7 @@ int AbilityManagerStub::RequestModalUIExtensionWithAccountInner(MessageParcel &d
1716 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1727 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1717 return ERR_INVALID_VALUE;1728 return ERR_INVALID_VALUE;
1718 }1729 }
1730+ WantFdScope fdScope(*want);
1719 SanitizeWantParams(*want);1731 SanitizeWantParams(*want);
1720 int32_t accountId = data.ReadInt32();1732 int32_t accountId = data.ReadInt32();
1721 int32_t result = RequestModalUIExtensionWithAccount(*want, accountId);1733 int32_t result = RequestModalUIExtensionWithAccount(*want, accountId);
@@ -1730,6 +1742,7 @@ int AbilityManagerStub::PreloadUIExtensionAbilityInner(MessageParcel &data, Mess
1730 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");1742 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
1731 return ERR_INVALID_VALUE;1743 return ERR_INVALID_VALUE;
1732 }1744 }
1745+ WantFdScope fdScope(*want);
1733 SanitizeWantParams(*want);1746 SanitizeWantParams(*want);
1734 std::string hostBundleName = Str16ToStr8(data.ReadString16());1747 std::string hostBundleName = Str16ToStr8(data.ReadString16());
1735 int32_t userId = data.ReadInt32();1748 int32_t userId = data.ReadInt32();
@@ -1861,6 +1874,7 @@ int AbilityManagerStub::StopExtensionAbilityInner(MessageParcel& data, MessagePa
1861 TAG_LOGE(AAFwkTag::SERVICE_EXT, "null want");1874 TAG_LOGE(AAFwkTag::SERVICE_EXT, "null want");
1862 return ERR_INVALID_VALUE;1875 return ERR_INVALID_VALUE;
1863 }1876 }
1877+ WantFdScope fdScope(*want);
1864 SanitizeWantParams(*want);1878 SanitizeWantParams(*want);
1865 sptr<IRemoteObject> callerToken = nullptr;1879 sptr<IRemoteObject> callerToken = nullptr;
1866 if (data.ReadBool()) {1880 if (data.ReadBool()) {
@@ -1881,6 +1895,7 @@ int AbilityManagerStub::StartAbilityAddCallerInner(MessageParcel &data, MessageP
1881 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");1895 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
1882 return ERR_INVALID_VALUE;1896 return ERR_INVALID_VALUE;
1883 }1897 }
1898+ WantFdScope fdScope(*want);
1884 SanitizeWantParams(*want);1899 SanitizeWantParams(*want);
1885 1900 
1886 sptr<IRemoteObject> callerToken = nullptr;1901 sptr<IRemoteObject> callerToken = nullptr;
@@ -1903,6 +1918,7 @@ int AbilityManagerStub::StartAbilityAsCallerByTokenInner(MessageParcel &data, Me
1903 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");1918 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
1904 return ERR_INVALID_VALUE;1919 return ERR_INVALID_VALUE;
1905 }1920 }
1921+ WantFdScope fdScope(*want);
1906 SanitizeWantParams(*want);1922 SanitizeWantParams(*want);
1907 1923 
1908 sptr<IRemoteObject> callerToken = nullptr;1924 sptr<IRemoteObject> callerToken = nullptr;
@@ -1927,6 +1943,7 @@ int AbilityManagerStub::StartAbilityAsCallerForOptionInner(MessageParcel &data,
1927 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");1943 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
1928 return ERR_INVALID_VALUE;1944 return ERR_INVALID_VALUE;
1929 }1945 }
1946+ WantFdScope fdScope(*want);
1930 SanitizeWantParams(*want);1947 SanitizeWantParams(*want);
1931 StartOptions *startOptions = data.ReadParcelable<StartOptions>();1948 StartOptions *startOptions = data.ReadParcelable<StartOptions>();
1932 if (startOptions == nullptr) {1949 if (startOptions == nullptr) {
@@ -1957,6 +1974,7 @@ int AbilityManagerStub::ConnectAbilityInner(MessageParcel &data, MessageParcel &
1957 TAG_LOGE(AAFwkTag::SERVICE_EXT, "null want");1974 TAG_LOGE(AAFwkTag::SERVICE_EXT, "null want");
1958 return ERR_INVALID_VALUE;1975 return ERR_INVALID_VALUE;
1959 }1976 }
1977+ WantFdScope fdScope(*want);
1960 SanitizeWantParams(*want);1978 SanitizeWantParams(*want);
1961 sptr<IAbilityConnection> callback = nullptr;1979 sptr<IAbilityConnection> callback = nullptr;
1962 sptr<IRemoteObject> token = nullptr;1980 sptr<IRemoteObject> token = nullptr;
@@ -1979,6 +1997,7 @@ int AbilityManagerStub::ConnectAbilityWithTypeInner(MessageParcel &data, Message
1979 TAG_LOGE(AAFwkTag::ABILITYMGR, "%{public}s, null want", __func__);1997 TAG_LOGE(AAFwkTag::ABILITYMGR, "%{public}s, null want", __func__);
1980 return ERR_INVALID_VALUE;1998 return ERR_INVALID_VALUE;
1981 }1999 }
2000+ WantFdScope fdScope(*want);
1982 SanitizeWantParams(*want);2001 SanitizeWantParams(*want);
1983 sptr<IAbilityConnection> callback = nullptr;2002 sptr<IAbilityConnection> callback = nullptr;
1984 sptr<IRemoteObject> token = nullptr;2003 sptr<IRemoteObject> token = nullptr;
@@ -2007,6 +2026,7 @@ int AbilityManagerStub::ConnectUIExtensionAbilityInner(MessageParcel &data, Mess
2007 TAG_LOGE(AAFwkTag::ABILITYMGR, "%{public}s, null want", __func__);2026 TAG_LOGE(AAFwkTag::ABILITYMGR, "%{public}s, null want", __func__);
2008 return ERR_INVALID_VALUE;2027 return ERR_INVALID_VALUE;
2009 }2028 }
2029+ WantFdScope fdScope(*want);
2010 SanitizeWantParams(*want);2030 SanitizeWantParams(*want);
2011 sptr<IAbilityConnection> callback = nullptr;2031 sptr<IAbilityConnection> callback = nullptr;
2012 if (data.ReadBool()) {2032 if (data.ReadBool()) {
@@ -2052,6 +2072,7 @@ int AbilityManagerStub::StopServiceAbilityInner(MessageParcel &data, MessageParc
2052 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");2072 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
2053 return ERR_INVALID_VALUE;2073 return ERR_INVALID_VALUE;
2054 }2074 }
2075+ WantFdScope fdScope(*want);
2055 SanitizeWantParams(*want);2076 SanitizeWantParams(*want);
2056 int32_t userId = data.ReadInt32();2077 int32_t userId = data.ReadInt32();
2057 sptr<IRemoteObject> token = nullptr;2078 sptr<IRemoteObject> token = nullptr;
@@ -2108,6 +2129,7 @@ int AbilityManagerStub::StartAbilityForSettingsInner(MessageParcel &data, Messag
2108 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");2129 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
2109 return ERR_INVALID_VALUE;2130 return ERR_INVALID_VALUE;
2110 }2131 }
2132+ WantFdScope fdScope(*want);
2111 SanitizeWantParams(*want);2133 SanitizeWantParams(*want);
2112 AbilityStartSetting *abilityStartSetting = data.ReadParcelable<AbilityStartSetting>();2134 AbilityStartSetting *abilityStartSetting = data.ReadParcelable<AbilityStartSetting>();
2113 if (abilityStartSetting == nullptr) {2135 if (abilityStartSetting == nullptr) {
@@ -2133,6 +2155,7 @@ int AbilityManagerStub::StartAbilityForOptionsInner(MessageParcel &data, Message
2133 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");2155 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
2134 return ERR_INVALID_VALUE;2156 return ERR_INVALID_VALUE;
2135 }2157 }
2158+ WantFdScope fdScope(*want);
2136 SanitizeWantParams(*want);2159 SanitizeWantParams(*want);
2137 StartOptions *startOptions = data.ReadParcelable<StartOptions>();2160 StartOptions *startOptions = data.ReadParcelable<StartOptions>();
2138 if (startOptions == nullptr) {2161 if (startOptions == nullptr) {
@@ -2367,6 +2390,7 @@ int AbilityManagerStub::GetPendingRequestWantInner(MessageParcel &data, MessageP
2367 TAG_LOGE(AAFwkTag::ABILITYMGR, "read wanr parcel failed");2390 TAG_LOGE(AAFwkTag::ABILITYMGR, "read wanr parcel failed");
2368 return ERR_INVALID_VALUE;2391 return ERR_INVALID_VALUE;
2369 }2392 }
2393+ WantFdScope fdScope(*want);
2370 SanitizeWantParams(*want);2394 SanitizeWantParams(*want);
2371 int32_t result = GetPendingRequestWant(wantSender, want);2395 int32_t result = GetPendingRequestWant(wantSender, want);
2372 if (result != NO_ERROR) {2396 if (result != NO_ERROR) {
@@ -2391,6 +2415,7 @@ int AbilityManagerStub::GetPendingRequestWantFromProxyInner(MessageParcel &data,
2391 TAG_LOGE(AAFwkTag::ABILITYMGR, "read wanr parcel failed");2415 TAG_LOGE(AAFwkTag::ABILITYMGR, "read wanr parcel failed");
2392 return ERR_INVALID_VALUE;2416 return ERR_INVALID_VALUE;
2393 }2417 }
2418+ WantFdScope fdScope(*want);
2394 SanitizeWantParams(*want);2419 SanitizeWantParams(*want);
2395 int32_t result = GetPendingRequestWantFromProxy(wantSender, want);2420 int32_t result = GetPendingRequestWantFromProxy(wantSender, want);
2396 if (result != NO_ERROR) {2421 if (result != NO_ERROR) {
@@ -2509,6 +2534,7 @@ int AbilityManagerStub::StartContinuationInner(MessageParcel &data, MessageParce
2509 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");2534 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
2510 return ERR_NULL_OBJECT;2535 return ERR_NULL_OBJECT;
2511 }2536 }
2537+ WantFdScope fdScope(*want);
2512 SanitizeWantParams(*want);2538 SanitizeWantParams(*want);
2513 2539 
2514 sptr<IRemoteObject> abilityToken = data.ReadRemoteObject();2540 sptr<IRemoteObject> abilityToken = data.ReadRemoteObject();
@@ -2743,6 +2769,7 @@ int AbilityManagerStub::StartAbilityByCallInner(MessageParcel &data, MessageParc
2743 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");2769 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
2744 return ERR_INVALID_VALUE;2770 return ERR_INVALID_VALUE;
2745 }2771 }
2772+ WantFdScope fdScope(*want);
2746 SanitizeWantParams(*want);2773 SanitizeWantParams(*want);
2747 2774 
2748 auto callback = iface_cast<IAbilityConnection>(data.ReadRemoteObject());2775 auto callback = iface_cast<IAbilityConnection>(data.ReadRemoteObject());
@@ -2780,6 +2807,7 @@ int AbilityManagerStub::StartAbilityForPrelaunchInner(MessageParcel &data, Messa
2780 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");2807 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
2781 return ERR_INVALID_VALUE;2808 return ERR_INVALID_VALUE;
2782 }2809 }
2810+ WantFdScope fdScope(*want);
2783 SanitizeWantParams(*want);2811 SanitizeWantParams(*want);
2784 int32_t frameNum = data.ReadInt32();2812 int32_t frameNum = data.ReadInt32();
2785 int32_t result = StartAbilityForPrelaunch(*want, frameNum);2813 int32_t result = StartAbilityForPrelaunch(*want, frameNum);
@@ -3117,6 +3145,7 @@ int AbilityManagerStub::StartUserTestInner(MessageParcel &data, MessageParcel &r
3117 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");3145 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
3118 return ERR_INVALID_VALUE;3146 return ERR_INVALID_VALUE;
3119 }3147 }
3148+ WantFdScope fdScope(*want);
3120 SanitizeWantParams(*want);3149 SanitizeWantParams(*want);
3121 auto observer = data.ReadRemoteObject();3150 auto observer = data.ReadRemoteObject();
3122 int32_t result = StartUserTest(*want, observer);3151 int32_t result = StartUserTest(*want, observer);
@@ -3515,6 +3544,7 @@ int AbilityManagerStub::ScheduleRecoverAbilityInner(MessageParcel &data, Message
3515 }3544 }
3516 ScheduleRecoverAbility(token, reason, want);3545 ScheduleRecoverAbility(token, reason, want);
3517 if (want != nullptr) {3546 if (want != nullptr) {
3547+ want->CloseAllFd();
3518 delete want;3548 delete want;
3519 }3549 }
3520 return NO_ERROR;3550 return NO_ERROR;
@@ -3732,6 +3762,7 @@ int AbilityManagerStub::SendDialogResultInner(MessageParcel &data, MessageParcel
3732 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");3762 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
3733 return ERR_INVALID_VALUE;3763 return ERR_INVALID_VALUE;
3734 }3764 }
3765+ WantFdScope fdScope(*want);
3735 SanitizeWantParams(*want);3766 SanitizeWantParams(*want);
3736 std::string dialogSessionId = data.ReadString();3767 std::string dialogSessionId = data.ReadString();
3737 bool isAllow = data.ReadBool();3768 bool isAllow = data.ReadBool();
@@ -3970,6 +4001,7 @@ int32_t AbilityManagerStub::StartSpecifiedAbilityBySCBInner(MessageParcel &data,
3970 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4001 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
3971 return ERR_INVALID_VALUE;4002 return ERR_INVALID_VALUE;
3972 }4003 }
4004+ WantFdScope fdScope(*want);
3973 SanitizeWantParams(*want);4005 SanitizeWantParams(*want);
3974 std::unique_ptr<StartSpecifiedAbilityParams> params(data.ReadParcelable<StartSpecifiedAbilityParams>());4006 std::unique_ptr<StartSpecifiedAbilityParams> params(data.ReadParcelable<StartSpecifiedAbilityParams>());
3975 if (params == nullptr) {4007 if (params == nullptr) {
@@ -3988,6 +4020,7 @@ int AbilityManagerStub::NotifySaveAsResultInner(MessageParcel &data, MessageParc
3988 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4020 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
3989 return ERR_INVALID_VALUE;4021 return ERR_INVALID_VALUE;
3990 }4022 }
4023+ WantFdScope fdScope(*want);
3991 SanitizeWantParams(*want);4024 SanitizeWantParams(*want);
3992 int resultCode = data.ReadInt32();4025 int resultCode = data.ReadInt32();
3993 int requestCode = data.ReadInt32();4026 int requestCode = data.ReadInt32();
@@ -4352,6 +4385,7 @@ int32_t AbilityManagerStub::IsAbilityControllerStartInner(MessageParcel &data, M
4352 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4385 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4353 return true;4386 return true;
4354 }4387 }
4388+ WantFdScope fdScope(*want);
4355 SanitizeWantParams(*want);4389 SanitizeWantParams(*want);
4356 bool result = IsAbilityControllerStart(*want);4390 bool result = IsAbilityControllerStart(*want);
4357 reply.WriteBool(result);4391 reply.WriteBool(result);
@@ -4407,6 +4441,7 @@ int32_t AbilityManagerStub::ExecuteIntentForDistributedInner(MessageParcel &data
4407 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4441 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4408 return ERR_INVALID_VALUE;4442 return ERR_INVALID_VALUE;
4409 }4443 }
4444+ WantFdScope fdScope(*want);
4410 4445 
4411 std::string srcDeviceId = data.ReadString();4446 std::string srcDeviceId = data.ReadString();
4412 if (srcDeviceId.empty()) {4447 if (srcDeviceId.empty()) {
@@ -4464,6 +4499,7 @@ int AbilityManagerStub::StartAbilityForResultAsCallerInner(MessageParcel &data,
4464 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4499 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4465 return ERR_INVALID_VALUE;4500 return ERR_INVALID_VALUE;
4466 }4501 }
4502+ WantFdScope fdScope(*want);
4467 SanitizeWantParams(*want);4503 SanitizeWantParams(*want);
4468 sptr<IRemoteObject> callerToken = nullptr;4504 sptr<IRemoteObject> callerToken = nullptr;
4469 if (data.ReadBool()) {4505 if (data.ReadBool()) {
@@ -4485,6 +4521,7 @@ int32_t AbilityManagerStub::StartUIAbilitiesInSplitWindowModeInner(MessageParcel
4485 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4521 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4486 return ERR_INVALID_VALUE;4522 return ERR_INVALID_VALUE;
4487 }4523 }
4524+ WantFdScope fdScope(*want);
4488 SanitizeWantParams(*want);4525 SanitizeWantParams(*want);
4489 sptr<IRemoteObject> callerToken = data.ReadRemoteObject();4526 sptr<IRemoteObject> callerToken = data.ReadRemoteObject();
4490 if (callerToken == nullptr) {4527 if (callerToken == nullptr) {
@@ -4512,6 +4549,7 @@ int32_t AbilityManagerStub::StartUIAbilitiesInner(MessageParcel &data, MessagePa
4512 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");4549 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
A
Aafwk_helper8 天前

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 WantFdScope与wantList的浅拷贝并存可能导致Fd被意外关闭

位置: L4549-L4551 | 严重程度: Medium

❓ 问题描述

在StartUIAbilitiesInner的循环中,通过WantFdScope fdScope(*want)接管了当前want的Fd关闭职责。同时通过wantList.emplace_back(*want)将want存入列表。如果Want的拷贝构造是浅拷贝(未对Fd进行dup),当循环结束临时want被销毁时,WantFdScope会调用CloseAllFd(),这会导致wantList中所有Want持有的Fd被提前关闭,后续使用该列表的StartUIAbilities将获取到无效的Fd。

💡 修复建议

修改建议:确认wantList是否需要保留Fd。如果需要,应对want进行深拷贝(如调用AssignDup)后再加入列表,以避免在循环结束时Fd被WantFdScope提前关闭。

4549: WantFdScope fdScope(*want); 4550: SanitizeWantParams(*want); 4551: wantList.emplace_back(); 4552: wantList.back().AssignDup(*want);


likedislike
4513 return ERR_NATIVE_IPC_PARCEL_FAILED;4550 return ERR_NATIVE_IPC_PARCEL_FAILED;
4514 }4551 }
4552+ WantFdScope fdScope(*want);
4515 SanitizeWantParams(*want);4553 SanitizeWantParams(*want);
4516 wantList.emplace_back(*want);4554 wantList.emplace_back(*want);
4517 }4555 }
@@ -4552,6 +4590,7 @@ int AbilityManagerStub::StartAbilityForResultAsCallerForOptionsInner(MessageParc
4552 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4590 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4553 return ERR_INVALID_VALUE;4591 return ERR_INVALID_VALUE;
4554 }4592 }
4593+ WantFdScope fdScope(*want);
4555 SanitizeWantParams(*want);4594 SanitizeWantParams(*want);
4556 std::unique_ptr<StartOptions> startOptions(data.ReadParcelable<StartOptions>());4595 std::unique_ptr<StartOptions> startOptions(data.ReadParcelable<StartOptions>());
4557 if (startOptions == nullptr) {4596 if (startOptions == nullptr) {
@@ -4577,6 +4616,7 @@ int32_t AbilityManagerStub::StartAbilityOnlyUIAbilityInner(MessageParcel &data,
4577 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");4616 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
4578 return ERR_INVALID_VALUE;4617 return ERR_INVALID_VALUE;
4579 }4618 }
4619+ WantFdScope fdScope(*want);
4580 SanitizeWantParams(*want);4620 SanitizeWantParams(*want);
4581 4621 
4582 sptr<IRemoteObject> callerToken = nullptr;4622 sptr<IRemoteObject> callerToken = nullptr;
@@ -4598,6 +4638,7 @@ int32_t AbilityManagerStub::StartAbilityByInsightIntentInner(MessageParcel &data
4598 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4638 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4599 return ERR_INVALID_VALUE;4639 return ERR_INVALID_VALUE;
4600 }4640 }
4641+ WantFdScope fdScope(*want);
4601 4642 
4602 sptr<IRemoteObject> callerToken = nullptr;4643 sptr<IRemoteObject> callerToken = nullptr;
4603 if (!data.ReadBool()) {4644 if (!data.ReadBool()) {
@@ -4619,6 +4660,7 @@ int32_t AbilityManagerStub::StartAbilityByOEExtInner(MessageParcel &data, Messag
4619 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4660 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4620 return ERR_INVALID_VALUE;4661 return ERR_INVALID_VALUE;
4621 }4662 }
4663+ WantFdScope fdScope(*want);
4622 SanitizeWantParams(*want);4664 SanitizeWantParams(*want);
4623 4665 
4624 sptr<IRemoteObject> callerToken = nullptr;4666 sptr<IRemoteObject> callerToken = nullptr;
@@ -4882,6 +4924,7 @@ int32_t AbilityManagerStub::OpenAtomicServiceInner(MessageParcel &data, MessageP
4882 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4924 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4883 return ERR_INVALID_VALUE;4925 return ERR_INVALID_VALUE;
4884 }4926 }
4927+ WantFdScope fdScope(*want);
4885 SanitizeWantParams(*want);4928 SanitizeWantParams(*want);
4886 std::unique_ptr<StartOptions> options(data.ReadParcelable<StartOptions>());4929 std::unique_ptr<StartOptions> options(data.ReadParcelable<StartOptions>());
4887 if (options == nullptr) {4930 if (options == nullptr) {
@@ -4947,6 +4990,7 @@ int32_t AbilityManagerStub::StartShortcutInner(MessageParcel &data, MessageParce
4947 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");4990 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4948 return ERR_INVALID_VALUE;4991 return ERR_INVALID_VALUE;
4949 }4992 }
4993+ WantFdScope fdScope(*want);
4950 SanitizeWantParams(*want);4994 SanitizeWantParams(*want);
4951 StartOptions *startOptions = data.ReadParcelable<StartOptions>();4995 StartOptions *startOptions = data.ReadParcelable<StartOptions>();
4952 if (startOptions == nullptr) {4996 if (startOptions == nullptr) {
@@ -4984,6 +5028,7 @@ int32_t AbilityManagerStub::TransferAbilityResultForExtensionInner(MessageParcel
4984 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5028 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
4985 return ERR_INVALID_VALUE;5029 return ERR_INVALID_VALUE;
4986 }5030 }
5031+ WantFdScope fdScope(*want);
4987 SanitizeWantParams(*want);5032 SanitizeWantParams(*want);
4988 int32_t result = TransferAbilityResultForExtension(callerToken, resultCode, *want);5033 int32_t result = TransferAbilityResultForExtension(callerToken, resultCode, *want);
4989 reply.WriteInt32(result);5034 reply.WriteInt32(result);
@@ -5030,6 +5075,7 @@ int32_t AbilityManagerStub::OpenLinkInner(MessageParcel &data, MessageParcel &re
5030 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5075 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5031 return ERR_INVALID_VALUE;5076 return ERR_INVALID_VALUE;
5032 }5077 }
5078+ WantFdScope fdScope(*want);
5033 SanitizeWantParams(*want);5079 SanitizeWantParams(*want);
5034 sptr<IRemoteObject> callerToken = data.ReadRemoteObject();5080 sptr<IRemoteObject> callerToken = data.ReadRemoteObject();
5035 int32_t userId = data.ReadInt32();5081 int32_t userId = data.ReadInt32();
@@ -5223,13 +5269,13 @@ int32_t AbilityManagerStub::StartSelfUIAbilityInner(MessageParcel &data, Message
5223 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5269 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5224 return ERR_INVALID_VALUE;5270 return ERR_INVALID_VALUE;
5225 }5271 }
5272+ WantFdScope fdScope(*want);
5226 SanitizeWantParams(*want);5273 SanitizeWantParams(*want);
5227 int32_t result = StartSelfUIAbility(*want);5274 int32_t result = StartSelfUIAbility(*want);
5228 if (!reply.WriteInt32(result)) {5275 if (!reply.WriteInt32(result)) {
5229 TAG_LOGE(AAFwkTag::ABILITYMGR, "reply write fail");5276 TAG_LOGE(AAFwkTag::ABILITYMGR, "reply write fail");
5230 return INNER_ERR;5277 return INNER_ERR;
5231 }5278 }
5232- want->CloseAllFd();
5233 return NO_ERROR;5279 return NO_ERROR;
5234}5280}
5235 5281 
@@ -5240,6 +5286,7 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithStartOptionsInner(MessageParce
5240 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5286 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5241 return ERR_READ_WANT;5287 return ERR_READ_WANT;
5242 }5288 }
5289+ WantFdScope fdScope(*want);
5243 SanitizeWantParams(*want);5290 SanitizeWantParams(*want);
5244 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();5291 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();
5245 if (options == nullptr) {5292 if (options == nullptr) {
@@ -5252,7 +5299,6 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithStartOptionsInner(MessageParce
5252 TAG_LOGE(AAFwkTag::ABILITYMGR, "write StartSelfUIAbilityWithStartOptions result fail");5299 TAG_LOGE(AAFwkTag::ABILITYMGR, "write StartSelfUIAbilityWithStartOptions result fail");
5253 return ERR_WRITE_START_SELF_UI_ABILITY_RESULT;5300 return ERR_WRITE_START_SELF_UI_ABILITY_RESULT;
5254 }5301 }
5255- want->CloseAllFd();
5256 return NO_ERROR;5302 return NO_ERROR;
5257}5303}
5258 5304 
@@ -5263,6 +5309,7 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithTokenInner(MessageParcel &data
5263 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5309 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5264 return ERR_READ_WANT;5310 return ERR_READ_WANT;
5265 }5311 }
5312+ WantFdScope fdScope(*want);
5266 SanitizeWantParams(*want);5313 SanitizeWantParams(*want);
5267 sptr<IRemoteObject> callerToken = nullptr;5314 sptr<IRemoteObject> callerToken = nullptr;
5268 if (data.ReadBool()) {5315 if (data.ReadBool()) {
@@ -5273,7 +5320,6 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithTokenInner(MessageParcel &data
5273 TAG_LOGE(AAFwkTag::ABILITYMGR, "write result fail");5320 TAG_LOGE(AAFwkTag::ABILITYMGR, "write result fail");
5274 return INNER_ERR;5321 return INNER_ERR;
5275 }5322 }
5276- want->CloseAllFd();
5277 return NO_ERROR;5323 return NO_ERROR;
5278}5324}
5279 5325 
@@ -5284,6 +5330,7 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithStartOptionsAndTokenInner(Mess
5284 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5330 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5285 return ERR_READ_WANT;5331 return ERR_READ_WANT;
5286 }5332 }
5333+ WantFdScope fdScope(*want);
5287 SanitizeWantParams(*want);5334 SanitizeWantParams(*want);
5288 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();5335 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();
5289 if (options == nullptr) {5336 if (options == nullptr) {
@@ -5300,7 +5347,6 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithStartOptionsAndTokenInner(Mess
5300 TAG_LOGE(AAFwkTag::ABILITYMGR, "write result fail");5347 TAG_LOGE(AAFwkTag::ABILITYMGR, "write result fail");
5301 return INNER_ERR;5348 return INNER_ERR;
5302 }5349 }
5303- want->CloseAllFd();
5304 return NO_ERROR;5350 return NO_ERROR;
5305}5351}
5306 5352 
@@ -5311,6 +5357,7 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithPidResultInner(MessageParcel &
5311 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5357 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5312 return ERR_READ_WANT;5358 return ERR_READ_WANT;
5313 }5359 }
5360+ WantFdScope fdScope(*want);
5314 SanitizeWantParams(*want);5361 SanitizeWantParams(*want);
5315 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();5362 sptr<StartOptions> options = data.ReadParcelable<StartOptions>();
5316 if (options == nullptr) {5363 if (options == nullptr) {
@@ -5324,7 +5371,6 @@ int32_t AbilityManagerStub::StartSelfUIAbilityWithPidResultInner(MessageParcel &
5324 TAG_LOGE(AAFwkTag::ABILITYMGR, "write StartSelfUIAbilityWithPidResult result fail");5371 TAG_LOGE(AAFwkTag::ABILITYMGR, "write StartSelfUIAbilityWithPidResult result fail");
5325 return ERR_WRITE_START_SELF_UI_ABILITY_RESULT;5372 return ERR_WRITE_START_SELF_UI_ABILITY_RESULT;
5326 }5373 }
5327- want->CloseAllFd();
5328 return NO_ERROR;5374 return NO_ERROR;
5329}5375}
5330 5376 
@@ -5441,6 +5487,7 @@ int32_t AbilityManagerStub::StartAbilityWithWaitInner(MessageParcel &data, Messa
5441 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");5487 TAG_LOGE(AAFwkTag::ABILITYMGR, "null want");
5442 return ERR_NULL_OBJECT;5488 return ERR_NULL_OBJECT;
5443 }5489 }
5490+ WantFdScope fdScope(*want);
5444 SanitizeWantParams(*want);5491 SanitizeWantParams(*want);
5445 5492 
5446 auto callback = iface_cast<IAbilityStartWithWaitObserver>(data.ReadRemoteObject());5493 auto callback = iface_cast<IAbilityStartWithWaitObserver>(data.ReadRemoteObject());
@@ -5464,6 +5511,7 @@ int32_t AbilityManagerStub::StartUIAbilityWithCallbackInner(MessageParcel &data,
5464 TAG_LOGE(AAFwkTag::ABILITYMGR, "read want failed");5511 TAG_LOGE(AAFwkTag::ABILITYMGR, "read want failed");
5465 return ERR_READ_WANT;5512 return ERR_READ_WANT;
5466 }5513 }
5514+ WantFdScope fdScope(*want);
5467 SanitizeWantParams(*want);5515 SanitizeWantParams(*want);
5468 5516 
5469 sptr<IRemoteObject> callerToken = nullptr;5517 sptr<IRemoteObject> callerToken = nullptr;
@@ -5756,6 +5804,7 @@ int AbilityManagerStub::StartSelfUIAbilityInCurrentProcessInner(MessageParcel &d
5756 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5804 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5757 return ERR_INVALID_VALUE;5805 return ERR_INVALID_VALUE;
5758 }5806 }
5807+ WantFdScope fdScope(*want);
5759 SanitizeWantParams(*want);5808 SanitizeWantParams(*want);
5760 std::string specifiedFlag = data.ReadString();5809 std::string specifiedFlag = data.ReadString();
5761 StartOptions *startOptions = data.ReadParcelable<StartOptions>();5810 StartOptions *startOptions = data.ReadParcelable<StartOptions>();
@@ -5783,6 +5832,7 @@ int AbilityManagerStub::StartSelfUIAbilityInChildProcessInner(MessageParcel &dat
5783 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");5832 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
5784 return ERR_INVALID_VALUE;5833 return ERR_INVALID_VALUE;
5785 }5834 }
5835+ WantFdScope fdScope(*want);
5786 SanitizeWantParams(*want);5836 SanitizeWantParams(*want);
5787 std::string specifiedFlag = data.ReadString();5837 std::string specifiedFlag = data.ReadString();
5788 sptr<IRemoteObject> callerToken = nullptr;5838 sptr<IRemoteObject> callerToken = nullptr;
@@ -6017,6 +6067,7 @@ int32_t AbilityManagerStub::StartSelfUIAbilityByAppContextInner(MessageParcel &d
6017 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");6067 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
6018 return ERR_INVALID_VALUE;6068 return ERR_INVALID_VALUE;
6019 }6069 }
6070+ WantFdScope fdScope(*want);
6020 SanitizeWantParams(*want);6071 SanitizeWantParams(*want);
6021 int32_t result = StartSelfUIAbilityByAppContext(*want);6072 int32_t result = StartSelfUIAbilityByAppContext(*want);
6022 reply.WriteInt32(result);6073 reply.WriteInt32(result);
@@ -6031,6 +6082,7 @@ int32_t AbilityManagerStub::StartSandboxCloneAbilityInner(MessageParcel &data, M
6031 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");6082 TAG_LOGE(AAFwkTag::ABILITYMGR, "want null");
6032 return ERR_INVALID_VALUE;6083 return ERR_INVALID_VALUE;
6033 }6084 }
6085+ WantFdScope fdScope(*want);
6034 SanitizeWantParams(*want);6086 SanitizeWantParams(*want);
6035 std::shared_ptr<SandboxCloneParams> params(data.ReadParcelable<SandboxCloneParams>());6087 std::shared_ptr<SandboxCloneParams> params(data.ReadParcelable<SandboxCloneParams>());
6036 if (params == nullptr) {6088 if (params == nullptr) {
@@ -2114,7 +2114,9 @@ void AbilityRecord::SetWant(const Want &want)
2114 auto errorInfoEnhance = want_.GetBoolParam(ERROR_INFO_ENHANCE, false);2114 auto errorInfoEnhance = want_.GetBoolParam(ERROR_INFO_ENHANCE, false);
2115 want_.CloseAllFd();2115 want_.CloseAllFd();
2116 2116 
2117- want_ = want;2117+ if (!want_.AssignDup(want)) {
A
Aafwk_helper8 天前

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟠 AssignDup失败仅打印日志而未中断逻辑,可能导致Fd静默丢失

位置: L2117-L2119 | 严重程度: High

❓ 问题描述

在重构Fd所有权时,将原本的浅拷贝(want_ = want)替换为深拷贝(AssignDup)。然而,如果AssignDup因系统资源限制(如进程Fd达到上限导致dup失败)而返回失败,代码仅打印日志。此时want_中的Fd被剥离(stripped),后续依赖Fd的业务逻辑将发生静默失败,且原来want中的Fd也可能在其他地方被关闭,导致彻底丢失。

💡 修复建议

修改建议:当AssignDup失败时,应视为严重错误,中断后续逻辑或返回错误码,避免基于残缺的want继续执行。

2117: if (!want_.AssignDup(want)) { 2118: TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup want_ failed, fd stripped"); 2119: return; // 视具体逻辑返回错误或抛出异常 2120: }


likedislike
2118+ TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup want_ failed, fd stripped");
2119+ }
2118 if (launchDebugInfo_.isDebugAppSet) {2120 if (launchDebugInfo_.isDebugAppSet) {
2119 want_.SetParam(AbilityConfig::DEBUG_APP, launchDebugInfo_.debugApp);2121 want_.SetParam(AbilityConfig::DEBUG_APP, launchDebugInfo_.debugApp);
2120 } else {2122 } else {
@@ -311,7 +311,7 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp
311 uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant);311 uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant);
312 if (sessionInfo->isNewWant) {312 if (sessionInfo->isNewWant) {
313 uiAbilityRecord->SetWant(abilityRequest.want);313 uiAbilityRecord->SetWant(abilityRequest.want);
314- uiAbilityRecord->GetSessionInfo()->want.RemoveAllFd();314+ uiAbilityRecord->GetSessionInfo()->want.CloseAllFd();
315 } else {315 } else {
316 sessionInfo->want.CloseAllFd();316 sessionInfo->want.CloseAllFd();
317 }317 }
@@ -804,12 +804,15 @@ bool UIAbilityLifecycleManager::HandleHookModule(AbilityRequest &abilityRequest,
804 request.requestCallback = abilityRequest.requestCallback;804 request.requestCallback = abilityRequest.requestCallback;
805 sptr<SessionInfo> hookSessionInfo = abilityRecord->GetSessionInfo();805 sptr<SessionInfo> hookSessionInfo = abilityRecord->GetSessionInfo();
806 if (hookSessionInfo != nullptr) {806 if (hookSessionInfo != nullptr) {
807- hookSessionInfo->want = abilityRequest.want;807+ hookSessionInfo->want.CloseAllFd();
808+ if (!hookSessionInfo->want.AssignDup(abilityRequest.want)) {
809+ TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup hookSession want failed");
810+ }
808 }811 }
809 std::string errMsg;812 std::string errMsg;
810 ret = NotifySCBPendingActivation(hookSessionInfo, request, errMsg);813 ret = NotifySCBPendingActivation(hookSessionInfo, request, errMsg);
811 if (hookSessionInfo != nullptr) {814 if (hookSessionInfo != nullptr) {
812- hookSessionInfo->want.RemoveAllFd();815+ hookSessionInfo->want.CloseAllFd();
813 }816 }
814 if (ret == ERR_INVALID_VALUE) {817 if (ret == ERR_INVALID_VALUE) {
815 ret = ERR_NOTIFY_SCB_PENDING_ACTIVATION_FAILED;818 ret = ERR_NOTIFY_SCB_PENDING_ACTIVATION_FAILED;
@@ -893,7 +896,7 @@ int UIAbilityLifecycleManager::NotifySCBToStartUIAbility(AbilityRequest &ability
893 if (ret != ERR_OK) {896 if (ret != ERR_OK) {
894 RemoveAbilitySessionInfo(sessionInfo->requestId);897 RemoveAbilitySessionInfo(sessionInfo->requestId);
895 }898 }
896- sessionInfo->want.RemoveAllFd();899+ sessionInfo->want.CloseAllFd();
897 return ret;900 return ret;
898}901}
899 902 
@@ -972,7 +975,7 @@ int UIAbilityLifecycleManager::NotifySCBToStartUIAbilities(std::vector<AbilityRe
972 TAG_LOGI(AAFwkTag::ABILITYMGR, "StartUIAbilities normal, size: %{public}zu", abilityRequestList.size());975 TAG_LOGI(AAFwkTag::ABILITYMGR, "StartUIAbilities normal, size: %{public}zu", abilityRequestList.size());
973 ret = BatchNotifySCBPendingActivations(*abilitiesRequest);976 ret = BatchNotifySCBPendingActivations(*abilitiesRequest);
974 for (auto &[id, sessionInfo] : abilitiesRequest->sessionInfoList) {977 for (auto &[id, sessionInfo] : abilitiesRequest->sessionInfoList) {
975- sessionInfo->want.RemoveAllFd();978+ sessionInfo->want.CloseAllFd();
976 }979 }
977 abilitiesRequestMap_.erase(requestListId);980 abilitiesRequestMap_.erase(requestListId);
978 return ret;981 return ret;
@@ -2005,7 +2008,10 @@ sptr<SessionInfo> UIAbilityLifecycleManager::CreateSessionInfo(const AbilityRequ
2005 CHECK_POINTER_AND_RETURN_LOG(sessionInfo, nullptr, "Failed to create SessionInfo.");2008 CHECK_POINTER_AND_RETURN_LOG(sessionInfo, nullptr, "Failed to create SessionInfo.");
2006 sessionInfo->requestId = requestId;2009 sessionInfo->requestId = requestId;
2007 sessionInfo->callerToken = abilityRequest.callerToken;2010 sessionInfo->callerToken = abilityRequest.callerToken;
2008- sessionInfo->want = abilityRequest.want;2011+ sessionInfo->want.CloseAllFd();
A
Aafwk_helper8 天前

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟠 AssignDup失败后继续执行,且配合CloseAllFd可能导致Fd双重丢失

位置: L2011-L2014 | 严重程度: High

❓ 问题描述

在CreateSessionInfo等函数中,先调用了CloseAllFd()关闭了sessionInfo->want原有的Fd,随后调用AssignDup进行深拷贝。如果AssignDup失败,不仅原有Fd被关闭,新Fd也未能复制成功(stripped)。这会导致sessionInfo持有一个没有有效Fd的Want,后续依赖该Want中Fd的逻辑将静默失败,未做任何错误处理或向上抛出异常。

💡 修复建议

修改建议:当AssignDup失败时应中断当前操作并返回错误,不应继续构建带有缺陷的SessionInfo。

2011: sessionInfo->want.CloseAllFd(); 2012: if (!sessionInfo->want.AssignDup(abilityRequest.want)) { 2013: TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup session want failed"); 2014: return nullptr; // 或适当处理错误 2015: }


likedislike
2012+ if (!sessionInfo->want.AssignDup(abilityRequest.want)) {
2013+ TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup session want failed");
2014+ }
2009 sessionInfo->processOptions = abilityRequest.processOptions;2015 sessionInfo->processOptions = abilityRequest.processOptions;
2010 sessionInfo->startWindowOption = abilityRequest.startWindowOption;2016 sessionInfo->startWindowOption = abilityRequest.startWindowOption;
2011 sessionInfo->supportWindowModes = abilityRequest.supportWindowModes;2017 sessionInfo->supportWindowModes = abilityRequest.supportWindowModes;
@@ -2428,7 +2434,10 @@ int32_t UIAbilityLifecycleManager::BackToCallerAbilityWithResultLocked(sptr<Sess
2428 return ERR_INVALID_VALUE;2434 return ERR_INVALID_VALUE;
2429 }2435 }
2430 sptr<SessionInfo> newSessionInfo = sptr<SessionInfo>::MakeSptr();2436 sptr<SessionInfo> newSessionInfo = sptr<SessionInfo>::MakeSptr();
2431- newSessionInfo->want = callerSessionInfo->want;2437+ newSessionInfo->want.CloseAllFd();
2438+ if (!newSessionInfo->want.AssignDup(callerSessionInfo->want)) {
2439+ TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup newSession want failed");
2440+ }
2432 newSessionInfo->persistentId = callerSessionInfo->persistentId;2441 newSessionInfo->persistentId = callerSessionInfo->persistentId;
2433 newSessionInfo->identityToken = callerSessionInfo->identityToken;2442 newSessionInfo->identityToken = callerSessionInfo->identityToken;
2434 2443 
@@ -4619,7 +4628,7 @@ void UIAbilityLifecycleManager::StartSpecifiedRequest(SpecifiedRequest &specifie
4619 TAG_LOGI(AAFwkTag::ABILITYMGR, "StartSpecifiedRequest cold");4628 TAG_LOGI(AAFwkTag::ABILITYMGR, "StartSpecifiedRequest cold");
4620 std::string errMsg;4629 std::string errMsg;
4621 auto result = NotifySCBPendingActivation(sessionInfo, request, errMsg);4630 auto result = NotifySCBPendingActivation(sessionInfo, request, errMsg);
4622- sessionInfo->want.RemoveAllFd();4631+ sessionInfo->want.CloseAllFd();
4623 if (result != ERR_OK) {4632 if (result != ERR_OK) {
4624 RemoveAbilitySessionInfo(sessionInfo->requestId);4633 RemoveAbilitySessionInfo(sessionInfo->requestId);
4625 RemoveInstanceKey(request);4634 RemoveInstanceKey(request);
@@ -4880,7 +4889,10 @@ int32_t UIAbilityLifecycleManager::RevokeDelegator(sptr<IRemoteObject> token)
4880 TAG_LOGE(AAFwkTag::ABILITYMGR, "launchWant is nullptr");4889 TAG_LOGE(AAFwkTag::ABILITYMGR, "launchWant is nullptr");
4881 return ERR_INVALID_VALUE;4890 return ERR_INVALID_VALUE;
4882 }4891 }
4883- sessionInfo->want = *launchWant;4892+ sessionInfo->want.CloseAllFd();
4893+ if (!sessionInfo->want.AssignDup(*launchWant)) {
4894+ TAG_LOGE(AAFwkTag::ABILITYMGR, "AssignDup launchWant failed");
4895+ }
4884 abilityRecord->SetWant(sessionInfo->want);4896 abilityRecord->SetWant(sessionInfo->want);
4885 AbilityRequest request;4897 AbilityRequest request;
4886 request.callerToken = token;4898 request.callerToken = token;
@@ -4889,7 +4901,7 @@ int32_t UIAbilityLifecycleManager::RevokeDelegator(sptr<IRemoteObject> token)
4889 TAG_LOGI(4901 TAG_LOGI(
4890 AAFwkTag::ABILITYMGR, "Reused sessionId: %{public}d, ret: %{public}d.", sessionInfo->persistentId, ret);4902 AAFwkTag::ABILITYMGR, "Reused sessionId: %{public}d, ret: %{public}d.", sessionInfo->persistentId, ret);
4891 sessionInfo->reuseDelegatorWindow = false;4903 sessionInfo->reuseDelegatorWindow = false;
4892- sessionInfo->want.RemoveAllFd();4904+ sessionInfo->want.CloseAllFd();
4893 if (ret == ERR_OK) {4905 if (ret == ERR_OK) {
4894 abilityRecord->SetHookOff(true);4906 abilityRecord->SetHookOff(true);
4895 abilityRecord->SetIsHook(false);4907 abilityRecord->SetIsHook(false);