Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/fs/ecryptfs/debug.c
15111 views
1
/**
2
* eCryptfs: Linux filesystem encryption layer
3
* Functions only useful for debugging.
4
*
5
* Copyright (C) 2006 International Business Machines Corp.
6
* Author(s): Michael A. Halcrow <[email protected]>
7
*
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License as
10
* published by the Free Software Foundation; either version 2 of the
11
* License, or (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21
* 02111-1307, USA.
22
*/
23
24
#include "ecryptfs_kernel.h"
25
26
/**
27
* ecryptfs_dump_auth_tok - debug function to print auth toks
28
*
29
* This function will print the contents of an ecryptfs authentication
30
* token.
31
*/
32
void ecryptfs_dump_auth_tok(struct ecryptfs_auth_tok *auth_tok)
33
{
34
char salt[ECRYPTFS_SALT_SIZE * 2 + 1];
35
char sig[ECRYPTFS_SIG_SIZE_HEX + 1];
36
37
ecryptfs_printk(KERN_DEBUG, "Auth tok at mem loc [%p]:\n",
38
auth_tok);
39
if (auth_tok->flags & ECRYPTFS_PRIVATE_KEY) {
40
ecryptfs_printk(KERN_DEBUG, " * private key type\n");
41
} else {
42
ecryptfs_printk(KERN_DEBUG, " * passphrase type\n");
43
ecryptfs_to_hex(salt, auth_tok->token.password.salt,
44
ECRYPTFS_SALT_SIZE);
45
salt[ECRYPTFS_SALT_SIZE * 2] = '\0';
46
ecryptfs_printk(KERN_DEBUG, " * salt = [%s]\n", salt);
47
if (auth_tok->token.password.flags &
48
ECRYPTFS_PERSISTENT_PASSWORD) {
49
ecryptfs_printk(KERN_DEBUG, " * persistent\n");
50
}
51
memcpy(sig, auth_tok->token.password.signature,
52
ECRYPTFS_SIG_SIZE_HEX);
53
sig[ECRYPTFS_SIG_SIZE_HEX] = '\0';
54
ecryptfs_printk(KERN_DEBUG, " * signature = [%s]\n", sig);
55
}
56
ecryptfs_printk(KERN_DEBUG, " * session_key.flags = [0x%x]\n",
57
auth_tok->session_key.flags);
58
if (auth_tok->session_key.flags
59
& ECRYPTFS_USERSPACE_SHOULD_TRY_TO_DECRYPT)
60
ecryptfs_printk(KERN_DEBUG,
61
" * Userspace decrypt request set\n");
62
if (auth_tok->session_key.flags
63
& ECRYPTFS_USERSPACE_SHOULD_TRY_TO_ENCRYPT)
64
ecryptfs_printk(KERN_DEBUG,
65
" * Userspace encrypt request set\n");
66
if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_DECRYPTED_KEY) {
67
ecryptfs_printk(KERN_DEBUG, " * Contains decrypted key\n");
68
ecryptfs_printk(KERN_DEBUG,
69
" * session_key.decrypted_key_size = [0x%x]\n",
70
auth_tok->session_key.decrypted_key_size);
71
ecryptfs_printk(KERN_DEBUG, " * Decrypted session key "
72
"dump:\n");
73
if (ecryptfs_verbosity > 0)
74
ecryptfs_dump_hex(auth_tok->session_key.decrypted_key,
75
ECRYPTFS_DEFAULT_KEY_BYTES);
76
}
77
if (auth_tok->session_key.flags & ECRYPTFS_CONTAINS_ENCRYPTED_KEY) {
78
ecryptfs_printk(KERN_DEBUG, " * Contains encrypted key\n");
79
ecryptfs_printk(KERN_DEBUG,
80
" * session_key.encrypted_key_size = [0x%x]\n",
81
auth_tok->session_key.encrypted_key_size);
82
ecryptfs_printk(KERN_DEBUG, " * Encrypted session key "
83
"dump:\n");
84
if (ecryptfs_verbosity > 0)
85
ecryptfs_dump_hex(auth_tok->session_key.encrypted_key,
86
auth_tok->session_key.
87
encrypted_key_size);
88
}
89
}
90
91
/**
92
* ecryptfs_dump_hex - debug hex printer
93
* @data: string of bytes to be printed
94
* @bytes: number of bytes to print
95
*
96
* Dump hexadecimal representation of char array
97
*/
98
void ecryptfs_dump_hex(char *data, int bytes)
99
{
100
int i = 0;
101
int add_newline = 1;
102
103
if (ecryptfs_verbosity < 1)
104
return;
105
if (bytes != 0) {
106
printk(KERN_DEBUG "0x%.2x.", (unsigned char)data[i]);
107
i++;
108
}
109
while (i < bytes) {
110
printk("0x%.2x.", (unsigned char)data[i]);
111
i++;
112
if (i % 16 == 0) {
113
printk("\n");
114
add_newline = 0;
115
} else
116
add_newline = 1;
117
}
118
if (add_newline)
119
printk("\n");
120
}
121
122
123