dissect-image: mount the ESP with fmask=0177 (#35871)

Avoid showing the files on the ESP (i.e. a FAT formatted volume) as
executable by removing the execute permission from them.

IMO this makes the colored output of `ls` more sensible since the file
system will be mounted with `noexec` anyway.

Add a `fstype_can_fmask_dmask` function that checks if a file system
type can use the `fmask` and `dmask` mount options.

This replaces `fstype_can_umask` since it was only used in
`partition_pick_mount_options` which only cares about the file system
support for fmask & dmask now.

It somewhat reduces the coverage of the feature since there are more file
systems that support umask as opposed to those supporting dmask & dmask,
but it should not be much of an issue since fmask & dmask are supported
by vfat, exfat and ntfs3.
This commit is contained in:
nl6720
2025-01-08 15:19:33 +01:00
committed by GitHub
parent dcb29a931c
commit 96963e5615
4 changed files with 8 additions and 8 deletions
+2 -2
View File
@@ -560,13 +560,13 @@ const char* fstype_norecovery_option(const char *fstype) {
return mount_option_supported(fstype, "norecovery", NULL) > 0 ? "norecovery" : NULL;
}
bool fstype_can_umask(const char *fstype) {
bool fstype_can_fmask_dmask(const char *fstype) {
assert(fstype);
/* Use a curated list as first check, to avoid calling fsopen() which might load kmods, which might
* not be allowed in our MAC context. If we don't know ourselves, on new kernels we can just ask the
* kernel. */
return streq(fstype, "vfat") || mount_option_supported(fstype, "umask", "0077") > 0;
return streq(fstype, "vfat") || (mount_option_supported(fstype, "fmask", "0177") > 0 && mount_option_supported(fstype, "dmask", "0077") > 0);
}
bool fstype_can_uid_gid(const char *fstype) {
+1 -1
View File
@@ -62,7 +62,7 @@ bool fstype_is_blockdev_backed(const char *fstype);
bool fstype_is_ro(const char *fsype);
bool fstype_can_discard(const char *fstype);
bool fstype_can_uid_gid(const char *fstype);
bool fstype_can_umask(const char *fstype);
bool fstype_can_fmask_dmask(const char *fstype);
const char* fstype_norecovery_option(const char *fstype);