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:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -1891,8 +1891,8 @@ int partition_pick_mount_options(
|
||||
|
||||
/* The ESP might contain a pre-boot random seed. Let's make this unaccessible to regular
|
||||
* userspace. ESP/XBOOTLDR is almost certainly VFAT, hence if we don't know assume it is. */
|
||||
if (!fstype || fstype_can_umask(fstype))
|
||||
if (!strextend_with_separator(&options, ",", "umask=0077"))
|
||||
if (!fstype || fstype_can_fmask_dmask(fstype))
|
||||
if (!strextend_with_separator(&options, ",", "fmask=0177,dmask=0077"))
|
||||
return -ENOMEM;
|
||||
break;
|
||||
|
||||
|
||||
@@ -389,9 +389,9 @@ TEST(fstype_can_norecovery) {
|
||||
ASSERT_NULL(fstype_norecovery_option("tmpfs"));
|
||||
}
|
||||
|
||||
TEST(fstype_can_umask) {
|
||||
assert_se(fstype_can_umask("vfat"));
|
||||
assert_se(!fstype_can_umask("tmpfs"));
|
||||
TEST(fstype_can_fmask_dmask) {
|
||||
assert_se(fstype_can_fmask_dmask("vfat"));
|
||||
assert_se(!fstype_can_fmask_dmask("tmpfs"));
|
||||
}
|
||||
|
||||
TEST(path_get_mnt_id_at_null) {
|
||||
|
||||
Reference in New Issue
Block a user