diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index 52b394cf96ca61298dec58287433af5998101533..8662003e3d39474df34e6c54b13eb7770514cd3e 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -781,7 +781,7 @@ int armv7m_blank_check_memory(struct target *target,
 	retval = target_write_buffer(target, erase_check_algorithm->address,
 			sizeof(erase_check_code), (uint8_t *)erase_check_code);
 	if (retval != ERROR_OK)
-		return retval;
+		goto cleanup;
 
 	armv7m_info.common_magic = ARMV7M_COMMON_MAGIC;
 	armv7m_info.core_mode = ARM_MODE_THREAD;
@@ -812,6 +812,7 @@ int armv7m_blank_check_memory(struct target *target,
 	destroy_reg_param(&reg_params[1]);
 	destroy_reg_param(&reg_params[2]);
 
+cleanup:
 	target_free_working_area(target, erase_check_algorithm);
 
 	return retval;