|
@@ -141,23 +141,22 @@ static int valid_ecryptfs_desc(const char *ecryptfs_desc)
|
|
|
*/
|
|
|
static int valid_master_desc(const char *new_desc, const char *orig_desc)
|
|
|
{
|
|
|
- if (!memcmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN)) {
|
|
|
- if (strlen(new_desc) == KEY_TRUSTED_PREFIX_LEN)
|
|
|
- goto out;
|
|
|
- if (orig_desc)
|
|
|
- if (memcmp(new_desc, orig_desc, KEY_TRUSTED_PREFIX_LEN))
|
|
|
- goto out;
|
|
|
- } else if (!memcmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN)) {
|
|
|
- if (strlen(new_desc) == KEY_USER_PREFIX_LEN)
|
|
|
- goto out;
|
|
|
- if (orig_desc)
|
|
|
- if (memcmp(new_desc, orig_desc, KEY_USER_PREFIX_LEN))
|
|
|
- goto out;
|
|
|
- } else
|
|
|
- goto out;
|
|
|
+ int prefix_len;
|
|
|
+
|
|
|
+ if (!strncmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN))
|
|
|
+ prefix_len = KEY_TRUSTED_PREFIX_LEN;
|
|
|
+ else if (!strncmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN))
|
|
|
+ prefix_len = KEY_USER_PREFIX_LEN;
|
|
|
+ else
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (!new_desc[prefix_len])
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (orig_desc && strncmp(new_desc, orig_desc, prefix_len))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
return 0;
|
|
|
-out:
|
|
|
- return -EINVAL;
|
|
|
}
|
|
|
|
|
|
/*
|