lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <39c23608-8e20-40ad-84a3-4d4c0f9468c0@spornkuller.de>
Date: Wed, 31 Jul 2024 13:16:26 +0200
From: Johannes Bauer <canjzymsaxyt@...rnkuller.de>
To: linux-ext4@...r.kernel.org
Subject: Modification of block device by R/O mount

Dear list,

I'm a little bit puzzled by behavior of ext4 I've been seeing initially 
on aarch64 Linux 6.1 but can reproduce easily on my machine:

Linux reliant 6.5.0-28-generic #29-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 28 
23:46:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

The behavior I'm seeing is that a R/O mount modifies a device mapper 
block device (or loopback device), which is unsettling. That change is 
not propagated back to the original source, but it is causing massive 
problems nevertheless. For example:

reliant [/tmp/ext4test]: dd if=/dev/null bs=1M seek=64 count=0 of=image.img
0+0 records in
0+0 records out
0 bytes copied, 2,2172e-05 s, 0,0 kB/s


reliant [/tmp/ext4test]: mkfs.ext4 image.img
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 16384 4k blocks and 16384 inodes

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done



reliant [/tmp/ext4test]: losetup --read-only --show -f image.img
/dev/loop28


reliant [/tmp/ext4test]: md5sum /dev/loop28 image.img
34d7cd8eb4abb1943aabe078b8fb3c74  /dev/loop28
34d7cd8eb4abb1943aabe078b8fb3c74  image.img


reliant [/tmp/ext4test]: mkdir mnt; mount -o ro /dev/loop28 mnt


reliant [/tmp/ext4test]: md5sum /dev/loop28 image.img
9145654c1e6a5855c1db239815a05198  /dev/loop28
34d7cd8eb4abb1943aabe078b8fb3c74  image.img


reliant [/tmp/ext4test]: cmp /dev/loop28 image.img
/dev/loop28 image.img differ: byte 61484, line 5


reliant [/tmp/ext4test]: umount mnt; losetup -d /dev/loop28


reliant [/tmp/ext4test]: md5sum image.img
34d7cd8eb4abb1943aabe078b8fb3c74  image.img


As you can see, the original image was never modified (MD5 34d7... 
remains the same) but /dev/loop28 changes once R/O mounted. This 
behavior is shocking to me and I've not observed this with other file 
systems (I tried btrfs) so this seems to be ext4-specific.

Is this expected behavior? Is there a way to mitigate it?

Thanks and best regards,
Johannes

-- 
"A PC without Windows is like a chocolate cake without mustard."


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ