diff --git a/utils/common/src/file_utils.cpp b/utils/common/src/file_utils.cpp index 26400bf5f29381bd1cebc6f8ebba1bf0258ed098..fff2eacc41fa6d20e4977c3e3dc98ebaefb379ec 100755 --- a/utils/common/src/file_utils.cpp +++ b/utils/common/src/file_utils.cpp @@ -193,8 +193,17 @@ std::string ReadFd(const RawFileDescriptor &rawFd) MISC_HILOGE("length is invalid, length:%{public}" PRId64, rawFd.length); return {}; } - FILE *fp = fdopen(rawFd.fd, "r"); - CHKPS(fp); + int dupFd = dup(rawFd.fd); + if (dupFd < 0) { + MISC_HILOGE("dup fd failed, fd:%{public}d, errno:%{public}d", rawFd.fd, errno); + return {}; + } + FILE *fp = fdopen(dupFd, "r"); + if (fp == nullptr) { + MISC_HILOGE("fdopen failed, fd:%{public}d, errno:%{public}d", dupFd, errno); + close(dupFd); + return {}; + } if (fseek(fp, rawFd.offset, SEEK_SET) != 0) { MISC_HILOGE("fseek failed, errno:%{public}d", errno); if (fclose(fp) != 0) {