From e1fb19e218298e32d52ae029fe43935c64ff4729 Mon Sep 17 00:00:00 2001 From: luzhiye Date: Wed, 9 Jul 2025 11:22:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=96=E8=AE=BE=E4=BB=A3=E7=A0=81=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E8=B4=A8=E9=87=8F=E5=8A=A0=E5=9B=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: luzhiye --- frameworks/ddk/scsi/scsi_ddk_api.cpp | 31 ++++++++++++++++++++++------ frameworks/ddk/usb/usb_ddk_api.cpp | 1 + 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/frameworks/ddk/scsi/scsi_ddk_api.cpp b/frameworks/ddk/scsi/scsi_ddk_api.cpp index 961ce7a..5cb1cef 100644 --- a/frameworks/ddk/scsi/scsi_ddk_api.cpp +++ b/frameworks/ddk/scsi/scsi_ddk_api.cpp @@ -423,6 +423,10 @@ int32_t OH_ScsiPeripheral_Inquiry(ScsiPeripheral_Device *dev, ScsiPeripheral_Inq EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "copy revProduct failed"); return SCSIPERIPHERAL_DDK_MEMORY_ERROR; } + if (hdiResponse.transferredLength < 0) { + EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "transferredLength is invalid: %{public}d", hdiResponse.transferredLength); + return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; + } inquiryInfo->data->transferredLength = static_cast(hdiResponse.transferredLength); return CopyResponse(hdiResponse, response); @@ -490,7 +494,7 @@ int32_t OH_ScsiPeripheral_Read10(ScsiPeripheral_Device *dev, ScsiPeripheral_IORe EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "invalid obj"); return SCSIPERIPHERAL_DDK_INIT_ERROR; } - if (dev == nullptr || request == nullptr || request->data ==nullptr || response == nullptr) { + if (dev == nullptr || request == nullptr || request->data == nullptr || response == nullptr) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "param is null"); return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; } @@ -501,11 +505,16 @@ int32_t OH_ScsiPeripheral_Read10(ScsiPeripheral_Device *dev, ScsiPeripheral_IORe hdiResponse.senseData.resize(sizeof(response->senseData)); int32_t ret = TransToDdkErrCode(g_ddk->Read10(dev->impl, hdiIORequest, hdiResponse)); - if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { + if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "read10 failed"); return ret; } + if (hdiResponse.transferredLength < 0) { + EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "transferredLength is invalid: %{public}d", hdiResponse.transferredLength); + return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; + } + request->data->transferredLength = static_cast(hdiResponse.transferredLength); return CopyResponse(hdiResponse, response); @@ -518,7 +527,7 @@ int32_t OH_ScsiPeripheral_Write10(ScsiPeripheral_Device *dev, ScsiPeripheral_IOR EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "invalid obj"); return SCSIPERIPHERAL_DDK_INIT_ERROR; } - if (dev == nullptr || request == nullptr || request->data ==nullptr || response == nullptr) { + if (dev == nullptr || request == nullptr || request->data == nullptr || response == nullptr) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "param is null"); return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; } @@ -529,11 +538,16 @@ int32_t OH_ScsiPeripheral_Write10(ScsiPeripheral_Device *dev, ScsiPeripheral_IOR hdiResponse.senseData.resize(sizeof(response->senseData)); int32_t ret = TransToDdkErrCode(g_ddk->Write10(dev->impl, hdiIORequest, hdiResponse)); - if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { + if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "write10 failed"); return ret; } + if (hdiResponse.transferredLength < 0) { + EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "transferredLength is invalid: %{public}d", hdiResponse.transferredLength); + return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; + } + request->data->transferredLength = static_cast(hdiResponse.transferredLength); return CopyResponse(hdiResponse, response); @@ -578,7 +592,7 @@ int32_t OH_ScsiPeripheral_SendRequestByCdb(ScsiPeripheral_Device *dev, ScsiPerip EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "invalid obj"); return SCSIPERIPHERAL_DDK_INIT_ERROR; } - if (dev == nullptr || request == nullptr || request->data ==nullptr || response == nullptr) { + if (dev == nullptr || request == nullptr || request->data == nullptr || response == nullptr) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "param is null"); return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; } @@ -597,11 +611,16 @@ int32_t OH_ScsiPeripheral_SendRequestByCdb(ScsiPeripheral_Device *dev, ScsiPerip hdiResponse.senseData.resize(sizeof(response->senseData)); int32_t ret = TransToDdkErrCode(g_ddk->SendRequestByCDB(dev->impl, hdiRequest, hdiResponse)); - if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { + if (ret != SCSIPERIPHERAL_DDK_SUCCESS) { EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "send request by cdb failed"); return ret; } + if (hdiResponse.transferredLength < 0) { + EDM_LOGE(MODULE_SCSIPERIPHERAL_DDK, "transferredLength is invalid: %{public}d", hdiResponse.transferredLength); + return SCSIPERIPHERAL_DDK_INVALID_PARAMETER; + } + request->data->transferredLength = static_cast(hdiResponse.transferredLength); return CopyResponse(hdiResponse, response); diff --git a/frameworks/ddk/usb/usb_ddk_api.cpp b/frameworks/ddk/usb/usb_ddk_api.cpp index da30672..a2fa706 100644 --- a/frameworks/ddk/usb/usb_ddk_api.cpp +++ b/frameworks/ddk/usb/usb_ddk_api.cpp @@ -314,6 +314,7 @@ void OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap *devMmap) return; } delete devMmap; + devMmap = nullptr; } int32_t OH_Usb_GetDevices(struct Usb_DeviceArray *devices) -- Gitee