diff options
author | Fabian Frederick <fabf@skynet.be> | 2015-04-08 21:23:57 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2015-05-18 11:23:06 +0200 |
commit | 6ce638367382ea8015cf64619e9bca4e207ef36f (patch) | |
tree | eb5b4c45bd2078e8a53994b6237a9969cd5c2c57 | |
parent | 5dce54b71e6185dae07ad12ca17ce30aa64022cd (diff) | |
download | op-kernel-dev-6ce638367382ea8015cf64619e9bca4e207ef36f.zip op-kernel-dev-6ce638367382ea8015cf64619e9bca4e207ef36f.tar.gz |
udf: Make udf_get_filename() return error instead of 0 length file name
Zero length file name isn't really valid. So check the length of the
final file name generated by udf_translate_to_linux() and return -EINVAL
instead of zero length file name. Update caller of udf_get_filename() to
not check for 0 return value.
Signed-off-by: Fabian Frederick <fabf@skynet.be>
Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r-- | fs/udf/dir.c | 2 | ||||
-rw-r--r-- | fs/udf/unicode.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/fs/udf/dir.c b/fs/udf/dir.c index fcf227e..541d9c6 100644 --- a/fs/udf/dir.c +++ b/fs/udf/dir.c @@ -168,7 +168,7 @@ static int udf_readdir(struct file *file, struct dir_context *ctx) } flen = udf_get_filename(sb, nameptr, lfi, fname, UDF_NAME_LEN); - if (flen <= 0) + if (flen < 0) continue; tloc = lelb_to_cpu(cfi.icb.extLocation); diff --git a/fs/udf/unicode.c b/fs/udf/unicode.c index 97b23b0..ab478e6 100644 --- a/fs/udf/unicode.c +++ b/fs/udf/unicode.c @@ -333,7 +333,7 @@ int udf_get_filename(struct super_block *sb, uint8_t *sname, int slen, uint8_t *dname, int dlen) { struct ustr *filename, *unifilename; - int ret = 0; + int ret; if (!slen) return -EIO; @@ -370,6 +370,9 @@ int udf_get_filename(struct super_block *sb, uint8_t *sname, int slen, ret = udf_translate_to_linux(dname, dlen, filename->u_name, filename->u_len, unifilename->u_name, unifilename->u_len); + /* Zero length filename isn't valid... */ + if (ret == 0) + ret = -EINVAL; out2: kfree(unifilename); out1: |