fscrypto: make filename crypto functions return 0 on success
Several filename crypto functions: fname_decrypt(), fscrypt_fname_disk_to_usr(), and fscrypt_fname_usr_to_disk(), returned the output length on success or -errno on failure. However, the output length was redundant with the value written to 'oname->len'. It is also potentially error-prone to make callers have to check for '< 0' instead of '!= 0'. Therefore, make these functions return 0 instead of a length, and make the callers who cared about the return value being a length use 'oname->len' instead. For consistency also make other callers check for a nonzero result rather than a negative result. This change also fixes the inconsistency of fname_encrypt() actually already returning 0 on success, not a length like the other filename crypto functions and as documented in its function comment. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Acked-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:

committed by
Theodore Ts'o

parent
53fd7550ec
commit
ef1eb3aa50
@@ -260,11 +260,12 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
|
||||
/* Directory is encrypted */
|
||||
err = fscrypt_fname_disk_to_usr(inode,
|
||||
0, 0, &de_name, &fstr);
|
||||
de_name = fstr;
|
||||
fstr.len = save_len;
|
||||
if (err < 0)
|
||||
if (err)
|
||||
goto errout;
|
||||
if (!dir_emit(ctx,
|
||||
fstr.name, err,
|
||||
de_name.name, de_name.len,
|
||||
le32_to_cpu(de->inode),
|
||||
get_dtype(sb, de->file_type)))
|
||||
goto done;
|
||||
|
@@ -639,7 +639,7 @@ static struct stats dx_show_leaf(struct inode *dir,
|
||||
res = fscrypt_fname_alloc_buffer(
|
||||
dir, len,
|
||||
&fname_crypto_str);
|
||||
if (res < 0)
|
||||
if (res)
|
||||
printk(KERN_WARNING "Error "
|
||||
"allocating crypto "
|
||||
"buffer--skipping "
|
||||
@@ -647,7 +647,7 @@ static struct stats dx_show_leaf(struct inode *dir,
|
||||
res = fscrypt_fname_disk_to_usr(dir,
|
||||
0, 0, &de_name,
|
||||
&fname_crypto_str);
|
||||
if (res < 0) {
|
||||
if (res) {
|
||||
printk(KERN_WARNING "Error "
|
||||
"converting filename "
|
||||
"from disk to usr"
|
||||
@@ -1011,7 +1011,7 @@ static int htree_dirblock_to_tree(struct file *dir_file,
|
||||
err = fscrypt_fname_disk_to_usr(dir, hinfo->hash,
|
||||
hinfo->minor_hash, &de_name,
|
||||
&fname_crypto_str);
|
||||
if (err < 0) {
|
||||
if (err) {
|
||||
count = err;
|
||||
goto errout;
|
||||
}
|
||||
@@ -3144,7 +3144,7 @@ static int ext4_symlink(struct inode *dir,
|
||||
istr.name = (const unsigned char *) symname;
|
||||
istr.len = len;
|
||||
err = fscrypt_fname_usr_to_disk(inode, &istr, &ostr);
|
||||
if (err < 0)
|
||||
if (err)
|
||||
goto err_drop_inode;
|
||||
sd->len = cpu_to_le16(ostr.len);
|
||||
disk_link.name = (char *) sd;
|
||||
|
@@ -68,12 +68,11 @@ static const char *ext4_encrypted_get_link(struct dentry *dentry,
|
||||
paddr = pstr.name;
|
||||
|
||||
res = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr);
|
||||
if (res < 0)
|
||||
if (res)
|
||||
goto errout;
|
||||
|
||||
/* Null-terminate the name */
|
||||
if (res <= pstr.len)
|
||||
paddr[res] = '\0';
|
||||
paddr[pstr.len] = '\0';
|
||||
if (cpage)
|
||||
put_page(cpage);
|
||||
set_delayed_call(done, kfree_link, paddr);
|
||||
|
Reference in New Issue
Block a user