X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fllite%2Ffile.c;h=4d39246564680d58f91e24778e3f25293b869d81;hp=4e063f5bdd22a99a3cc2481441a66ba8b879f52c;hb=bc9cc327983c45e6255e0d6475b8bdbdcd82c938;hpb=707eabca41e407d702fa975afc2ccd59641335bb diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 4e063f5..4d39246 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -509,12 +509,14 @@ static int ll_intent_file_open(struct dentry *de, void *lmm, int lmmsize, /* if server supports open-by-fid, or file name is invalid, don't pack * name in open request */ - if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_OPEN_BY_FID)) { + if (OBD_FAIL_CHECK(OBD_FAIL_LLITE_OPEN_BY_NAME) || + !(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_OPEN_BY_FID)) { retry: len = de->d_name.len; - name = kmalloc(len, GFP_NOFS); + name = kmalloc(len + 1, GFP_NOFS); if (!name) RETURN(-ENOMEM); + /* race here */ spin_lock(&de->d_lock); if (len != de->d_name.len) { @@ -523,12 +525,12 @@ retry: goto retry; } memcpy(name, de->d_name.name, len); + name[len] = '\0'; spin_unlock(&de->d_lock); if (!lu_name_is_valid_2(name, len)) { kfree(name); - name = NULL; - len = 0; + RETURN(-ESTALE); } }