generic: deny write to uImage.FIT sub-image partitions
authorDaniel Golle <daniel@makrotopia.org>
Tue, 11 Jan 2022 00:00:36 +0000 (00:00 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 11 Jan 2022 00:06:16 +0000 (00:06 +0000)
Set policy bit to force read-only mode on uImage.FIT filesystem
sub-images mapped as block partitions by the FIT partition parser.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/generic/files/block/partitions/fit.c
target/linux/generic/hack-5.10/410-block-fit-partition-parser.patch

index a0aa0eadf537545c88b89734f5ea78b800d6939b..fa73e64af81e1fdcf901d891f8fddb0f42972e79 100644 (file)
@@ -230,7 +230,7 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector,
                strlcat(state->pp_buf, tmp, PAGE_SIZE);
 
                state->parts[*slot].has_info = true;
-
+               state->parts[*slot].flags |= ADDPART_FLAG_READONLY;
                if (config_loadables && !strcmp(image_name, config_loadables)) {
                        printk(KERN_DEBUG "FIT: selecting configured loadable \"%s\" to be root filesystem\n", image_name);
                        state->parts[*slot].flags |= ADDPART_FLAG_ROOTDEV;
index c0b3c253394c19bc23c8a7587bcf32169fd2721a..bc48296d9c9fb4a5ecd203caa87fcac4d7dac757 100644 (file)
@@ -1,10 +1,11 @@
 --- a/block/blk.h
 +++ b/block/blk.h
-@@ -361,6 +361,7 @@ char *disk_name(struct gendisk *hd, int
+@@ -361,6 +361,8 @@ char *disk_name(struct gendisk *hd, int
  #define ADDPART_FLAG_NONE     0
  #define ADDPART_FLAG_RAID     1
  #define ADDPART_FLAG_WHOLEDISK        2
-+#define ADDPART_FLAG_ROOTDEV  4
++#define ADDPART_FLAG_READONLY 4
++#define ADDPART_FLAG_ROOTDEV  8
  void delete_partition(struct hd_struct *part);
  int bdev_add_partition(struct block_device *bdev, int partno,
                sector_t start, sector_t length);
  #ifdef CONFIG_SGI_PARTITION
        sgi_partition,
  #endif
-@@ -694,6 +701,11 @@ static bool blk_add_partition(struct gen
+@@ -694,6 +701,14 @@ static bool blk_add_partition(struct gen
            (state->parts[p].flags & ADDPART_FLAG_RAID))
                md_autodetect_dev(part_to_dev(part)->devt);
  
 +#ifdef CONFIG_FIT_PARTITION
 +      if ((state->parts[p].flags & ADDPART_FLAG_ROOTDEV) && ROOT_DEV == 0)
 +              ROOT_DEV = part_to_dev(part)->devt;
++
++      if (state->parts[p].flags & ADDPART_FLAG_READONLY)
++              part->policy = true;
 +#endif
 +
        return true;