aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2024-05-04configure: remove duplicated/unnecessary test for compiler fuzzing supportnextTheodore Ts'o2-6/+0
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-02libext2fs: fix potential divide by zero bug caused by a lxcfs bugHEADmasterTheodore Ts'o1-1/+1
If sysconf(_SC_NPROCESSORS_CONF) returns zero, this can cause a divide by zero. Make ext2fs_rw_bitmaps() more robust defaulting to 4 threads if _SC_NPROCESSORS_CONF returns an invalid value. https://github.com/tytso/e2fsprogs/issues/114 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01e2image: fix typo which causes a compile failure on i386Theodore Ts'o1-1/+1
Fixes: 80abfebc673b ("e2image: add support for post-2038 dates...") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01debian: build-depend on pkgconf instead of pkg-configTheodore Ts'o1-1/+1
The pkg-config package has been obsoleted by pkgconf. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01libsupport: silence gcc -Wall complaintsTheodore Ts'o1-0/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01e4defrag: use snprintf to assure that there can't be a buffer overflowTheodore Ts'o1-3/+2
The size of msg_buffer is carefully calculated so it can never overflow, but it triggers a Coverity warning. Use snprintf instead of sprintf to silence the Coverity warning. Addresses-Coverty-Bug: 1520603 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01libsupport: use explicit type widths instead of time_tTheodore Ts'o1-4/+4
The in-memory data structures used time_t for the grace period (which is a delta timestamp denominated in seconds), as well as the soft limit expiration time (which is an actual time_t). Use an explicit __u32 for the former, and the __u64 for the latter. This silences a Coverity warning, but more importantly, using an explicit __u64 for the expiration time means that running e2fsck on a platform with a 32-bit time_t, and it needs to read and then modify a quota structure, we won't lose the high 32-bits of the quota expiration time. Addresses-Coverity-Bug: 1531824 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01e2image: add support for post-2038 dates in the e2image headerTheodore Ts'o2-3/+10
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01Update release notes, etc., for the 1.47.1-rc2 releasev1.47.1-rc2Theodore Ts'o6-9/+37
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update zh_CN.po (from translationproject.org)Wenbin Lv1-970/+1150
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update uk.po (from translationproject.org)Yuri Chornoivan1-968/+1148
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update sv.po (from translationproject.org)Göran Uddeborg1-969/+1145
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update ro.po (from translationproject.org)Remus-Gabriel Chelu1-971/+1152
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update pl.po (from translationproject.org)Jakub Bogusz1-967/+1147
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update fr.po (from translationproject.org)Samuel Thibault1-987/+1169
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01po: update cs.po (from translationproject.org)Petr Pisar1-969/+1151
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01e2fsck: check the error return from the forced rewrite writeTheodore Ts'o1-2/+8
If read of a block fails, we offer the user the opportunity to force a rewrite to that sector to force the storage device to remap the LBA to its spare block pool. Check that write so if it fails, we can let the user know. Addresses-Coverity-bug: 1432422 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-05-01resize2fs: mark that the error return is deliberately ignoredTheodore Ts'o1-2/+2
When moving the inode table, if writing the (partially overlapping) inode table fails, we need to write it back in its original location before bailing out. If that write unding the initial write fails, there's nothing we can do, so we ignore it. Mark this to avoid a false positive from Coverity. Fixes-Coverity-bug: 1432422 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-30e2scrub: test for the presence of systemd using test -e /run/systemd/systemTheodore Ts'o1-1/+1
Debian has a package called "systemctl" which provides a systemctl executable to "manage services without systemd". So test for whether we have a fully functional systemd system by checking for the existence of /run/systemd/system instead testing for the presence of the command named systemctl. Addresses-Debian-Bug: #1070107 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-30Remove explicit #define of _FILE_OFFSET_BITSTheodore Ts'o8-22/+0
The problem with explicitly setting _FILE_OFFSET_BITS is that it's not necessarily a no-op on a 64-bit platform with a 64-bit off_t. Apparently glibc's mips64el which end up using a different structure definition for struct stat, and this causes a compatibility problem with libarchive. It's not needed on mips64el, since off_t is 64-bits, but it actually causes problems. So remove it, since we now use the autoconf's AC_SYS_LARGEFILE, which will set _FILE_OFFSET_BITS when it is necessary (such as on a 32-bit i386 Linux platform), and will skip it when it is unnecessary. Addresses-Debian-Bug: #1070042 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-29debian: add support for DEB_BUILD_OPTIONS=parallel=NTheodore Ts'o1-2/+7
This speeds up package builds using "make -jN" and "make -jN check". Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-29debian: don't build with libarchive on mips64elTheodore Ts'o1-0/+5
The libarchive functionality in "mke2fs -d foo.tar" is breaking the regression test[1]. Since this is working everywhere _except_ mips64el, as a short-term workaround disable libarchive support on this platform until it can be fixed. [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1070042 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-29debian: don't try to install e2scrub on HurdTheodore Ts'o1-1/+2
The e2scrub scripts rely on systemd, which isn't present on non-Linux systems, so they aren't built. So we need to skip trying to run dh_installsystemd since it will fail on the Hurd build since the requisite files aren't being built. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-29configure: add --without-libarchive optionTheodore Ts'o5-10/+83
Teach configure the --without-libarchive option, which forcibly disables use of the libarchive library. The option --with-libarchive=direct will disable the use of dlopen, and will link mke2fs with -larchive directly. This doesn't work when building mke2f.static, since -larchive has a large number of depedencies, and even "pkgconf --libs --static libarchive" doesn't provide all of the appropriate library dependencies. :-( Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-28resize2fs: fix last bg's free clusters calculation on 64-bit file systemsTheodore Ts'o1-1/+2
Fixes-Coverity-bug: 1596645 Fixes: d43fb24ca0db ("resize2fs: fix r_bigalloc_big_expand test failure") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-28Remove duplicated word in release notesTheodore Ts'o2-2/+2
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27debian: add a note in debian/changelog regarding features being re-enabledv1.47.1-rc1Theodore Ts'o1-2/+4
The metadata_csum_seed and orphan_file features were disabled before Debian Bookworm was released, but now that it's released, we are now re-enabling those features for Debian testing and the next version of Debian stable (trixie). Also, remove some spurious whitespace. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27Update release notes, etc., for the 1.47.1-rc1 releaseTheodore Ts'o7-14/+254
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27resize2fs: fix r_bigalloc_big_expand test failureTheodore Ts'o1-9/+20
Manually count the number free clusters in the last block group since it might not be a multiple of 8, and using ext2fs_bitcount() might not work if bitmap isn't properly padding out. In addition, when setting up the block bitmap for the resized file system, resize2fs was setting up the "real end" of the bitmap in units of blocks instead of clusters. We didn't notice this problem earlier because of a test failure which caused the test to be skipped. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27tests: add better debugging for failures when running resize2fs testsTheodore Ts'o1-0/+9
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27tests: fix tests that were always being skippedTheodore Ts'o5-6/+6
A broken OS check was causing a few tests that were supposed to be skipped on MacOS, Hurd, and FreeBSD systems to be always skipped. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27tests: fix more expected output filesTheodore Ts'o2-3/+3
Fixes: 54765493af7d ("libe2p: remove tabs from "Inode size" and "Journal device" in `tune2fs -l` output") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27config: update config.{guess,sub}Theodore Ts'o2-95/+197
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-27Update Makefile dependenciesTheodore Ts'o1-18/+21
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-26e2fsck.8: minor man page fixesTheodore Ts'o1-51/+61
Addresses-Debian-Bug: #1038286 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-26Prevent i_dtime from being mistaken for an inode number post-2038 wraparoundTheodore Ts'o9-9/+33
We explicitly decided not to reserve space for a 64-bit dtime, since it's never displayed or exposed to userspace. The dtime field is used a linked list for the ophan list, and for forensic purposes when trying to determine when an inode was deleted. So right after the 2038 epoch, a deleted inode might end up with a dtime which is zero or smaller than the number of inodes, which will result in e2fsck reporting a potential problems. So when we set the dtime, make sure that the dtime won't be mistaken for an inode number. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25libextr2fs: handle short reads/writes while creating the qcow fileTheodore Ts'o1-9/+21
This issue was flagged by Coverity, although its analysis was incorrect. This isn't actually a memory overrun / security issue, but rather a functional correctness issue since POSIX allows reads and writes to be partially completed, and in those cases qcow2_copy_data() could result in a corrutped qcow2 file. Addresses-Coverity-Bug: 1531830 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25debian: fix accidental editing error in libext2fs2t664.symbolsTheodore Ts'o1-1/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25configure: Use FORTIFY_SOURCE=3 when hardening is enabledTheodore Ts'o2-4/+4
FORTIFY_SOURCE=3 provides much more robust checks for buffer overruns and other memory bugs[1]. It requires gcc 12 and glibc 2.34 which should be available on most modern distributions (which are the ones that use --enable-hardening). [1] https://developers.redhat.com/articles/2022/09/17/gccs-new-fortification-level Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25fsck: fix memory leak on an error exitTheodore Ts'o1-0/+1
This reduces noise from a static analyzer. https://github.com/tytso/e2fsprogs/issues/160 Signed-off-by: Theodore Ts'o <tytso@mit.
2024-04-25libext2fs: add new getenv.c fileTheodore Ts'o1-0/+64
Fixes: eefbea0da810 ("libext2fs: use a safe_getenv() function everywhere") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25tests: fix expect scripts after removing tabs from tune2fs -l outputTheodore Ts'o32-45/+45
Fixes: 54765493af7d ("libe2p: remove tabs from "Inode size" and "Journal device" in `tune2fs -l` output") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25Merge branch 'issue-168' of https://github.com/chestnykh/e2fsprogs into nextTheodore Ts'o4-1/+85
2024-04-25Merge branch 'fix-windows-64-bit' of ↵Theodore Ts'o1-5/+13
https://github.com/steffen-kiess/e2fsprogs into next
2024-04-25Merge branch 'tune2fs-remove-tabs' of ↵Theodore Ts'o1-2/+2
https://github.com/richardfearn/e2fsprogs into next
2024-04-25Merge https://github.com/steven676/e2fsprogs into nextTheodore Ts'o1-1/+1
2024-04-25mke2fs: implement timestamp clamping if SOURCE_DATE_EPOCH is setTheodore Ts'o1-3/+10
When copying files to the newly created file system using "mke2fs -d", and there are timestamps greater than what is specified by SOURCE_DATE_EPOCH, clamp the timestamp to the SOURCE_DATE_EPOCH timestamp. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25libext2fs: add support for the SOURCE_DATE_EPOCH environment variableTheodore Ts'o11-22/+45
Add SOURCE_DATE_EPOCH support as documented in [1]. [1] https://reproducible-builds.org/specs/source-date-epoch Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-25libext2fs: use a safe_getenv() function everywhereTheodore Ts'o11-86/+44
Hoist safe_getenv() from test_io.c and unix_io.c to a globally exported ext2fs_safe_getenv() and use it instead of getenv() in libext2fs. This provides a bit more safety if e2fsprogs programs are used in setuid contexts. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24po: update e2fsprogs.pot in preparations for v1.47.1-rc1 releaseTheodore Ts'o1-581/+575
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24po: add Romainian language from the Translation ProjectTheodore Ts'o3-1/+8721
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24po: update ms.po (from translationproject.org)Sharuzzaman Ahmat Raslan1-1169/+794
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24debian: update libext2fs2t64.symbols with shared library additionsTheodore Ts'o1-0/+3
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24libss: fix function delcaration in the test_ss regression testTheodore Ts'o1-1/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-24Fix various compiler -Wall warningsTheodore Ts'o8-22/+22
Fixes: a12302fa683e ("e2fsck: make sure get_backup_sb() works ...") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23e2fsck, tune2fs: fix post-2038 support for s_lastcheckTheodore Ts'o2-5/+8
This changes were missed in commit ca8bc9240a00 ("Add post-2038 timestamp support to e2fsprogs"). Addresses-Coverity-Bug: 1531832 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23Fix coverity false positives introduced by the post-2038 changesTheodore Ts'o1-3/+4
Commit ca8bc9240a00 ("Add post-2038 timestamp support...") did things like casting a 64-bit unsigned integer into a signed 32-bit integer deliberately; but Coverity thinks this is a bug. So mask off the bits to make it clear this was deliberate. Addresses-Coverity-Bug: 1596519 Addresses-Coverity-Bug: 1596515 Addresses-Coverity-Bug: 1596514 Addresses-Coverity-Bug: 1596513 Addresses-Coverity-Bug: 1596511 Addresses-Coverity-Bug: 1596509 Addresses-Coverity-Bug: 1596508 Addresses-Coverity-Bug: 1596504 Addresses-Coverity-Bug: 1596502 Addresses-Coverity-Bug: 1596501 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23e2fsck: make sure get_backup_sb() works when ctx is NULLTheodore Ts'o1-3/+5
The print_e2fsck_message() function can call get_backup_sb() with the ctx variable set to NULL. In that case, we can't dereference ctx->filesystem_name; instead, we can get the size of the file system from the ext2fs_block_count(fs->super). Addresses-Coverity-Bug: 1596517 Addresses-Coverity-Bug: 1596505 Fixes: b53ce7848c2e ("e2fsck: don't try backup superblocks beyond...") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23Align function prototypes for libss's request handler functionTheodore Ts'o33-312/+338
Clang 17's Undefined Behaviour Sanitizer will throw run-time warnings if a function pointer is dereferenced with a different function signature than one in the pointer --- even if the difference is a missing const qualifier. To fix regression test failures, change declarations of argv to use ss_argv_t instead of an inconsistently open-coded type. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23Update version tag to 1.47.1-rc1 for test buildsTheodore Ts'o3-3/+9
Also add Debian dependencies for libarchive-dev and change the dependency from libfuse-dev to libfuse3-dev. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23create_inode: fix gcc -Wall warningsTheodore Ts'o1-8/+8
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23mke2fs: use the correct shared library version for libarchive on FreeBSDTheodore Ts'o1-1/+7
Adjust for the fact that Linux uses libarchive.so.13, while freeBSD uses libarchive.so.7. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-23tests: fix problems in the m_rootgnutar testTheodore Ts'o2-14/+41
The mkgnutar.pl file only works if the developer had a specific username and uid. In addition, if it is used, the round-trip from tar to an ext4 file system and back to tar isn't properly tested. So only use mkgnutar.pl if the system doesn't have GNU TAR. In addition, make sure all of the temp files created by the test are deleted when the test is completed. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-22tests: stat -c %Y is not portable, replace with perl stat in m_rootgnutarJohannes Schauer Marin Rodrigues1-5/+6
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-21libsupport: fix sort_r.h to work on FreeBSD 14Theodore Ts'o1-1/+1
FreeBSD 14 has changed the definition of qsort_r to align it with the POSIX, but it did this with a #define. So when sort_r.h tries to provide a function prototype, surround the function name with parenthesis so it doesn't get expanded by FreeBSD's #define. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-21Merge branch 'support-fuse3' of https://github.com/DrDaveD/e2fsprogs into nextTheodore Ts'o4-49/+550
2024-04-18Merge remote-tracking branch 'josch/libarchive' into josch-libarchiveTheodore Ts'o25-35/+1846
2024-04-18debugfs: fix printing post-2038 inode timestampsTheodore Ts'o1-3/+6
Debugfs's stat command called ext2fs_inode_xtime_get() with a struct inode * instead of a struct large_inode *. As a result, printing inode timestamps will be incorrect if the time value is larger than 2**32. Fixes: ca8bc9240a00 ("Add post-2038 timestamp support to e2fsprogs") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-18misc: update mke2fs's man page regarding the default inode sizePascal Hambourg1-2/+2
Since a23b50cd ("mke2fs: warn about missing y2038 support when formatting fresh ext4 fs"), the default inode size is 256 bytes for all filesystems, including small and floppy, except for the Hurd since it currently only supports 128-byte inodes. Signed-off-by: Pascal Hambourg <pascal@plouf.fr.eu.org> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/E1rx4t4-00073d-1e@zenith Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-18debugfs: fix set_field's handling of timestampsTheodore Ts'o1-17/+49
How timestamps are encoded in inodes and superblocks are different. Unfortunately, commit ca8bc9240a00 which added post-2038 timestamps was (a) overwriting adjacent superblock fields and/or attempting unaligned writes to a 8-bit field from a 32-bit pointer, and (b) using the incorrect encoding for timestamps stored in inodes. Fix both of these issues, which were found thanks to UBSAN. Fixes: ca8bc9240a00 ("Add post-2038 timestamp support to e2fsprogs") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-18mke2fs: the -d option can now handle tarball inputJohannes Schauer Marin Rodrigues25-35/+1846
If archive.h is available during compilation, enable mke2fs to read a tarball as input. Since libarchive.so.13 is opened with dlopen, libarchive is not a hard library dependency of the resulting binary. In comparison with feeding a directory tree to mke2fs via -d this has the following advantages: - no superuser privileges, nor fakeroot, nor unshared user namespaces are needed to create filesystems with arbitrary ownership information and special files like device nodes which otherwise require being root - by reading a tarball from standard input, no temporary files need to be written out first as mke2fs can be used as part of a shell pipeline which reduces disk usage and makes the conversion independent of the underlying file system A round-trip from tarball to ext4 to tarball yields bit-by-bit identical results Signed-off-by: Johannes Schauer Marin Rodrigues <josch@mister-muffin.de>
2024-04-18ci.yml: upload *.failed test failure artifactsTheodore Ts'o1-12/+42
Also upgrade to v4 of the upload-artifact and checkout actions. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17Fix 32-bit build and test failuresTheodore Ts'o6-11/+25
Commit ca8bc9240a00 ("Add post-2038 timestamp support to e2fsprogs") was never built or tested on a 32-bit. It introduced some build problems when time_t is a 32-bit integer, and it exposed some test bugs. Fix them. Fixes: ca8bc9240a00 ("Add post-2038 timestamp support to e2fsprogs") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17e2fsck: don't try backup superblocks beyond the size of the deviceTheodore Ts'o1-5/+15
Commit f7ef5f3e356d ("e2fsck: check all sparse_super backups") tries to limit the number of block groups to search for backup superblocks based on ctx->num_blocks. Unfortunately, get_backup_sb() gets called before ctx->num_blocks is set, so we try all block groups up to 2**32 - 1. Not only does this waste time trying to read from blocks that don't exist, it triggers the UBSAN checker when multiplying a very large number by the block size. Fix this by using ext2fs_get_Device_size(), and if that isn't available, arbitrarily cap things so that we search block groups up to 128. Fixes: f7ef5f3e356d ("e2fsck: check all sparse_super backups") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17debugfs: fix clang warningsTheodore Ts'o1-2/+3
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17ext2fs: fix -Walloc-sizeSam James1-2/+2
GCC 14 introduces a new -Walloc-size included in -Wextra which gives: ``` lib/ext2fs/hashmap.c:37:36: warning: allocation of insufficient size ‘1’ for type ‘struct ext2fs_hashmap’ with size ‘20’ [-Walloc-size] ``` The calloc prototype is: ``` void *calloc(size_t nmemb, size_t size); ``` So, just swap the number of members and size arguments to match the prototype, as we're initialising 1 struct of size `sizeof(...)`. GCC then sees we're not doing anything wrong. Signed-off-by: Sam James <sam@gentoo.org> Link: https://lore.kernel.org/r/20231107233122.2013191-1-sam@gentoo.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17e4crypt: fix spurious "Success" error messageJakub Wilk1-1/+1
Before: # e4crypt set_policy 0000000000000000 /dev/null /dev/null is not a directory /dev/null: Success After: # e4crypt set_policy 0000000000000000 /dev/null /dev/null: Not a directory Signed-off-by: Jakub Wilk <jwilk@jwilk.net> Link: https://lore.kernel.org/r/20231227080805.6801-1-jwilk@jwilk.net Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17debugfs: fix infinite loop while dumping the journalWenchao Hao1-4/+7
There are 2 scenarios which would trigger infinite loop: 1. None log is recorded, then dumplog with "-n", for example: debugfs -R "logdump -O -n 10" /dev/xxx while /dev/xxx has no valid log recorded. 2. The log area is full and cycle write is triggered, then dumplog with debugfs -R "logdump -aOS" /dev/xxx This patch add a new flag "wrapped_flag" to mark if logdump has reached to tail of logarea set in macro WRAP(). If wrapped_flag is true, and we comes to first_transaction_blocknr again, just break the logdump loop. [ Renamed reverse_flag to wrapped_flag to make it clearer what it is. -- TYT ] Signed-off-by: Wenchao Hao <haowenchao2@huawei.com> Link: https://lore.kernel.org/r/20231117102315.2431846-1-haowenchao2@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-17resize2fs: avoid constantly flushing while moving blocksAnssi Hannula1-2/+2
resize2fs block_mover() flushes data after each extent and, curiously, only if progress indicator is enabled, every inode_blocks_per_group blocks. This significantly affects performance, e.g. on a tested large filesystem on top of MD-RAID6+LVM+dm-crypt these flush calls reduce the operation rate from approx. 500MB/s to 5MB/s, causing extremely long shrinking times for large size deltas (70TB in my case). Since this step performs just plain data copying and does not e.g. save any progress/checkpoint information or similar metadata, it seems like this flushing is of very limited usefulness, especially when considering the (in some cases) 100x performance impact. Remove the mid-operation flushes and only flush after all blocks have been moved. Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi> Link: https://lore.kernel.org/r/20231107094920.4056281-1-anssi.hannula@iki.fi Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-16Merge branch 'maint' into nextTheodore Ts'o8-33/+29
2024-04-15tests: new test to check quota after a bad inode deallocationLuis Henriques (SUSE)4-0/+26
This new test validates e2fsck by verifying that quota is updated after a bad inode is deallocated. It mimics fstest ext4/019 by including a filesystem image where a symbolic link was created to an existing file, using a long symlink name. This symbolic link was then wiped with: # debugfs -w -R 'zap -f /testlink 0' f_testnew/image Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20240405142405.12312-5-luis.henriques@linux.dev Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-15tests: new test to check quota after directory optimizationLuis Henriques (SUSE)4-0/+26
This new test validates e2fsck by verifying that quota data is updated after a directory optimization is performed. This issue was initially found by fstest ext4/014, and this test was based on it. It includes a filesystem image where the lost+found directory is unlinked after a new link to it is created: # debugfs -w -R "ln lost+found foo" f_testnew/image # debugfs -w -R "unlink lost+found" f_testnew/image Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev> Link: https://lore.kernel.org/r/20240405142405.12312-4-luis.henriques@linux.dev Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-15e2fsck: update quota when deallocating a bad inodeLuis Henriques (SUSE)1-11/+32
If a bad inode is found it will be deallocated. However, if the filesystem has quota enabled, the quota information isn't being updated accordingly. This issue was detected by running fstest ext4/019. This patch fixes the issue by decreasing the inode count from the quota and, if blocks are also being released, also subtract them as well. While there, and as suggested by Andreas Dilger, the deallocate_inode() function documentation is also updated by this patch to make it clear what that function really does. Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev> Link: https://lore.kernel.org/r/20240405142405.12312-3-luis.henriques@linux.dev Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-15e2fsck: update quota accounting after directory optimizationLuis Henriques (SUSE)1-6/+21
In "Pass 3A: Optimizing directories", a directory may have it's size reduced. If that happens and quota is enabled in the filesystem, the quota information will be incorrect because it doesn't take the rehash into account. This issue was detected by running fstest ext4/014. This patch simply updates the quota data accordingly, after the directory is written and it's size has been updated. Link: https://bugzilla.kernel.org/show_bug.cgi?id=218626 Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20240405142405.12312-2-luis.henriques@linux.dev Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-15e2fsprogs: misc/mke2fs.8.in: Correct valid cluster-size valuesSrivathsa Dara1-3/+3
According to the mke2fs man page, the supported cluster-size values for an ext4 filesystem are 2048 to 256M bytes. However, this is not the case. When mkfs is run to create a filesystem with following specifications: * 1k blocksize and cluster-size greater than 32M * 2k blocksize and cluster-size greater than 64M * 4k blocksize and cluster-size greater than 128M mkfs fails with "Invalid argument passed to ext2 library while trying to create journal" error. In general, when the cluster-size to blocksize ratio is greater than 32k, mkfs fails with this error. Went through the code and found out that the function `ext2fs_new_range()` is the source of this error. This is because when the cluster-size to blocksize ratio exceeds 32k, the length argument to the function `ext2fs_new_range()` results in 0. Hence, the error. This patch corrects the valid cluster-size values. Reviewed-by: Darrick J. Wong <djwong@kernel.org> Link: https://lore.kernel.org/r/20240403043037.3992724-1-srivathsa.d.dara@oracle.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04lib/ext2fs: llseek: simplify linux sectionMike Gilbert1-52/+15
On 32-bit musl systems, off_t is always 8 bytes regardless of _FILE_OFFSET_BITS. The previous code did not cover this case. The previous #ifdef logic was rather confusing, so I reworked it into a more understandable form. Bug: https://bugs.gentoo.org/908892 Signed-off-by: Mike Gilbert <floppym@gentoo.org> Closes: https://github.com/tytso/e2fsprogs/pull/150 Signed-off-by: Sam James <sam@gentoo.org> Link: https://lore.kernel.org/r/20231107233323.2013334-2-sam@gentoo.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04configure.ac: call AC_SYS_LARGEFILE before checking the size of off_tMike Gilbert2-209/+207
Signed-off-by: Mike Gilbert <floppym@gentoo.org> Signed-off-by: Sam James <sam@gentoo.org> Link: https://lore.kernel.org/r/20231107233323.2013334-1-sam@gentoo.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04configure: update configure so it is generated using autoconf 2.71Theodore Ts'o1-51/+34
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04mke2fs: do not set the BLOCK_UNINIT on groups has GDTLi Dongyang10-23/+23
This patch prepares the expansion of GDT blocks beyond a single group, by make mke2fs to not set BLOCK_UNINIT on groups with GDT blocks, block/inode bitmaps, or inode table blocks allocated. Otherwise, we still rely on kernel side to initialize the block bitmap if the groups has BLOCK_UNINIT set, and the kernel doesn't know a group could have GDT blocks allocated, so it would make an bad block bitmap. As a result, expect output of several tests needs to be changed, especially if the test uses dumpe2fs to print the group summary. Signed-off-by: Li Dongyang <dongyangli@ddn.com> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20230925060801.1397581-2-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04mke2fs: set free blocks accurately for groups has GDTLi Dongyang6-20/+73
This patch is part of the preparation required to allow GDT blocks expand beyond a single group, it introduces 2 new interfaces: - ext2fs_count_used_blocks(), to return the blocks used in the bitmap range. - ext2fs_reserve_super_and_bgd2() to return blocks used by superblock/GDT blocks for every group, by looking up blocks used. Signed-off-by: Li Dongyang <dongyangli@ddn.com> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20230925060801.1397581-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04e2fsck: check all sparse_super backupsAndreas Dilger5-51/+64
Teach e2fsck to look for backup super blocks in the "sparse_super" groups, by checking group #1 first and then powers of 3^n, 5^n, and 7^n, up to the limit of available block groups. Export ext2fs_list_backups() function to efficiently iterate groups for backup sb/GDT instead of checking every group. Ensure that the group counters do not try to overflow the 2^32-1 group limit, and try to limit scanning to the size of the block device (if available). Signed-off-by: Li Dongyang <dongyangli@ddn.com> Signed-off-by: Andreas Dilger <adilger@whamcloud.com> Link: https://lore.kernel.org/r/20230904045742.827584-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-04mke2fs: batch zeroing inode tableLi Dongyang1-7/+31
For flex_bg enabled fs, we could merge the inode table blocks into a contiguous range, this improves mke2fs time on large devices when lazy_itable_init is disabled. On a 977TB device, unpatched mke2fs was running for 449m10s before getting terminated manually. strace shows huge number of fallocate, given the offset from fallocate it has done 41% of the inode tables, the estimated time needed would be 1082m. unpatched patched real 449m10.954s 4m20.531s user 0m18.217s 0m16.147s sys 0m20.311s 0m8.944s Signed-off-by: Li Dongyang <dongyangli@ddn.com> Link: https://lore.kernel.org/r/20230904045806.827621-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-04-03libext2fs: always refuse to open a file system with a zero s_desc_sizemaintTheodore Ts'o5-5/+22
Commit 42c11edd0863 ("ext2fs_open[2](), return an error if s_desc_size is too large") added a check for an insanely large s_desc_size to prevent some failures triggered by fuzz testing. However, it would allow e2fsck to fall back to recover the file system by using the backup superblocks by having e2fsck pass the flag EXT2_FLAG_IGNORE_SB_ERRORS. But by allowing an s_desc_Size of zero, it's possible that e2fsck will die with a division of zero error. With this fix, e2fsck will now print an error message and exit instead. https://github.com/tytso/e2fsprogs/issues/183 Fixes: 42c11edd0863 ("ext2fs_open[2](), return an error if s_desc_size is too large") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-31Add post-2038 timestamp support to e2fsprogsAndreas Dilger29-147/+232
The ext4 kernel code implemented support for s_mtime_hi, s_wtime_hi, and related timestamp fields to avoid timestamp overflow in 2038, but similar handling is not in e2fsprogs. Add helper macros for the superblock _hi timestamp fields ext2fs_super_tstamp_get() and ext2fs_super_tstamp_set(). Add helper macro for inode _extra timestamp fields ext2fs_inode_xtime_get() and ext2fs_inode_xtime_set(). Add helper macro ext2fs_actual_inode_size() to avoid open coding the i_extra_isize check in multiple places. Remove inode_time_to_string() since this is unused once callers change to time_to_string(ext2fs_inode_xtime_get()) directly. Fix inode_includes() macro to properly wrap "inode" parameter, and rename to ext2fs_inode_includes() to avoid potential name clashes. Use this to check inode field inclusion in debugfs instead of bare constants for inode field offsets. Use these interfaces to access timestamps in debugfs, e2fsck, libext2fs, fuse2fs, tune2fs, and e2undo. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20230927054016.16645-1-adilger@dilger.ca Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-31libext2fs: fix ext2fs_get_device_size2() return value on WindowsEric Biggers3-32/+11
Creating a file system on Windows without a pre-existing file stopped working because the Windows version of ext2fs_get_device_size2() doesn't return ENOENT if the file doesn't exist. Fix this. Fixes: 53464654bd33 ("mke2fs: fix creating a file system image w/o a pre-existing file") Signed-off-by: Eric Biggers <ebiggers@google.com> Link: https://lore.kernel.org/r/20230301034518.373859-1-ebiggers@kernel.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-30debian: drop "package-supports-alternative-init-but-no-init.d-script" overrideTheodore Ts'o1-1/+0
The Lintian tag package-supports-alternative-init-but-no-init.d-script has been removed, as it's obsolete. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-30debian: acknowledge NMU'ed changes to 1.47.0-2.4Theodore Ts'o11-18/+96
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-28e2scrub: skip filesystems that don't have journalsDarrick J. Wong2-0/+11
Brian J. Murrell reported that e2scrub reports failures with one of his filesystems. From the email discussion after he supplied a metadump: AHA! This is an ext2 filesystem, since it doesn't have the "has_journal" or "extents" features turned on: # e2image -r /tmp/disk.qcow2 /dev/sda # dumpe2fs /dev/sda -h dumpe2fs 1.47.1~WIP-2023-12-27 (27-Dec-2023) Filesystem volume name: <none> Last mounted on: /opt Filesystem UUID: 2c70368a-0d54-4805-8620-fda19466d819 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: not clean with errors (Note: Filesystem state == "clean" means that EXT2_VALID_FS is set in the superblock s_state field; "not clean with errors" means that the flag is not set.) I bet the "journal only" preen doesn't actually reset the filesystem state either: # e2fsck -E journal_only -p /dev/sda # dumpe2fs /dev/sda -h | grep state dumpe2fs 1.47.1~WIP-2023-12-27 (27-Dec-2023) Filesystem state: not clean with errors Nope. So now I know what happened -- when mounting an ext* filesystem that doesn't have a journal, the driver clears EXT2_VALID_FS from the primary superblock. This forces the system to run e2fsck after a crash, because that's what you have to do for unjournalled filesystems. The "e2fsck -E journal_only -p" call in e2scrub only replays the journal. Since there is no journal, it exits almost immediately. That's the intended behavior, but then it means that the "e2fsck -fy" call immediately after sees that the superblock doesn't have EXT2_VALID_FS set, sets it, and makes e2fsck return 1. So that's why you're getting the e2scrub failures. Contrast this to what you get when the filesystem has a journal: # dumpe2fs -h /dev/sdb dumpe2fs 1.47.0 (5-Feb-2023) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: e18b8b57-a75e-4316-87ce-6a08969476c3 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Filesystems with journals retain their EXT4_VALID_FS state when they're mounted. Hmm. What e2scrub should do about unjournalled filesystems is a thorny question. My initial thought is that it should skip them, because a mounted unjournalled filesystem cannot by definition be kept consistent. Therefore, teach e2scrub_all to avoid them and e2scrub to fail them at the onset. Restricting the scope of e2scrub sucks, but in the meantime at least it means that your filesystem isn't massively corrupt. Thanks for the metadump, it was very useful for root cause analysis. Reported-by: "Brian J. Murrell" <brian@interlinx.bc.ca> Signed-off-by: Darrick J. Wong <djwong@kernel.org> Link: https://lore.kernel.org/r/20240110055809.GD722946@frogsfrogsfrogs Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-28debian: don't restart e2scrub_all when upgrading packageDarrick J. Wong1-0/+4
When installing or upgrading the e2fsprogs package, only start the e2scrub_all timer and the reaping service. Don't restart e2scrub_all itself, because that will kill any scrubs in progress, which will trigger the failure reporting. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Link: https://lore.kernel.org/r/20240110055724.GC722946@frogsfrogsfrogs Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-28e2scrub_fail: move executable script to /usr/libexecDarrick J. Wong6-11/+11
Per FHS 3.0, non-PATH executable binaries are supposed to live under /usr/libexec, not /usr/lib. e2scrub_fail is an executable script, so move it to libexec in case some distro some day tries to mount /usr/lib as noexec or something. Also, there's no reason why these scripts need to be put under an arch-dependent path. Cc: Neal Gompa <neal@gompa.dev> Link: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Neal Gompa <neal@gompa.dev> Link: https://lore.kernel.org/r/20231231203903.GC36164@frogsfrogsfrogs Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-28Merge branch 'e2scrub-fixes' of ↵Theodore Ts'o6-27/+36
https://git.kernel.org/pub/scm/linux/kernel/git/djwong/e2fsprogs into next
2024-03-28Merge branch 'maint' into nextTheodore Ts'o8-22/+32
2024-03-28e2fsck: fix various -Wall nits picked up by clangTheodore Ts'o3-6/+9
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-03-28blkid: fix -Wunused-but-set-variable warning in blkid_read_cache()Theodore Ts'o2-3/+8
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-02-08tune2fs: check whether filesystem is in use for I_flag and Q_flag testZhiqiang Liu1-4/+4
For changing inode size (-I) and setting quota fearture (-Q), tune2fs only check whether the filesystem is umounted. Considering mount namepspaces, the filesystem is umounted, however it already be left in other mount namespace. So we add one check whether the filesystem is not in use with using EXT2_MF_BUSY flag, which can indicate the device is already opened with O_EXCL, as suggested by Ted. Reported-by: Baokun Li <libaokun1@huawei.com> Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com> Signed-off-by: zhanchengbin <zhanchengbin1@huawei.com> Link: https://lore.kernel.org/r/28455341-ca26-d203-8b54-792bae002251@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-02-08ext2fs: make sure we have at least EXT2_FIRST_INO + 1 inodesLi Dongyang1-7/+9
When creating a small fs with 100 1k blocks, mke2fs fails with: Creating filesystem with 100 1k blocks and 8 inodes Allocating group tables: done Writing inode tables: done ext2fs_mkdir: Could not allocate inode in ext2 filesystem while creating /lost+found Increase s_inodes_per_group with a step of 8 to make sure we have at least EXT2_FIRST_INO + 1 inodes. Change-Id: Ib885735641dfa0ed9c6f6a4a1f9afec291673126 Signed-off-by: Li Dongyang <dongyangli@ddn.com> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20230720125012.641504-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-02-08e2image: correct group descriptors size in ext2fs_image_super_read()Emoly Liu1-2/+2
In function ext2fs_image_super_read(), the size of block group descriptors should be (fs->blocksize * fs->desc_blocks), but not (fs->blocksize * fs->group_desc_count). Signed-off-by: Emoly Liu <emoly@whamcloud.com> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20230714005958.442487-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-01-15debugfs: dx_hash: honor the unsigned hash flag if a file system is openedTheodore Ts'o1-0/+3
If we are using the hash seed and hash version from an open file systenm, then we should also use the unsigned version of the hash algorithm if the superblock as the unsigned hash flag set. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2024-01-15debugfs: teach the dx_hash command the -v optionTheodore Ts'o2-5/+30
Add an option for dx_hash to print more details about the hash algorithm and hash seed to calculate the directory hash value. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-20add libfuse3 support to fuse2fsDave Dykstra4-100/+584
2023-12-15e2fsprogs: don't allow udisks to automount ext4 filesystems with no promptDarrick J. Wong2-2/+23
The unending stream of syzbot bug reports and overwrought filing of CVEs for corner case handling (i.e. things that distract from actual user complaints) in ext4 has generated all sorts of of overheated rhetoric about how every bug is a Serious Security Issue(tm) because anyone can craft a malicious filesystem on a USB stick, insert the stick into a victim machine, and mount will trigger a bug in the kernel driver that leads to some compromise or DoS or something. I thought that nobody would be foolish enough to automount an ext4 filesystem. What a fool I was! It turns out that udisks can be told that it's okay to automount things, and then GNOME will do exactly that. Including mounting mangled ext4 filesystems! <delete angry rant about poor decisionmaking and armchair fs developers blasting us on X while not actually doing any of the work> Turn off /this/ idiocy by adding a udev rule to tell udisks not to automount ext4 filesystems. This will not stop a logged in user from unwittingly inserting a malicious storage device and pressing [mount] and getting breached. This is not a substitute for a thorough audit of all codebases. This is not a substitute for lklfuse. This does not solve the general problem of in-kernel fs drivers being a huge attack surface. I just want a vacation from the sh*tstorm of bad ideas and threat models that I never agreed to support. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2023-12-15e2scrub: fix pathname escaping across all service definitionsDarrick J. Wong4-25/+13
systemd services provide an "instance name" that can be associated with a particular invocation of a service. This allows service users to invoke multiple copies of a service, each with a unique string. For e2scrub, we pass the mountpoint of the filesystem as the instance name. However, systemd services aren't supposed to have slashes in them, so we're supposed to escape them. The canonical escaping scheme for pathnames is defined by the systemd-escape --path command. Unfortunately, we've been adding our own opinionated sauce for years, to work around the fact that --path didn't quite work right in systemd before January 2017. The special sauce is incorrect, and we no longer care about systemd of 7 years past. Clean up this mess by following the systemd escaping scheme throughout the service units. Now we can use the '%f' specifier in them, which makes things a lot less complicated. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2023-12-07Merge branch 'maint' into nextTheodore Ts'o4-20/+24
2023-12-02debugfs: Use the hash_version from superblock if a file system is openedSrivathsa Dara1-2/+9
The debugfs program's dx_hash command computes the hash for the given filename, taking the hash_seed and hash_version (i.e hash algorithm) as arguments. So the user has to refer to the superblock to get these values used by the filesystem. So if debugfs has an opened file system, use those values from the current file system. [ Fixed patch to avoid crashing when a file system is not opened. --TYT ] Signed-off-by: Srivathsa Dara <srivathsa.d.dara@oracle.com> Link: https://lore.kernel.org/r/20230824065634.2662858-1-srivathsa.d.dara@oracle.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-01tune2fs: fall back to old get/set fs label on errorLi Dongyang1-12/+7
If we fail to get/open the mount point for get/set fs label ioctl, just fall back to old method and silence the error messages. Fixes: f85b4526f ("tune2fs: implement support for set/get label iocts") Signed-off-by: Li Dongyang <dongyangli@ddn.com> Link: https://lore.kernel.org/r/20230520104329.2402182-1-dongyangli@ddn.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-01ext2fs: don't retry discard/zeroout repeatedlyAndreas Dilger2-18/+29
Call safe_getenv(UNIX_IO_NOZEROOUT) once when the device is opened and set CHANNEL_FLAG_NOZEROOUT if present instead of getting uid/euid/getenv every time unix_zeroout() is called. For unix_discard() and unix_zeroout() don't continue to call them if the block device doesn't support these operations. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/1683695929-26972-1-git-send-email-adilger@dilger.ca Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-01tune2fs/fuse2fs/debugfs: save error information during journal replayBaokun Li1-1/+16
Saving error information during journal replay, as in the kernel, prevents information loss from making problems difficult to locate. We save these error information until someone uses e2fsck to check for and fix possible errors. Signed-off-by: Baokun Li <libaokun1@huawei.com> Reviewed-by: zhanchengbin <zhanchengbin1@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20230217100922.588961-3-libaokun1@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-01e2fsck: save EXT2_ERROR_FS flag during journal replayBaokun Li1-0/+3
When repairing a file system with s_errno missing from the journal superblock but the file system superblock contains the ERROR_FS flag, the ERROR_FS flag on the file system image is overwritten after the journal replay, followed by a reload of the file system data from disk and the ERROR_FS flag in memory is overwritten. Also s_errno is not set and the ERROR_FS flag is not reset. Therefore, when checked later, no forced check is performed, which makes it possible to have some errors hidden in the disk image, which may make it read-only when using the file system. So we save the ERROR_FS flag to the superblock after the journal replay, instead of just relying on the jsb->s_errno to do this. Signed-off-by: Baokun Li <libaokun1@huawei.com> Reviewed-by: zhanchengbin <zhanchengbin1@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20230217100922.588961-2-libaokun1@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-12-01build: split version and release in configureAndreas Dilger3-19/+23
Update configure.ac to separate Version from Release if there is a '-' in version.h::E2FSPROGS_VERSION (e.g. "1.46.6-rc1"). Otherwise, the '-' in the version can make RPM building unhappy. Simplify the generation of E2FSPROGS_VERESION, E2FSPROGS_DATE and E2FSPROGS_DAY to avoid multiple grep/awk/sed/tr stages. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/1683694677-9366-1-git-send-email-adilger@dilger.ca Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-11-26mke2fs: Add root_perms extended mke2fs option.Dmitry Chestnykh4-1/+85
This options allows user to specify custom root dir permissions at FS creation time. If no perms are specified then the root dir permissions would be set to default. Signed-off-by: Dmitriy Chestnykh <dm.chestnykh@gmail.com>
2023-11-23fuse2fs: respect requested mode in mkdirSteven Luo1-1/+1
At the moment, op_mkdir() ORs the requested mode with fs->umask, which results in the group/other write permission bits always being cleared regardless of what the creating process requested. Instead, leave the requested mode alone so that the resulting directory has the permssions the creator expects. Signed-off-by: Steven Luo <steven@steven676.net>
2023-11-19tune2fs.c: define PATH_MAX if it is not defined by the system headersTheodore Ts'o1-1/+5
This is needed to compile on GNU/Hurd. Addresses-Debian-Bug: #1056145 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-11-19libe2p: remove tabs from "Inode size" and "Journal device" in `tune2fs -l` ↵Richard Fearn1-2/+2
output Fixes #165 Signed-off-by: Richard Fearn <richardfearn@gmail.com>
2023-08-25libext2fs: don't truncate the orphan file inode if it is newly allocatedTheodore Ts'o1-11/+10
In ext2fs_create_orphan_file(), don't try truncating inode for the orphan file if ext2fs_create_orphan_file() allocated the inode. This avoids problems where the newly allocated inode in the inode table might contain garbage; if the metadata checksum feature is enabled, this will generally result in the function failing with a checksum invalid error, but this can cause mke2fs (which calls ext2fs_create_orphan_file) to fail. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-08-09util: change git-ver to only use a version tag to describe git versionTheodore Ts'o1-1/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-08-08Merge branch 'maint' into nextTheodore Ts'o2-7/+92
2023-08-08e2fsprogs: modify dumpe2fs to report free block ranges for bigallocEric Whitney1-6/+6
dumpe2fs has never been modified to correctly report block ranges corresponding to free clusters in block allocation bitmaps from bigalloc file systems. Rather than reporting block ranges covering all the blocks in free clusters found in a block bitmap, it either reports just the first block number in a cluster for a single free cluster, or a range beginning with the first block number in the first cluster in a series of free clusters, and ending with the first block number in the last cluster in that series. This behavior causes xfstest shared/298 to fail when run on a bigalloc file system with a 1k block size. The test uses dumpe2fs to collect a list of the blocks freed when files are deleted from a file system. When the test deletes a file containing blocks located after the first block in the last cluster in a series of clusters, dumpe2fs does not report those blocks as free per the test's expectations. Modify dumpe2fs to report full block ranges for free clusters. At the same time, fix a small bug causing unnecessary !in_use() retests while iterating over a block bitmap. Signed-off-by: Eric Whitney <enwlinux@gmail.com> Link: https://lore.kernel.org/r/20230721185506.1020225-1-enwlinux@gmail.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-08-08debian: add missing copyright informationTheodore Ts'o1-1/+86
When the package-specific copyright information was removed, it resulted in some information being lost. It probably makes sence to have all of the licensing information in a single file, so add it back to the debian/copyright file. Fixes: 76f2e8d11582 ("debian: remove package-specific copyright notices") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-06-15Merge branch 'maint' into nextTheodore Ts'o6-1/+23
2023-06-15resize2fs: use Direct I/O when reading the superblock for online resizesTheodore Ts'o1-0/+2
If the file system is mounted, the superblock can be changing while resize2fs is trying to read the superblock, resulting in checksum failures. One way of avoiding this problem is read the superblock using Direct I/O, since the kernel makes sure that what gets written to disk is self-consistent. Suggested-by: Krister Johansen <kjlx@templeofstupid.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-06-14tests: add test for handling an invalid symlink in an inline directoryTheodore Ts'o4-0/+20
Add a test for the commit "e2fsck: fix handling of a invalid symlink in an inline_data directory" Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-06-14e2fsck: fix handling of a invalid symlink in an inline_data directoryTheodore Ts'o1-1/+1
If there is an inline directory that contains a directory entry to an invalid symlink, and that invalid symlink is the portion of the inline directory stored in an xattr portion of the inode, this can result in a buffer overrun. When check_dir_block() is handling the in-xattr portion of the inline directory, it sets the buf pointer to the beginning of that part of the inline directory. This results in the scratch buffer passed to e2fsck_process_bad_inode() to incorrect, resulting in a buffer overrun if e2fsck_pass1_check_symlink() needs to read the symlink target (when the symlink is too long to fit in the i_blocks[] space). This commit fixes this by using the original cd->buf instead of buf, since it can get modified when handling inline directories. Fixes: 0ac4b3973f31 ("e2fsck: inspect inline dir data as two directory blocks") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-05-31Merge branch 'maint' into nextTheodore Ts'o19-92/+205
2023-05-31libsupport: fix function prototype for quota_write_inode()Theodore Ts'o1-3/+2
Commit 2d2d799c7261 ("Clean up codes for adding new quota type") changed the second paramter of quota_write_inode() from taking a single quota type to taking a logical OR of (1 << quota_types). The one thing this commit didn't change was the function prototype for quota_write_inode() in the header file from an enum to an unsigned int. Most C compilers don't seem to mind, and omission is mostly harmless. However, mingw64 does issue a warning which gets promoted to an error. Fixes: 2d2d799c7261 ("Clean up codes for adding new quota type") Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-05-30ci.yml: test cross-compiling for AndroidEric Biggers1-0/+33
Add jobs that cross-compile e2fsprogs for Android using the Android NDK. These use the autotools-based build system, so they're a bit different from the actual Android builds, but they should still be useful. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-05-30e2freefrag: don't use linux/fsmap.h when fsmap_sizeof() is missingEric Biggers4-32/+70
Work around an issue with the Android NDK where its copy of linux/fsmap.h is missing the inline functions fsmap_sizeof() and fsmap_advance(). This was causing an error when building e2fsprogs using the Android NDK, using the autotools-based build system. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-05-30e2fsck: avoid -Wtautological-constant-out-of-range-compare warningsEric Biggers2-2/+4
Fix two compiler warnings on 32-bit platforms that have mallinfo() but not mallinfo2(). These showed up when building e2fsprogs for armv7a or i686 Android using the Android NDK, targeting Android API level 32 or lower and using the autotools-based build system. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-05-30e2fsck: Suppress "orphan file is clean" message in preen modeTheodore Ts'o2-2/+3
The e2fsck report, "Feature orphan_present is set but orphan file is clean" is intended to request permission before removing the r/o compat feature, orphan_present. However, it is normal if the orphan file is empty, and removing the r/o compat feature is a good thing so that the file system can be mounted on older kernels. When a file system with an orphan_file feature is mounted, the orphan_present feature is set, and it is cleared when the file system is cleanly unmounted. IF the sytstem crashes when there are no inodes in the orphan file, e2fsck should just silently clear the flag in preen mode. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-04-17libext2fs: fix filesystems larger than 2GB on WindowsSteffen Kieß1-5/+13
SetFilePointer requires the upper 32 bit of the position to be passed separately, which the code did not do, causing the position to be interpreted as a 32-bit value. Use SetFilePointerEx instead and pass the entire 64-bit value. Signed-off-by: Steffen Kieß <kiess@ki4.de>
2023-04-14blkidP.h: add missing extern "C" declarationTheodore Ts'o1-1/+4
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16tests: add test for "e2fsck: fix bad htree checksums in preen mode"Theodore Ts'o5-0/+14
Add a test for commit bbe08adac044 ("e2fsck: fix bad htree checksums in preen mode"). Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16e2fsck: restructure code to reduce indentation level in check_dir_block()Theodore Ts'o1-46/+46
No functional changes; just move things around so we can avoid indenting the code quite so much. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16e2fsck: fix bad htree checksums in preen modeTheodore Ts'o1-2/+14
We attempt to fix directories which have a bad/corrupted htree index node by completely rebuilding the directory htree nodes. Since this is a very safe thing to do and has no risk of losing directory entries, we've enabled this for preen mode. Unfortunately, subsequent index nodes look like empty directory entries that fill the entire block --- without a checksum at the end of the directory. So these nodes will be treated as a completely corrupted directory block, and this will *not* be fixed while in preen mode. So add code to treat an empty directory entry which covers the entire block as valid if the directory is already on the list of inodes to be rebuilt. Addresses-Gooogle-Bug: 178607853 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16ci.yml: store the config.h files as workflow artifactsEric Biggers1-0/+12
Store the config.h file for each platform as a workflow artifact, so that it will be possible to download them and compare them to util/android_config.h. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16tests: fix r_move_itable_realloc to run on LinuxAndreas Dilger2-2/+2
The check for the various unsupported OSes incorrectly checked if the string "FreeBSD" was true, which it always was. Fix this. Update the expect file as commit v1.46.4-17-g4ea80d031c7e did to adjust the total number of blocks requested during resize. Change-Id: I272dbec67ab30bac6413eb4cba0e3ab00183b893 Fixes: 5a3ea3905f ("tests: force test file systems to be built for Linux OS") Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-03-16tests: fix u_direct_io to work with older losetupAndreas Dilger2-4/+4
Older losetup does not have --sector-size, but this isn't really needed for the test to work. Instead specify the filesystem block size directly to mke2fs, so that it works on all distros instead of being skipped. Change-Id: I5a0c82a9efdefd1b48f4d4288998c7725c9ae71e Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-06Update release notes, etc., for the 1.47.0 releasev1.47.0Theodore Ts'o10-705/+975
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-06debian: update to standards version 4.6.2Theodore Ts'o1-1/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-05lib/ext2fs: fix unbalanced mutex unlock for BOUNCE_MTX in unix_ioRitesh Harjani (IBM)1-1/+0
f_crashdisk test failed with UNIX_IO_FORCE_BOUNCE=yes due to unbalanced mutex unlock in below path. This patch fixes it. Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-05Merge branch 'maint' into nextTheodore Ts'o9-334/+3
2023-02-02Fix date in the release notes for v1.46.6Theodore Ts'o1-1/+1
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02Update e2fsprogs.lsm for 1.46.6 releasev1.46.6Theodore Ts'o1-2/+2
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02debian: remove package-specific copyright noticesTheodore Ts'o7-331/+0
These are causing a large number of Lintian warnings "file-without-copyright-information". Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02Merge branch 'maint' into nextTheodore Ts'o49-8188/+9627
2023-02-02Update release notes, etc., for the 1.46.6 releaseTheodore Ts'o6-407/+539
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02config: update config.{guess,sub}Theodore Ts'o2-13/+36
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update zh_CN.po (from translationproject.org)Wenbin Lv1-618/+650
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update uk.po (from translationproject.org)Yuri Chornoivan1-617/+649
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update sv.po (from translationproject.org)Göran Uddeborg1-619/+640
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update sr.po (from translationproject.org)Мирослав Николић1-616/+649
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update pl.po (from translationproject.org)Jakub Bogusz1-618/+639
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update nl.po (from translationproject.org)Benno Schulenberg1-625/+661
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update ms.po (from translationproject.org)Sharuzzaman Ahmat Raslan1-674/+681
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update fr.po (from translationproject.org)Samuel Thibault1-617/+638
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update es.po (from translationproject.org)Antonio Ceballos1-617/+649
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update de.po (from translationproject.org)Mario Blättermann1-1223/+1479
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-02po: update cs.po (from translationproject.org)Petr Pisar1-617/+649
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01badblocks: fix operation with large-ish block sizes and/or countsCorey Hickey1-7/+8
test_rw() and test_nd() need to allocate two or three times the product of the block size and the block counts. This can overflow the signed int type of block_size and result in allocate_buffer() being called with a value smaller than intended. Once that buffer is written to, badblocks segfaults. Since allocate_buffer() accepts a size_t, change the input validation to use SIZE_MAX and cast accordingly when calculating the argument. Fixing the segfault allows larger values to be passed to read() and write(); these need to be cast to size_t as well in order to avoid a signed integer overflow causing failure, in which case badblocks would fall back to testing a single block at once. Before: $ misc/badblocks -w -b 4096 -c 524288 -e 1 -s -v /tmp/testfile.bin Checking for bad blocks in read-write mode From block 0 to 524287 Segmentation fault $ misc/badblocks -n -b 4096 -c 524288 -e 1 -s -v /tmp/testfile.bin Checking for bad blocks in non-destructive read-write mode From block 0 to 524287 Checking for bad blocks (non-destructive read-write test) Segmentation fault After: $ misc/badblocks -w -b 4096 -c 524288 -e 1 -s -v /tmp/testfile.bin Checking for bad blocks in read-write mode From block 0 to 524287 Testing with pattern 0xaa: done Reading and comparing: done Testing with pattern 0x55: done Reading and comparing: done Testing with pattern 0xff: done Reading and comparing: done Testing with pattern 0x00: done Reading and comparing: done Pass completed, 0 bad blocks found. (0/0/0 errors) $ misc/badblocks -n -b 4096 -c 524288 -e 1 -s -v /tmp/testfile.bin Checking for bad blocks in non-destructive read-write mode From block 0 to 524287 Checking for bad blocks (non-destructive read-write test) Testing with random pattern: done Pass completed, 0 bad blocks found. (0/0/0 errors) Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01badblocks: separate and improve error messages for blocks_at_onceCorey Hickey1-3/+6
Since the conditional checks the product of block_size and blocks_at_once, reporting that the problem is solely with blocks_at_once is misleading. Also change the error to use the name of the parameter listed in the manual rather than the variable name. Since blocks_at_once is unsigned, change the test to == rather than <=. Before: $ misc/badblocks -w -b 16777216 -c 524288 -e 1 -s -v /tmp/testfile.bin misc/badblocks: Invalid blocks_at_once: 524288 After: $ misc/badblocks -w -b 16777216 -c 524288 -e 1 -s -v /tmp/testfile.bin misc/badblocks: For block size 16777216, blocks_at_once too large: 524288 $ misc/badblocks -w -b 16777216 -c 0 -e 1 -s -v /tmp/testfile.bin misc/badblocks: Invalid number of blocks: 0 Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01badblocks: fix mis-printed error from block size checkCorey Hickey1-5/+5
block_size is parsed as an unsigned int from parse_uint(), so retain it as such until _after_ it has been constrained to a size within INT_MAX. Lower level code still requires this to be an int, so cast to int for anything below main(). Before: $ misc/badblocks -w -b 4294967295 -c 1 /tmp/testfile.bin misc/badblocks: Invalid block size: -1 After: $ misc/badblocks -w -b 4294967295 -c 1 /tmp/testfile.bin misc/badblocks: Invalid block size: 4294967295 Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01badblocks: print a more explanatory message when a parameter is too largeCorey Hickey1-2/+5
Before: $ misc/badblocks -w -b 4294967296 -c 1 /tmp/testfile.bin misc/badblocks: invalid block size - 4294967296 After: $ misc/badblocks -w -b 4294967296 -c 1 /tmp/testfile.bin misc/badblocks: block size too large - 4294967296 The original error is retained for invalid arguments, e.g.: $ misc/badblocks -w -b foo -c 1 /tmp/testfile.bin misc/badblocks: invalid block size - foo Signed-off-by: Corey Hickey <bugfood-c@fatooh.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01fuse2fs: support "fuse2fs -o offset=<bytes>"Matt Stark1-1/+6
This works the same way that mount -o offset=<bytes> works, and can be used to mount particular partitions from a whole disk image. Signed-off-by: Matt Stark <msta@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01ext2fs: Use 64bit lseek when _FILE_OFFSET_BITS is 64Khem Raj1-2/+2
Use lseek() with 64bit off_t when _FILE_OFFSET_BITS is 64 this fixes build with musl where there is no _llseek but lseek is using off_t which is 64bit on musl Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01Add option to enable/disable largefile supportKhem Raj4-5/+218
fallocate can be used to have 64bit off_t provided its compiled with _FILE_OFFSET_BITS=64 which will be added automatically when --enable-largefile is used. [ Run autoreconf to update configure and config.h.in -- TYT ] Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01libext2fs: reject opening a file system where the blocks per group < 8Theodore Ts'o1-1/+1
A file system where the superblock claims that the blocks per group is less than 8 is invalid, so let's reject it at ext2fs_open() time. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01Update Makefile dependenciesTheodore Ts'o2-0/+4
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01libext2fs: unix_io: fix_potential error path deadlock in flush_cached_blocks()Theodore Ts'o1-13/+48
We can't call the error handler while holding the CACHE_MUTEX (see previous commit, "libext2fs: unix_io: fix_potential error path deadlock in reuse_cache()" for details), so first try to write out all of the dirty blocks in the cache, and then for those where we had errors, then call the error handler. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01libext2fs: unix_io: fix potential error path deadlock in reuse_cache()Theodore Ts'o1-6/+69
This was reported by [1] but the fix was incorrect. The issue is that when unix_io was made thread-safe, it was necessary that to add a CACHE_MUTEX to protect multiple threads from potentially colliding with the very simple writeback cache used by the unix_io I/O manager. The original I/O manager was purposefully kept simple, used a fixed-size cache; accordingly, the locking used also kept simple, and used a single global mutex. [1] https://lore.kernel.org/r/310fb77f-dfed-1196-c4ee-30d5138ee5a2@huawei.com The problem was that if an application (such as e2fsck) registers a write error handler, that handler would be called with the CACHE_MUTEX still held, and if that application tried to do any I/O --- for example, closing the file system using ext2fs_close() and then exiting --- the application would deadlock. We should perhaps fix this either by deciding that the simple Unix I/O cache doesn't actually buy much beyond some system call overhead, or by putting in a full-fledged buffer I/O cache system which uses a much larger cache with allocated memory, fine-grained locking and Direct I/O to prevent double cache at the kernel and userspace level. However, for now, fix the problem by waiting until after we have released the CACHE_MUTEX before calling the write handler. This is good enough given how e2fsck's ehandler.c use case, and in practice no one else really uses the error handler in any case. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01libext2fs: unix_io: add flag which suppresses calling the write error handlerTheodore Ts'o1-8/+11
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-02-01AOSP: Android: run bpfmt on all bp filesEric Biggers6-7/+13
Ran the following command: bpfmt -w $(find . -name Android.bp) Change-Id: Ia08c8d481199dfa917dbed2dc218df167f101ce5 From AOSP commit: 30fa5b9af82695711cc1bf749fbb0cd18afa008a
2023-02-01AOSP: Android: consolidate warning suppressionsEric Biggers7-36/+13
For warnings not supported by upstream e2fsprogs, it's a waste of time to suppress them only in specific places, as they can show up anywhere in future releases of e2fsprogs. Let's consolidate all these warning suppressions into the top-level Android.bp for e2fsprogs. Change-Id: Icebc03289dae920cb1b673e605c48f7f2b517625 From AOSP commit: d08d59557a34c6362e3660e7e35bc118591dbbfa
2023-02-01AOSP: Android: stop suppressing warnings from macOS buildEric Biggers1-4/+0
This is no longer needed. Change-Id: Ie6a1c098a2e5b9db42c9a239ddfbf682cbd3bad2 From AOSP commit: 890e23673b7496bbf400e6bb5fd555bbb3c4b88f
2023-02-01AOSP: Android: stop suppressing warnings controlled by -WallEric Biggers7-14/+0
Upstream fully supports -Wall now. Change-Id: Ida895a1c5dfdf168bc6f50049680b2d2bfbb2942 From AOSP commit: 0ef947d1d4890b3fd4509bc1f3c98bb0f0a525f5
2023-02-01AOSP: Android: consolidate addition of include/mingw/Eric Biggers6-6/+3
To match what the autotools-based build system does now, always add include/mingw/ to the include path on Windows. I don't think this makes a real difference anywhere, but this is much simpler. Change-Id: I92fdaf3e58029dfca3187af928d943270b2a2109 From AOSP commit: c9aa74eac41f8feeabb2321383161c7cf92cb49b
2023-02-01AOSP: Android: add a new upstream source fileEric Biggers1-0/+1
Change-Id: Iafeccde9acca678e665b49a4cdb42ac0672e2a84 From AOSP commit: f22381d07818ff7e55e89698a1daf23ba2357d69
2023-02-01AOSP: lib/support: don't assume qsort_r() is always available on LinuxEric Biggers1-6/+6
Since commit 4e5f24ae4267 ("Use an autoconf test to detect for a BSD- or GNU-style qsort_r function"), e2fsck fails to build for Android because lib/support/sort_r.h assumes that qsort_r() is always available on "Linux", but in fact it's not supported by Android's libc. Rename _SORT_R_LINUX to _SORT_R_GNU to clarify that it's really the glibc convention for qsort_r(), not the "Linux" convention per se, and make sort_r.h stop setting it automatically when __linux__ is defined. Note: this change does *not* prevent glibc's qsort_r() from being used when e2fsprogs is built using the autotools-based build system, as 'configure' checks for qsort_r() too. This change just affects the fallback behavior for when qsort_r() was not already detected. Fixes: 4e5f24ae4267 ("Use an autoconf test to detect for a BSD- or GNU-style qsort_r function") Signed-off-by: Eric Biggers <ebiggers@google.com> Link: https://lore.kernel.org/r/20230130215829.863455-1-ebiggers@kernel.org Change-Id: I4ed2fd6aef5a0d62960988d29e35acd337bb7d02 From AOSP commit: 9f289d0add4f12fa2e4b21754141363a2759d152
2023-02-01AOSP: Stop explicitly specifying -fno-strict-aliasingEric Biggers3-3/+0
The upstream build system for e2fsprogs doesn't use -fno-strict-aliasing, so update the Android.bp files to match. Note: Android's build system currently uses -fno-strict-aliasing by default anyway, so this change doesn't actually enable strict aliasing. But that's a bit besides the point. The point is that this project doesn't need anything special, so we don't need to do anything special. Change-Id: Ifa637058fd95fdc2b6994a8b801b238e929c1f13 From AOSP commit: c30a15e5d615748d4824dec26f1bda1a86be979c
2023-02-01AOSP: mke2fs: stop suppressing warnings for Windows buildEric Biggers1-6/+0
The warning this was intended to suppress was already fixed by upstream commit 108f3021a6b6 ("mke2fs: use ext2fs_get_device_size2() on all platforms"). Test: mmm external/e2fsprogs Change-Id: I12de1b58e839658568c2f7cd30f1c2a227fe15f2 From AOSP commit: 7c581e836497595d0748953eb2b533777d9f4fd4
2023-01-31AOSP: e2fsdroid: stop disabling address sanitizationEric Biggers1-3/+0
Address sanitization was disabled in e2fsdroid over 5 years ago, due to a bug in libext2fs. However, that bug has long since been fixed by upstream commit 689b7be2da01 ("libext2fs: avoid dereferencing beyond allocated memory in xattr code"). So it should be fine to re-enable address sanitization now. Bug: 68387795 Change-Id: I89a7a1ec1a45d0a2ed76d2e5938dbc127eb267a6 From AOSP commit: c3b223fedcb94e5763c48b93a4445289d13a5eb0
2023-01-31AOSP: Update lib/ext2fs/Android.bp for upstream changeEric Biggers1-0/+2
Compile windows_io.c on Windows, and unix_io.c everywhere else. Change-Id: Ieab0b9ad5a9f7c275153e0f90553761693967762 Signed-off-by: Eric Biggers <ebiggers@google.com> From AOSP commit: 0c82cec0d1aa70c993b5231a2c2244eb5175e638
2023-01-31AOSP: mke2fs.microdroid: Allow non-APEX version of libsShikha Panwar1-5/+37
Microdroid uses mke2fs to format encryptedstore partition. This happens in parallel to apex activation by apexd. Hence, sometime, mke2fs would fail if some linker libraries are not available. Create a target (mke2fs.microdroid) with bootstrap: true Bug: 238179332 Test: Build succeeds & atest MicrodroidTests#encryptedStorageAvailable Change-Id: I1aa493bfc188bb78e21efe98423f4a79215f7d95 From AOSP commit: 54818f635e4249db903dd17fca22ae11b3c0f3a0
2023-01-31AOSP: Create blkid_staticDennis Shen1-0/+16
static_apexer_tools depends on deapexer which depends on blkid. So we need a static version of blkid. BUG: b/257933023 TEST: local build of blkid_static Change-Id: I191840a21df1c10f4371acbe8067f39f148f28b8 From AOSP commit: 2aa5b65667e71bc278117caffa46c331d75d2803
2023-01-31AOSP: Make blkid host_supportedDennis Shen1-0/+1
We need blkid in deapexer to get the filesystem type of the payload image. However, blkid will not be installed to host out dir unless we make it host_supported which is what this change is about. BUG: b/255963179, b/240288941 TEST: m deapexer; then check out/host/linux-x86/bin Change-Id: I46c1e18b9dbdbeb41c7dfe4e26496004d1b2b3de From AOSP commit: f12ebffc345741380d9a30ddac528a9b995657cd
2023-01-31e4defrag: avoid potential buffer overflow caused by very long file namesTheodore Ts'o1-3/+4
Addresses-Coverity-Bug: 1520603 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-01-31debian: make the copyright file machine readableViraj Shah5-166/+592
Debian introduced a machine-readable copyright file a while ago. Convert the general copyright file and the package-specific ones, splitting the info that belongs to the package-specific ones. Drop debian/e2fsck-static.copyright because that does not have a file set that is very distinct from the general source; it would just replicate parts of it. This change adds some missing licenses that have to be documented according to Debian Policy §12.5 as well as the copyright info for many files. Signed-off-by: Viraj Shah <viraj.shah@linutronix.de> Signed-off-by: Bastian Germann <bage@linutronix.de> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-01-31dict: Add modifification note required by licenseBastian Germann2-0/+2
The Kazlib license says: "Permission is also granted to adapt this software to produce derivative works, as long as the modified versions carry this copyright notice and additional notices stating that the work has been modified." Add the missing notice stating that the work has been modified. Signed-off-by: Bastian Germann <bage@linutronix.de> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-01-30Merge branch 'maint' into nextTheodore Ts'o38-79/+149
2023-01-30ci.yml: use actions/checkout@v3 to switch to using Node 16Theodore Ts'o1-7/+7
This suppresses deprecation warnings from github saying that Node 12 has been deprecated and actions to migrate to using Node 16. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-01-30lib/uuid: remove unneeded Windows UUID workaroundEric Biggers4-19/+0
Some .c files in lib/uuid/ contain the following: #ifdef _WIN32 #define _WIN32_WINNT 0x0500 #include <windows.h> #define UUID MYUUID #endif This seems to have been intended to allow the use of a local "UUID" type without colliding with "UUID" in the Windows API. However, this is unnecessary because there's no local "UUID" type -- there's only uuid_t. None of these .c files need the include of windows.h, either. Finally, the unconditional definition of _WIN32_WINNT causes a compiler warning when the user defines _WIN32_WINNT themself. Since this code is unnecessary and is causing problems, just remove it. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2023-01-30lib/ext2fs: don't warn about lack of getmntent on WindowsEric Biggers2-2/+1
It is expected that Windows doesn't have getmntent(), so don't warn about it. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>