Hi,

On 9/30/23 22:42, Sean Anderson wrote:
This check breaks small partitions (under 1024 blocks) because part_length
is in units of part.blksz and not bytes. Given the purpose of this
function, we really want to make sure the partition is SUPERBLOCK_START +
SUPERBLOCK_SIZE (2048) bytes so we can call ext4_read_superblock without
error.

The obvious solution is to convert callers from things like

        ext4fs_mount(part_info.size)

to

        ext4fs_mount(part_info.size * part_info.blksz);

However, I'm not really a fan of the bloat that would cause, especially
since the error is now suppressed. I think the best course of action here
is to just revert the patch.

This reverts commit 9905cae65e03335aefcb1ebfab5b7ee62d89f64e.

Signed-off-by: Sean Anderson <[email protected]>
---

  fs/ext4/ext4_common.c | 4 ----
  1 file changed, 4 deletions(-)

diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 9a9c520e22c..f50de7c089e 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -2373,10 +2373,6 @@ int ext4fs_mount(unsigned part_length)
        struct ext2_data *data;
        int status;
        struct ext_filesystem *fs = get_fs();
-
-       if (part_length < SUPERBLOCK_SIZE)
-               return 0;
-
        data = zalloc(SUPERBLOCK_SIZE);
        if (!data)
                return 0;


Agreed, I introduced error for part size in parameter

(in blk multiple even if after dev read if done after with bytes size)

And with caller change (part_info.size * part_info.blksz) we have risk of overflow for large ex4 partition.



minor remark: "part_length" is no more used....

it can be removed to avoid warining ?

include/ext4fs.h:149:int ext4fs_mount(void);

or use the tagĀ  "__always_unused":

int ext4fs_mount(unsigned __always_unused part_length)
{


With the remarks:

Reviewed-by: Patrick Delaunay <[email protected]>

Thanks
Patrick


Reply via email to