TEE_Result TEE_SeekObjectData(TEE_ObjectHandle object, int32_t offset, TEE_Whence whence) { TEE_Result res; TEE_ObjectInfo info; if (object == TEE_HANDLE_NULL) { res = TEE_ERROR_BAD_PARAMETERS; goto out; } res = utee_cryp_obj_get_info((unsigned long)object, &info); if (res != TEE_SUCCESS) goto out; switch (whence) { case TEE_DATA_SEEK_SET: if (offset > 0 && (uint32_t)offset > TEE_DATA_MAX_POSITION) { res = TEE_ERROR_OVERFLOW; goto out; } break; case TEE_DATA_SEEK_CUR: if (offset > 0 && ((uint32_t)offset + info.dataPosition > TEE_DATA_MAX_POSITION || (uint32_t)offset + info.dataPosition < info.dataPosition)) { res = TEE_ERROR_OVERFLOW; goto out; } break; case TEE_DATA_SEEK_END: if (offset > 0 && ((uint32_t)offset + info.dataSize > TEE_DATA_MAX_POSITION || (uint32_t)offset + info.dataSize < info.dataSize)) { res = TEE_ERROR_OVERFLOW; goto out; } break; default: res = TEE_ERROR_ITEM_NOT_FOUND; goto out; } res = utee_storage_obj_seek((unsigned long)object, offset, whence); out: if (res != TEE_SUCCESS && res != TEE_ERROR_OVERFLOW && res != TEE_ERROR_CORRUPT_OBJECT && res != TEE_ERROR_STORAGE_NOT_AVAILABLE) TEE_Panic(0); return res; }
TEE_Result TEE_SeekObjectData(TEE_ObjectHandle object, int32_t offset, TEE_Whence whence) { TEE_Result res; TEE_ObjectInfo info; if (object == TEE_HANDLE_NULL) TEE_Panic(0); res = utee_cryp_obj_get_info((uint32_t)object, &info); if (res != TEE_SUCCESS) TEE_Panic(0); switch (whence) { case TEE_DATA_SEEK_SET: if (offset > 0 && (uint32_t)offset > TEE_DATA_MAX_POSITION) return TEE_ERROR_OVERFLOW; break; case TEE_DATA_SEEK_CUR: if (offset > 0 && ((uint32_t)offset + info.dataPosition > TEE_DATA_MAX_POSITION || (uint32_t)offset + info.dataPosition < info.dataPosition)) return TEE_ERROR_OVERFLOW; break; case TEE_DATA_SEEK_END: if (offset > 0 && ((uint32_t)offset + info.dataSize > TEE_DATA_MAX_POSITION || (uint32_t)offset + info.dataSize < info.dataSize)) return TEE_ERROR_OVERFLOW; break; default: TEE_Panic(0); } res = utee_storage_obj_seek(object, offset, whence); if (res != TEE_SUCCESS && res != TEE_ERROR_OVERFLOW) TEE_Panic(0); return res; }