Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7df5fa06 authored by Duane Griffin's avatar Duane Griffin Committed by Al Viro
Browse files

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: default avatarDuane Griffin <duaneg@dghda.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent a63d0ff3
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -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;