diff --git a/model/usb/device/f_generic.c b/model/usb/device/f_generic.c index 6878c95797b997e83e6a7d3ebd36f86efc22652b..5b888964cc7fad25598f554147ad8039a07be115 100644 --- a/model/usb/device/f_generic.c +++ b/model/usb/device/f_generic.c @@ -2805,6 +2805,7 @@ static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type, { struct ffs_function *func = priv; u8 length = 0; + int ret; switch (type) { case FFS_OS_DESC_EXT_COMPAT: { @@ -2813,10 +2814,15 @@ static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type, t = &func->function.os_desc_table[desc->bFirstInterfaceNumber]; t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber]; - memcpy_s(t->os_desc->ext_compat_id, ARRAY_SIZE(desc->CompatibleID) + + ret = memcpy_s(t->os_desc->ext_compat_id, ARRAY_SIZE(desc->CompatibleID) + ARRAY_SIZE(desc->SubCompatibleID), &desc->CompatibleID, ARRAY_SIZE(desc->CompatibleID) + ARRAY_SIZE(desc->SubCompatibleID)); + if (ret != EOK) { + HDF_LOGE("%{public}s:%{public}d memcpy_s failed", __func__, __LINE__); + return ret; + } + length = sizeof(*desc); } break; @@ -2846,9 +2852,14 @@ static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type, ext_prop_data = func->ffs->ms_os_descs_ext_prop_data_avail; func->ffs->ms_os_descs_ext_prop_data_avail += ext_prop->data_len; - memcpy_s(ext_prop_data, ext_prop->data_len, + ret = memcpy_s(ext_prop_data, ext_prop->data_len, usb_ext_prop_data_ptr(data, ext_prop->name_len), ext_prop->data_len); + if (ret != EOK) { + HDF_LOGE("%{public}s:%{public}d memcpy_s failed", __func__, __LINE__); + return ret; + } + /* unicode data reported to the host as "WCHAR"s */ switch (ext_prop->type) { case USB_EXT_PROP_UNICODE: @@ -2860,8 +2871,13 @@ static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type, } ext_prop->data = ext_prop_data; - memcpy_s(ext_prop_name, ext_prop->name_len, usb_ext_prop_name_ptr(data), + ret = memcpy_s(ext_prop_name, ext_prop->name_len, usb_ext_prop_name_ptr(data), ext_prop->name_len); + if (ret != EOK) { + HDF_LOGE("%{public}s:%{public}d memcpy_s failed", __func__, __LINE__); + return ret; + } + /* property name reported to the host as "WCHAR"s */ ext_prop->name_len *= 2; ext_prop->name = ext_prop_name; diff --git a/model/usb/device/u_os_desc.h b/model/usb/device/u_os_desc.h index c828bf570ecd147b8069419bc0203745cd6d2410..9918a96f158b55364470b91cbd995e52ff4f3813 100755 --- a/model/usb/device/u_os_desc.h +++ b/model/usb/device/u_os_desc.h @@ -97,8 +97,12 @@ static inline int usb_ext_prop_put_name(u8 *buf, const char *name, int pnl) static inline void usb_ext_prop_put_binary(u8 *buf, int pnl, const u8 *data, int data_len) { + int32_t ret; put_unaligned_le32(data_len, usb_ext_prop_data_len_ptr(buf, pnl)); - memcpy_s(usb_ext_prop_data_ptr(buf, pnl), data_len, data, data_len); + ret = memcpy_s(usb_ext_prop_data_ptr(buf, pnl), data_len, data, data_len); + if (ret != EOK) { + HDF_LOGE("%{public}s: %{public}d memcpy_s failed", __func__, __LINE__); + } } static inline int usb_ext_prop_put_unicode(u8 *buf, int pnl, const char *string,