Commit ff0b9aba authored by Joey Gouly's avatar Joey Gouly Committed by Will Deacon
Browse files

kselftest/arm64: mte: user_mem: rework error handling



Future commits will have multiple iterations of tests in this function,
so make the error handling assume it will pass and then bail out if there
is an error.

Signed-off-by: default avatarJoey Gouly <joey.gouly@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Reviewed-by: default avatarMark Brown <broonie@kernel.org>
Tested-by: default avatarMark Brown <broonie@kernel.org>
Reviewed-by: default avatarShuah Khan <skhan@linuxfoundation.org>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220209152240.52788-3-joey.gouly@arm.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent d53f8f8d
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ static int check_usermem_access_fault(int mem_type, int mode, int mapping,
	size_t len, read_len;
	void *ptr, *ptr_next;

	err = KSFT_FAIL;
	err = KSFT_PASS;
	len = 2 * page_sz;
	mte_switch_mode(mode, MTE_ALLOW_NON_ZERO_TAG);
	fd = create_temp_file();
@@ -71,14 +71,22 @@ static int check_usermem_access_fault(int mem_type, int mode, int mapping,
	 * mode without fault but may not fail in async mode as per the
	 * implemented MTE userspace support in Arm64 kernel.
	 */
	if (mode == MTE_SYNC_ERR &&
	    !cur_mte_cxt.fault_valid && read_len < len) {
		err = KSFT_PASS;
	} else if (mode == MTE_ASYNC_ERR &&
		   !cur_mte_cxt.fault_valid && read_len == len) {
		err = KSFT_PASS;
	if (cur_mte_cxt.fault_valid)
		goto usermem_acc_err;

	if (mode == MTE_SYNC_ERR && read_len < len) {
		/* test passed */
	} else if (mode == MTE_ASYNC_ERR && read_len == len) {
		/* test passed */
	} else {
		goto usermem_acc_err;
	}

	goto exit;

usermem_acc_err:
	err = KSFT_FAIL;
exit:
	mte_free_memory((void *)ptr, len, mem_type, true);
	close(fd);
	return err;