diff --git a/display/composer/v1_0/display_command/display_cmd_responser.h b/display/composer/v1_0/display_command/display_cmd_responser.h index 7ee4cd77c249370cf071735e1d6cfc4fff44b280..91a85e7db079d661b2a4a316b791f1e35c0b5e50 100755 --- a/display/composer/v1_0/display_command/display_cmd_responser.h +++ b/display/composer/v1_0/display_command/display_cmd_responser.h @@ -25,6 +25,7 @@ #include #include #include +#include #include "base/hdi_smq.h" #include "buffer_handle_utils.h" @@ -41,6 +42,7 @@ #include "v1_0/mapper_stub.h" #define DISPLAY_TRACE HdfTrace trace(__func__, "HDI:DISP:") +#define BAD_FD_CODE (-1) namespace OHOS { namespace HDI { @@ -403,6 +405,16 @@ EXIT: if (data.fence > ERROR_FENCE_COUNT) { HDF_LOGI("SetDisplayClientBuffer: %{public}s", traceMsg.c_str()); } + + if (fcntl(handle.fd, F_GETFD) == BAD_FD_CODE) { + HDF_LOGE("%{public}s: handle.fd %{public}d is bad fd", __func__, handle.fd); + return HDF_FAILURE; + } + if (fcntl(fd, F_GETFD) == BAD_FD_CODE) { + HDF_LOGE("%{public}s: fd %{public}d is bad fd", __func__, fd); + return HDF_FAILURE; + } + HdfTrace traceVdi("SetDisplayClientBuffer", traceMsg); needMoveFd = true; int rc = impl_->SetDisplayClientBuffer(data.devId, handle, fd); @@ -858,6 +870,16 @@ EXIT: } HdfTrace traceVdi("SetLayerBuffer", traceMsg); needMoveFd = true; + + if (fcntl(handle.fd, F_GETFD) == BAD_FD_CODE) { + HDF_LOGE("%{public}s: handle.fd %{public}d is bad fd", __func__, handle.fd); + return HDF_FAILURE; + } + if (fcntl(fd, F_GETFD) == BAD_FD_CODE) { + HDF_LOGE("%{public}s: fd %{public}d is bad fd", __func__, fd); + return HDF_FAILURE; + } + int rc = impl_->SetLayerBuffer(data.devId, data.layerId, handle, fd); DISPLAY_CHK_RETURN(rc != HDF_SUCCESS, HDF_FAILURE, HDF_LOGE(" fail")); return HDF_SUCCESS;