mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-20 20:04:46 +00:00
squashfs: Fix sqfs_inode_size() for xattr related SQFS_LSYMLINK_TYPE
A squashfs filesystem with extended attributes (xattrs) may have inodes of type SQFS_LSYMLINK_TYPE. This might cause u-boot to fail to handle the filesystem since it assumes a SYMLINK_TYPE and LSYMLINK_TYPE inode are the same size. This is wrong, see: https://github.com/plougher/squashfs-tools/blob/master/squashfs-tools/read_fs.c#L421 Using the mksquashfs '-no-xattrs' argument is probably best, but the mksquashfs '-xattrs' argument is the default. This patch fixes squashfs image handling by making sure parsing the uncompressed inode_table (with sqfs_find_inode) succeeeds. The only change needed is correctly determining the size of a SQFS_LSYMLINK_TYPE inode. Signed-off-by: Norbert van Bolhuis <nvbolhuis@gmail.com>
This commit is contained in:
parent
a0defa4f35
commit
bbfa4fe13c
1 changed files with 4 additions and 2 deletions
|
@ -19,7 +19,9 @@
|
||||||
|
|
||||||
int sqfs_inode_size(struct squashfs_base_inode *inode, u32 blk_size)
|
int sqfs_inode_size(struct squashfs_base_inode *inode, u32 blk_size)
|
||||||
{
|
{
|
||||||
switch (get_unaligned_le16(&inode->inode_type)) {
|
u16 inode_type = get_unaligned_le16(&inode->inode_type);
|
||||||
|
|
||||||
|
switch (inode_type) {
|
||||||
case SQFS_DIR_TYPE:
|
case SQFS_DIR_TYPE:
|
||||||
return sizeof(struct squashfs_dir_inode);
|
return sizeof(struct squashfs_dir_inode);
|
||||||
|
|
||||||
|
@ -87,7 +89,7 @@ int sqfs_inode_size(struct squashfs_base_inode *inode, u32 blk_size)
|
||||||
get_unaligned_le32(&symlink->symlink_size), &size))
|
get_unaligned_le32(&symlink->symlink_size), &size))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return size;
|
return (inode_type == SQFS_SYMLINK_TYPE) ? size : size + sizeof(u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
case SQFS_BLKDEV_TYPE:
|
case SQFS_BLKDEV_TYPE:
|
||||||
|
|
Loading…
Add table
Reference in a new issue