diff options
Diffstat (limited to 'security/tomoyo/realpath.c')
-rw-r--r-- | security/tomoyo/realpath.c | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c index 6c601bd300f3..738bbdf8d4c7 100644 --- a/security/tomoyo/realpath.c +++ b/security/tomoyo/realpath.c | |||
@@ -15,17 +15,19 @@ | |||
15 | #include "../../fs/internal.h" | 15 | #include "../../fs/internal.h" |
16 | 16 | ||
17 | /** | 17 | /** |
18 | * tomoyo_encode: Convert binary string to ascii string. | 18 | * tomoyo_encode2 - Encode binary string to ascii string. |
19 | * | 19 | * |
20 | * @str: String in binary format. | 20 | * @str: String in binary format. |
21 | * @str_len: Size of @str in byte. | ||
21 | * | 22 | * |
22 | * Returns pointer to @str in ascii format on success, NULL otherwise. | 23 | * Returns pointer to @str in ascii format on success, NULL otherwise. |
23 | * | 24 | * |
24 | * This function uses kzalloc(), so caller must kfree() if this function | 25 | * This function uses kzalloc(), so caller must kfree() if this function |
25 | * didn't return NULL. | 26 | * didn't return NULL. |
26 | */ | 27 | */ |
27 | char *tomoyo_encode(const char *str) | 28 | char *tomoyo_encode2(const char *str, int str_len) |
28 | { | 29 | { |
30 | int i; | ||
29 | int len = 0; | 31 | int len = 0; |
30 | const char *p = str; | 32 | const char *p = str; |
31 | char *cp; | 33 | char *cp; |
@@ -33,8 +35,9 @@ char *tomoyo_encode(const char *str) | |||
33 | 35 | ||
34 | if (!p) | 36 | if (!p) |
35 | return NULL; | 37 | return NULL; |
36 | while (*p) { | 38 | for (i = 0; i < str_len; i++) { |
37 | const unsigned char c = *p++; | 39 | const unsigned char c = p[i]; |
40 | |||
38 | if (c == '\\') | 41 | if (c == '\\') |
39 | len += 2; | 42 | len += 2; |
40 | else if (c > ' ' && c < 127) | 43 | else if (c > ' ' && c < 127) |
@@ -49,8 +52,8 @@ char *tomoyo_encode(const char *str) | |||
49 | return NULL; | 52 | return NULL; |
50 | cp0 = cp; | 53 | cp0 = cp; |
51 | p = str; | 54 | p = str; |
52 | while (*p) { | 55 | for (i = 0; i < str_len; i++) { |
53 | const unsigned char c = *p++; | 56 | const unsigned char c = p[i]; |
54 | 57 | ||
55 | if (c == '\\') { | 58 | if (c == '\\') { |
56 | *cp++ = '\\'; | 59 | *cp++ = '\\'; |
@@ -68,6 +71,21 @@ char *tomoyo_encode(const char *str) | |||
68 | } | 71 | } |
69 | 72 | ||
70 | /** | 73 | /** |
74 | * tomoyo_encode - Encode binary string to ascii string. | ||
75 | * | ||
76 | * @str: String in binary format. | ||
77 | * | ||
78 | * Returns pointer to @str in ascii format on success, NULL otherwise. | ||
79 | * | ||
80 | * This function uses kzalloc(), so caller must kfree() if this function | ||
81 | * didn't return NULL. | ||
82 | */ | ||
83 | char *tomoyo_encode(const char *str) | ||
84 | { | ||
85 | return str ? tomoyo_encode2(str, strlen(str)) : NULL; | ||
86 | } | ||
87 | |||
88 | /** | ||
71 | * tomoyo_get_absolute_path - Get the path of a dentry but ignores chroot'ed root. | 89 | * tomoyo_get_absolute_path - Get the path of a dentry but ignores chroot'ed root. |
72 | * | 90 | * |
73 | * @path: Pointer to "struct path". | 91 | * @path: Pointer to "struct path". |