befs: ensure fast symlinks are NUL-terminated
Ensure fast symlink targets are NUL-terminated, even if corrupted on-disk. Cc: Sergey S. Kostyliov <rathamahata@php4.ru> Signed-off-by: Duane Griffin <duaneg@dghda.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -378,7 +378,8 @@ static struct inode *befs_iget(struct super_block *sb, unsigned long ino)
|
|||||||
inode->i_size = 0;
|
inode->i_size = 0;
|
||||||
inode->i_blocks = befs_sb->block_size / VFS_BLOCK_SIZE;
|
inode->i_blocks = befs_sb->block_size / VFS_BLOCK_SIZE;
|
||||||
strncpy(befs_ino->i_data.symlink, raw_inode->data.symlink,
|
strncpy(befs_ino->i_data.symlink, raw_inode->data.symlink,
|
||||||
BEFS_SYMLINK_LEN);
|
BEFS_SYMLINK_LEN - 1);
|
||||||
|
befs_ino->i_data.symlink[BEFS_SYMLINK_LEN - 1] = '\0';
|
||||||
} else {
|
} else {
|
||||||
int num_blks;
|
int num_blks;
|
||||||
|
|
||||||
@@ -477,6 +478,8 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
|||||||
kfree(link);
|
kfree(link);
|
||||||
befs_error(sb, "Failed to read entire long symlink");
|
befs_error(sb, "Failed to read entire long symlink");
|
||||||
link = ERR_PTR(-EIO);
|
link = ERR_PTR(-EIO);
|
||||||
|
} else {
|
||||||
|
link[len - 1] = '\0';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
link = befs_ino->i_data.symlink;
|
link = befs_ino->i_data.symlink;
|
||||||
|
Reference in New Issue
Block a user