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". |
