From dea7af3d554564a8db75e2d6d8526dcb5720db71 Mon Sep 17 00:00:00 2001 From: CleMints Date: Tue, 13 May 2025 11:14:10 +0800 Subject: [PATCH] fdsan modify Signed-off-by: CleMints Change-Id: I58bb627e266d9248ca382ea14841994219f11c6e --- interfaces/innerkits/backtrace/dfx_kernel_stack.cpp | 4 +++- .../innerkits/faultloggerd_client/faultloggerd_socket.cpp | 6 ++++-- interfaces/innerkits/unwinder/src/elf/elf_factory.cpp | 8 ++++++-- services/fault_logger_service.cpp | 4 +++- services/snapshot/kernel_snapshot_manager.cpp | 4 +++- tools/crash_validator/crash_validator.cpp | 6 ++++-- tools/crash_validator/crash_validator.h | 6 ++++++ tools/process_dump/cppcrash_reporter.cpp | 7 +++++-- 8 files changed, 34 insertions(+), 11 deletions(-) diff --git a/interfaces/innerkits/backtrace/dfx_kernel_stack.cpp b/interfaces/innerkits/backtrace/dfx_kernel_stack.cpp index f5e174a39..f2be39347 100644 --- a/interfaces/innerkits/backtrace/dfx_kernel_stack.cpp +++ b/interfaces/innerkits/backtrace/dfx_kernel_stack.cpp @@ -52,6 +52,8 @@ int32_t DfxGetKernelStack(int32_t pid, std::string& kernelStack) DFXLOGW("Failed to open bbox, pid:%{public}d, errno:%{public}d", pid, errno); return KERNELSTACK_EOPEN; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(fd, 0, ownerTag); int ret = ioctl(fd, LOGGER_GET_STACK, kstackBuf.get()); int32_t res = KERNELSTACK_ESUCCESS; @@ -61,7 +63,7 @@ int32_t DfxGetKernelStack(int32_t pid, std::string& kernelStack) } else { kernelStack = std::string(kstackBuf->hstackLogBuff); } - close(fd); + fdsan_close_with_tag(fd, ownerTag); return res; } diff --git a/interfaces/innerkits/faultloggerd_client/faultloggerd_socket.cpp b/interfaces/innerkits/faultloggerd_client/faultloggerd_socket.cpp index f10a3b8dc..6b39c8d97 100644 --- a/interfaces/innerkits/faultloggerd_client/faultloggerd_socket.cpp +++ b/interfaces/innerkits/faultloggerd_client/faultloggerd_socket.cpp @@ -47,6 +47,7 @@ static bool GetServerSocket(int32_t& sockFd, const char* name) DFXLOGE("%{public}s :: Failed to create socket, errno(%{public}d)", __func__, errno); return false; } + fdsan_exchange_owner_tag(sockFd, 0, fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN)); std::string path = std::string(FAULTLOGGERD_SOCK_BASE_PATH) + std::string(name); struct sockaddr_un server{0}; @@ -91,7 +92,7 @@ bool StartListen(int32_t& sockFd, const char* name, uint32_t listenCnt) if (listen(sockFd, listenCnt) < 0) { DFXLOGE("%{public}s :: Failed to listen socket, errno(%{public}d)", __func__, errno); - close(sockFd); + fdsan_close_with_tag(sockFd, fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN)); sockFd = -1; return false; } @@ -129,6 +130,7 @@ bool FaultLoggerdSocket::CreateSocketFileDescriptor(uint32_t timeout) LOGE(signalSafely_, "%{public}s :: Failed to create socket, errno(%{public}d)", __func__, errno); return false; } + fdsan_exchange_owner_tag(socketFd_, 0, fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN)); if (timeout > 0) { SetSocketTimeOut(timeout, SO_RCVTIMEO); SetSocketTimeOut(timeout, SO_SNDTIMEO); @@ -139,7 +141,7 @@ bool FaultLoggerdSocket::CreateSocketFileDescriptor(uint32_t timeout) void FaultLoggerdSocket::CloseSocketFileDescriptor() { if (socketFd_ >= 0) { - close(socketFd_); + fdsan_close_with_tag(socketFd_, fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN)); socketFd_ = -1; } } diff --git a/interfaces/innerkits/unwinder/src/elf/elf_factory.cpp b/interfaces/innerkits/unwinder/src/elf/elf_factory.cpp index a39784e9c..1401558ca 100644 --- a/interfaces/innerkits/unwinder/src/elf/elf_factory.cpp +++ b/interfaces/innerkits/unwinder/src/elf/elf_factory.cpp @@ -151,6 +151,8 @@ std::shared_ptr RegularElfFactory::Create() DFXLOGE("Failed to open file: %{public}s, errno(%{public}d)", filePath_.c_str(), errno); return regularElf; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(fd, 0, ownerTag); do { auto size = static_cast(GetFileSize(fd)); auto mMap = std::make_shared(); @@ -160,7 +162,7 @@ std::shared_ptr RegularElfFactory::Create() } regularElf->SetMmap(mMap); } while (false); - close(fd); + fdsan_close_with_tag(fd, ownerTag); return regularElf; } @@ -212,6 +214,8 @@ std::shared_ptr CompressHapElfFactory::Create() DFXLOGE("Failed to open hap file, errno(%{public}d)", errno); return nullptr; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(fd, 0, ownerTag); std::shared_ptr compressHapElf = nullptr; do { size_t elfSize = 0; @@ -232,7 +236,7 @@ std::shared_ptr CompressHapElfFactory::Create() break; } } while (false); - close(fd); + fdsan_close_with_tag(fd, ownerTag); return compressHapElf; } diff --git a/services/fault_logger_service.cpp b/services/fault_logger_service.cpp index 77d419932..b00a811cb 100644 --- a/services/fault_logger_service.cpp +++ b/services/fault_logger_service.cpp @@ -238,13 +238,15 @@ int32_t FileDesService::OnRequest(const std::string& socketName, int32_t connect if (fd < 0) { return ResponseCode::ABNORMAL_SERVICE; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(fd, 0, ownerTag); #ifndef is_ohos_lite TempFileManager::RecordFileCreation(requestData.type, requestData.pid); #endif int32_t responseData = ResponseCode::REQUEST_SUCCESS; SendMsgToSocket(connectionFd, &responseData, sizeof(responseData)); SendFileDescriptorToSocket(connectionFd, &fd, 1); - close(fd); + fdsan_close_with_tag(fd, ownerTag); return responseData; } diff --git a/services/snapshot/kernel_snapshot_manager.cpp b/services/snapshot/kernel_snapshot_manager.cpp index 0da7f65fb..f1313db38 100644 --- a/services/snapshot/kernel_snapshot_manager.cpp +++ b/services/snapshot/kernel_snapshot_manager.cpp @@ -54,6 +54,8 @@ std::string KernelSnapshotManager::ReadKernelSnapshot() DFXLOGE("open snapshot filed %{public}d", errno); return ""; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(snapshotFd, 0, ownerTag); char buffer[BUFFER_LEN] = {0}; std::string snapshotCont; @@ -68,7 +70,7 @@ std::string KernelSnapshotManager::ReadKernelSnapshot() } } while (ret > 0); - close(snapshotFd); + fdsan_close_with_tag(snapshotFd, ownerTag); return snapshotCont; } diff --git a/tools/crash_validator/crash_validator.cpp b/tools/crash_validator/crash_validator.cpp index bec4ca856..8ae3048d9 100644 --- a/tools/crash_validator/crash_validator.cpp +++ b/tools/crash_validator/crash_validator.cpp @@ -277,6 +277,8 @@ void CrashValidator::ReadServiceCrashStatus() printf("Failed to open /dev/kmsg.\n"); return; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(fd, 0, ownerTag); lseek(fd, 0, 3); // 3 : SEEK_DATA while (true) { ssize_t len; @@ -285,7 +287,7 @@ void CrashValidator::ReadServiceCrashStatus() } if (len == -1 && errno == EINVAL) { printf("Failed to read kmsg\n"); - close(fd); + fdsan_close_with_tag(fd, ownerTag); return; } if (len < 1) { @@ -316,7 +318,7 @@ void CrashValidator::ReadServiceCrashStatus() HiSysEventWrite(HiSysEvent::Domain::STARTUP, KEY_PROCESS_EXIT, HiSysEvent::EventType::BEHAVIOR, KEY_NAME, name, KEY_PID, pid, KEY_UID, uid, KEY_STATUS, status); } - close(fd); + fdsan_close_with_tag(fd, ownerTag); } bool CrashValidator::ValidateLogContent(const CrashEvent& event) diff --git a/tools/crash_validator/crash_validator.h b/tools/crash_validator/crash_validator.h index e0d9f196d..61f4d7f40 100644 --- a/tools/crash_validator/crash_validator.h +++ b/tools/crash_validator/crash_validator.h @@ -22,6 +22,12 @@ #include "hisysevent_listener.h" +// defile Domain ID +#ifndef LOG_DOMAIN +#undef LOG_DOMAIN +#endif +#define LOG_DOMAIN 0xC02D11 + namespace OHOS { namespace HiviewDFX { class CrashEvent { diff --git a/tools/process_dump/cppcrash_reporter.cpp b/tools/process_dump/cppcrash_reporter.cpp index 0c0d9b6b0..35daf8de2 100644 --- a/tools/process_dump/cppcrash_reporter.cpp +++ b/tools/process_dump/cppcrash_reporter.cpp @@ -120,6 +120,9 @@ int32_t CppCrashReporter::WriteCppCrashInfoByPipe() DFXLOGE("Failed to create pipe."); return -1; } + uint64_t ownerTag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, LOG_DOMAIN); + fdsan_exchange_owner_tag(pipeFd[PIPE_READ], 0, ownerTag); + fdsan_exchange_owner_tag(pipeFd[PIPE_WRITE], 0, ownerTag); if (fcntl(pipeFd[PIPE_READ], F_SETPIPE_SZ, sz) < 0 || fcntl(pipeFd[PIPE_WRITE], F_SETPIPE_SZ, sz) < 0) { DFXLOGE("[%{public}d]: failed to set pipe size.", __LINE__); @@ -137,10 +140,10 @@ int32_t CppCrashReporter::WriteCppCrashInfoByPipe() } ssize_t realWriteSize = -1; realWriteSize = OHOS_TEMP_FAILURE_RETRY(write(pipeFd[PIPE_WRITE], cppCrashInfo_.c_str(), sz)); - close(pipeFd[PIPE_WRITE]); + fdsan_close_with_tag(pipeFd[PIPE_WRITE], ownerTag); if (static_cast(cppCrashInfo_.size()) != realWriteSize) { DFXLOGE("Failed to write pipe. realWriteSize %{public}zd, json size %{public}zd", realWriteSize, sz); - close(pipeFd[PIPE_READ]); + fdsan_close_with_tag(pipeFd[PIPE_READ], ownerTag); return -1; } return pipeFd[PIPE_READ]; -- Gitee