From 6b1312cfbb77dfe338f56a71a8f5461ec135f47c Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sat, 23 Nov 2019 15:08:47 +1100 Subject: ext2fs: Fix fast symlinks created by linux linux seems to allocate 8 blocks for any fast symlink. * ext2fs/inode.c (write_symlink): Do not assert that st_blocks is 0. (read_symlink): Return EINVAL when node->dn_stat.st_size >= MAX_INODE_SYMLINK, not when node->dn_stat.st_blocks != 0. --- ext2fs/inode.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ext2fs/inode.c b/ext2fs/inode.c index 472c1b43..d73d0bca 100644 --- a/ext2fs/inode.c +++ b/ext2fs/inode.c @@ -769,8 +769,6 @@ write_symlink (struct node *node, const char *target) if (len > MAX_INODE_SYMLINK) return EINVAL; - assert_backtrace (node->dn_stat.st_blocks == 0); - memcpy (diskfs_node_disknode (node)->info.i_data, target, len); node->dn_stat.st_size = len - 1; node->dn_set_ctime = 1; @@ -783,11 +781,9 @@ write_symlink (struct node *node, const char *target) static error_t read_symlink (struct node *node, char *target) { - if (node->dn_stat.st_blocks) + if (node->dn_stat.st_size >= MAX_INODE_SYMLINK) return EINVAL; - assert_backtrace (node->dn_stat.st_size < MAX_INODE_SYMLINK); - memcpy (target, diskfs_node_disknode (node)->info.i_data, node->dn_stat.st_size); return 0; -- cgit v1.2.3