diff options
author | Michael Hudson-Doyle <michael.hudson@ubuntu.com> | 2022-05-26 13:08:28 +1200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2022-08-11 10:39:48 -0400 |
commit | ca340221b9f324fd5b12be485f729bd5101d5c14 (patch) | |
tree | 973fce9afd71d305d0c49333ff2181354b556bfa | |
parent | 13f1ce96046fba15d93a90733b791312284fbb62 (diff) | |
download | e2fsprogs-ca340221b9f324fd5b12be485f729bd5101d5c14.tar.gz |
resize2fs: open device read-only when -P is passed
We ran into this because we noticed that resize2fs -P $device was
triggering udev events.
I added a very simple test that just checks resize2fs -P on a file
lacking the w bit succeeds.
Signed-off-by: Michael Hudson-Doyle <michael.hudson@ubuntu.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | resize/main.c | 8 | ||||
-rwxr-xr-x | tests/scripts/resize_test | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/resize/main.c b/resize/main.c index d2ba34481..a1a1c79a8 100644 --- a/resize/main.c +++ b/resize/main.c @@ -256,6 +256,7 @@ int main (int argc, char ** argv) int force_min_size = 0; int print_min_size = 0; int fd, ret; + int open_flags = O_RDWR; blk64_t new_size = 0; blk64_t max_size = 0; blk64_t min_size = 0; @@ -363,7 +364,10 @@ int main (int argc, char ** argv) len = 2 * len; } - fd = ext2fs_open_file(device_name, O_RDWR, 0); + if (print_min_size) + open_flags = O_RDONLY; + + fd = ext2fs_open_file(device_name, open_flags, 0); if (fd < 0) { com_err("open", errno, _("while opening %s"), device_name); @@ -401,7 +405,7 @@ int main (int argc, char ** argv) #endif io_ptr = unix_io_manager; - if (!(mount_flags & EXT2_MF_MOUNTED)) + if (!(mount_flags & EXT2_MF_MOUNTED) && !print_min_size) io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE; io_flags |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS; diff --git a/tests/scripts/resize_test b/tests/scripts/resize_test index fc9d1c246..a000c85e5 100755 --- a/tests/scripts/resize_test +++ b/tests/scripts/resize_test @@ -60,6 +60,14 @@ rm -f $OUT_TMP echo $FSCK -fy $TMPFILE >> $LOG 2>&1 $FSCK -fy $TMPFILE >> $LOG 2>&1 +chmod u-w $TMPFILE +echo $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 +if ! $RESIZE2FS -P $TMPFILE >> $LOG 2>&1 +then + return 1 +fi +chmod u+w $TMPFILE + echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1 then |