From: Jan Kara jack@suse.cz
[ Upstream commit 00bce6f792caccefa73daeaf9bde82d24d50037f ]
Convert udf_mkdir() to new directory iteration code.
Signed-off-by: Jan Kara jack@suse.cz (cherry picked from commit 00bce6f792caccefa73daeaf9bde82d24d50037f) Signed-off-by: Sergio González Collado sergio.collado@gmail.com Reported-by: syzbot+600a32676df180ebc4af@syzkaller.appspotmail.com --- fs/udf/namei.c | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-)
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 7c95c549dd64..a33e6d762716 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -665,8 +665,7 @@ static int udf_mkdir(struct user_namespace *mnt_userns, struct inode *dir, struct dentry *dentry, umode_t mode) { struct inode *inode; - struct udf_fileident_bh fibh; - struct fileIdentDesc cfi, *fi; + struct udf_fileident_iter iter; int err; struct udf_inode_info *dinfo = UDF_I(dir); struct udf_inode_info *iinfo; @@ -678,47 +677,42 @@ static int udf_mkdir(struct user_namespace *mnt_userns, struct inode *dir, iinfo = UDF_I(inode); inode->i_op = &udf_dir_inode_operations; inode->i_fop = &udf_dir_operations; - fi = udf_add_entry(inode, NULL, &fibh, &cfi, &err); - if (!fi) { - inode_dec_link_count(inode); + err = udf_fiiter_add_entry(inode, NULL, &iter); + if (err) { + clear_nlink(inode); discard_new_inode(inode); - goto out; + return err; } set_nlink(inode, 2); - cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); - cfi.icb.extLocation = cpu_to_lelb(dinfo->i_location); - *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = + iter.fi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); + iter.fi.icb.extLocation = cpu_to_lelb(dinfo->i_location); + *(__le32 *)((struct allocDescImpUse *)iter.fi.icb.impUse)->impUse = cpu_to_le32(dinfo->i_unique & 0x00000000FFFFFFFFUL); - cfi.fileCharacteristics = + iter.fi.fileCharacteristics = FID_FILE_CHAR_DIRECTORY | FID_FILE_CHAR_PARENT; - udf_write_fi(inode, &cfi, fi, &fibh, NULL, NULL); - brelse(fibh.sbh); + udf_fiiter_write_fi(&iter, NULL); + udf_fiiter_release(&iter); mark_inode_dirty(inode);
- fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); - if (!fi) { + err = udf_fiiter_add_entry(dir, dentry, &iter); + if (err) { clear_nlink(inode); - mark_inode_dirty(inode); discard_new_inode(inode); - goto out; + return err; } - cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); - cfi.icb.extLocation = cpu_to_lelb(iinfo->i_location); - *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = + iter.fi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); + iter.fi.icb.extLocation = cpu_to_lelb(iinfo->i_location); + *(__le32 *)((struct allocDescImpUse *)iter.fi.icb.impUse)->impUse = cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL); - cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY; - udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); + iter.fi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY; + udf_fiiter_write_fi(&iter, NULL); + udf_fiiter_release(&iter); inc_nlink(dir); dir->i_ctime = dir->i_mtime = current_time(dir); mark_inode_dirty(dir); d_instantiate_new(dentry, inode); - if (fibh.sbh != fibh.ebh) - brelse(fibh.ebh); - brelse(fibh.sbh); - err = 0;
-out: - return err; + return 0; }
static int empty_dir(struct inode *dir)
On Thu, Jul 25, 2024 at 03:53:13PM +0200, Sergio González Collado wrote:
From: Jan Kara jack@suse.cz
[ Upstream commit 00bce6f792caccefa73daeaf9bde82d24d50037f ]
Convert udf_mkdir() to new directory iteration code.
Signed-off-by: Jan Kara jack@suse.cz (cherry picked from commit 00bce6f792caccefa73daeaf9bde82d24d50037f) Signed-off-by: Sergio González Collado sergio.collado@gmail.com
You changed things in this commit and didn't say what or why you did so :(
Hello,
Thanks for your feedback. Honestly it was a clean cherry-pick. I'm not aware I have changed anything ... but I can be mistaken. I checked with the original commit, and the changes seem the same to me, although the changes are not in the same line numbers. Is that change in the line numbers what you mean?
Thanks!
On Thu, 25 Jul 2024 at 16:21, Greg KH gregkh@linuxfoundation.org wrote:
On Thu, Jul 25, 2024 at 03:53:13PM +0200, Sergio González Collado wrote:
From: Jan Kara jack@suse.cz
[ Upstream commit 00bce6f792caccefa73daeaf9bde82d24d50037f ]
Convert udf_mkdir() to new directory iteration code.
Signed-off-by: Jan Kara jack@suse.cz (cherry picked from commit 00bce6f792caccefa73daeaf9bde82d24d50037f) Signed-off-by: Sergio González Collado sergio.collado@gmail.com
You changed things in this commit and didn't say what or why you did so :(
On Thu, Jul 25, 2024 at 05:45:38PM +0200, Sergio González Collado wrote:
Hello,
Thanks for your feedback. Honestly it was a clean cherry-pick. I'm not aware I have changed anything ... but I can be mistaken. I checked with the original commit, and the changes seem the same to me, although the changes are not in the same line numbers. Is that change in the line numbers what you mean?
Do a clean cherry-pick and try to build the result, your patch was different...
thanks,
greg k-h
linux-stable-mirror@lists.linaro.org