]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
fs: ext4: fix files seen as symlink during deletion
authorCorentin GUILLEVIC <corentin.guillevic@smile.fr>
Fri, 17 Mar 2023 12:15:12 +0000 (13:15 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 30 Mar 2023 19:09:59 +0000 (15:09 -0400)
The deletion process handles special case for symlinks whose target are
small enough that it fits in struct ext2_inode.b.symlink. So no block had
been allocated. But the check of file type wrongly considered regular
files as symlink. So, no block was freed. So, the EXT4 partition could be
corrupted because of no free block available.

Signed-off-by: Corentin GUILLEVIC <corentin.guillevic@smile.fr>
fs/ext4/ext4_write.c

index f22af45d1b9747368fdb8e864bd3a3432dea4f7c..ea4c5d4157cc025333e7db9ba0045490c1e0e6cf 100644 (file)
@@ -473,7 +473,7 @@ static int ext4fs_delete_file(int inodeno)
         * special case for symlinks whose target are small enough that
         *it fits in struct ext2_inode.b.symlink: no block had been allocated
         */
-       if ((le16_to_cpu(inode.mode) & S_IFLNK) &&
+       if (S_ISLNK(le16_to_cpu(inode.mode)) &&
            le32_to_cpu(inode.size) <= sizeof(inode.b.symlink)) {
                no_blocks = 0;
        }