xref: /kernel/linux/linux-6.6/fs/ecryptfs/debug.c (revision 62306a36)
162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * eCryptfs: Linux filesystem encryption layer
462306a36Sopenharmony_ci * Functions only useful for debugging.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2006 International Business Machines Corp.
762306a36Sopenharmony_ci *   Author(s): Michael A. Halcrow <mahalcro@us.ibm.com>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "ecryptfs_kernel.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * ecryptfs_dump_auth_tok - debug function to print auth toks
1462306a36Sopenharmony_ci *
1562306a36Sopenharmony_ci * This function will print the contents of an ecryptfs authentication
1662306a36Sopenharmony_ci * token.
1762306a36Sopenharmony_ci */
1862306a36Sopenharmony_civoid ecryptfs_dump_auth_tok(struct ecryptfs_auth_tok *auth_tok)
1962306a36Sopenharmony_ci{
2062306a36Sopenharmony_ci	char salt[ECRYPTFS_SALT_SIZE * 2 + 1];
2162306a36Sopenharmony_ci	char sig[ECRYPTFS_SIG_SIZE_HEX + 1];
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	ecryptfs_printk(KERN_DEBUG, "Auth tok at mem loc [%p]:\n",
2462306a36Sopenharmony_ci			auth_tok);
2562306a36Sopenharmony_ci	if (auth_tok->flags & ECRYPTFS_PRIVATE_KEY) {
2662306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * private key type\n");
2762306a36Sopenharmony_ci	} else {
2862306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * passphrase type\n");
2962306a36Sopenharmony_ci		ecryptfs_to_hex(salt, auth_tok->token.password.salt,
3062306a36Sopenharmony_ci				ECRYPTFS_SALT_SIZE);
3162306a36Sopenharmony_ci		salt[ECRYPTFS_SALT_SIZE * 2] = '\0';
3262306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * salt = [%s]\n", salt);
3362306a36Sopenharmony_ci		if (auth_tok->token.password.flags &
3462306a36Sopenharmony_ci		    ECRYPTFS_PERSISTENT_PASSWORD) {
3562306a36Sopenharmony_ci			ecryptfs_printk(KERN_DEBUG, " * persistent\n");
3662306a36Sopenharmony_ci		}
3762306a36Sopenharmony_ci		memcpy(sig, auth_tok->token.password.signature,
3862306a36Sopenharmony_ci		       ECRYPTFS_SIG_SIZE_HEX);
3962306a36Sopenharmony_ci		sig[ECRYPTFS_SIG_SIZE_HEX] = '\0';
4062306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * signature = [%s]\n", sig);
4162306a36Sopenharmony_ci	}
4262306a36Sopenharmony_ci	ecryptfs_printk(KERN_DEBUG, " * session_key.flags = [0x%x]\n",
4362306a36Sopenharmony_ci			auth_tok->session_key.flags);
4462306a36Sopenharmony_ci	if (auth_tok->session_key.flags
4562306a36Sopenharmony_ci	    & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_DECRYPT)
4662306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG,
4762306a36Sopenharmony_ci				" * Userspace decrypt request set\n");
4862306a36Sopenharmony_ci	if (auth_tok->session_key.flags
4962306a36Sopenharmony_ci	    & ECRYPTFS_USERSPACE_SHOULD_TRY_TO_ENCRYPT)
5062306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG,
5162306a36Sopenharmony_ci				" * Userspace encrypt request set\n");
5262306a36Sopenharmony_ci	if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_DECRYPTED_KEY) {
5362306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * Contains decrypted key\n");
5462306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG,
5562306a36Sopenharmony_ci				" * session_key.decrypted_key_size = [0x%x]\n",
5662306a36Sopenharmony_ci				auth_tok->session_key.decrypted_key_size);
5762306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * Decrypted session key "
5862306a36Sopenharmony_ci				"dump:\n");
5962306a36Sopenharmony_ci		if (ecryptfs_verbosity > 0)
6062306a36Sopenharmony_ci			ecryptfs_dump_hex(auth_tok->session_key.decrypted_key,
6162306a36Sopenharmony_ci					  ECRYPTFS_DEFAULT_KEY_BYTES);
6262306a36Sopenharmony_ci	}
6362306a36Sopenharmony_ci	if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_ENCRYPTED_KEY) {
6462306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * Contains encrypted key\n");
6562306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG,
6662306a36Sopenharmony_ci				" * session_key.encrypted_key_size = [0x%x]\n",
6762306a36Sopenharmony_ci				auth_tok->session_key.encrypted_key_size);
6862306a36Sopenharmony_ci		ecryptfs_printk(KERN_DEBUG, " * Encrypted session key "
6962306a36Sopenharmony_ci				"dump:\n");
7062306a36Sopenharmony_ci		if (ecryptfs_verbosity > 0)
7162306a36Sopenharmony_ci			ecryptfs_dump_hex(auth_tok->session_key.encrypted_key,
7262306a36Sopenharmony_ci					  auth_tok->session_key.
7362306a36Sopenharmony_ci					  encrypted_key_size);
7462306a36Sopenharmony_ci	}
7562306a36Sopenharmony_ci}
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/**
7862306a36Sopenharmony_ci * ecryptfs_dump_hex - debug hex printer
7962306a36Sopenharmony_ci * @data: string of bytes to be printed
8062306a36Sopenharmony_ci * @bytes: number of bytes to print
8162306a36Sopenharmony_ci *
8262306a36Sopenharmony_ci * Dump hexadecimal representation of char array
8362306a36Sopenharmony_ci */
8462306a36Sopenharmony_civoid ecryptfs_dump_hex(char *data, int bytes)
8562306a36Sopenharmony_ci{
8662306a36Sopenharmony_ci	if (ecryptfs_verbosity < 1)
8762306a36Sopenharmony_ci		return;
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci	print_hex_dump(KERN_DEBUG, "ecryptfs: ", DUMP_PREFIX_OFFSET, 16, 1,
9062306a36Sopenharmony_ci		       data, bytes, false);
9162306a36Sopenharmony_ci}
92