linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Chao Yu <yuchao0@huawei.com>,
	Gao Xiang <gaoxiang25@huawei.com>
Subject: [PATCH 4.19 80/90] staging: erofs: add requirements field in superblock
Date: Mon, 24 Jun 2019 17:57:10 +0800	[thread overview]
Message-ID: <20190624092319.173827456@linuxfoundation.org> (raw)
In-Reply-To: <20190624092313.788773607@linuxfoundation.org>

From: Gao Xiang <gaoxiang25@huawei.com>

commit 5efe5137f05bbb4688890620934538c005e7d1d6 upstream.

There are some backward incompatible features pending
for months, mainly due to on-disk format expensions.

However, we should ensure that it cannot be mounted with
old kernels. Otherwise, it will causes unexpected behaviors.

Fixes: ba2b77a82022 ("staging: erofs: add super block operations")
Cc: <stable@vger.kernel.org> # 4.19+
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/erofs/erofs_fs.h |   13 ++++++++++---
 drivers/staging/erofs/internal.h |    2 ++
 drivers/staging/erofs/super.c    |   19 +++++++++++++++++++
 3 files changed, 31 insertions(+), 3 deletions(-)

--- a/drivers/staging/erofs/erofs_fs.h
+++ b/drivers/staging/erofs/erofs_fs.h
@@ -17,10 +17,16 @@
 #define EROFS_SUPER_MAGIC_V1    0xE0F5E1E2
 #define EROFS_SUPER_OFFSET      1024
 
+/*
+ * Any bits that aren't in EROFS_ALL_REQUIREMENTS should be
+ * incompatible with this kernel version.
+ */
+#define EROFS_ALL_REQUIREMENTS  0
+
 struct erofs_super_block {
 /*  0 */__le32 magic;           /* in the little endian */
 /*  4 */__le32 checksum;        /* crc32c(super_block) */
-/*  8 */__le32 features;
+/*  8 */__le32 features;        /* (aka. feature_compat) */
 /* 12 */__u8 blkszbits;         /* support block_size == PAGE_SIZE only */
 /* 13 */__u8 reserved;
 
@@ -34,9 +40,10 @@ struct erofs_super_block {
 /* 44 */__le32 xattr_blkaddr;
 /* 48 */__u8 uuid[16];          /* 128-bit uuid for volume */
 /* 64 */__u8 volume_name[16];   /* volume name */
+/* 80 */__le32 requirements;    /* (aka. feature_incompat) */
 
-/* 80 */__u8 reserved2[48];     /* 128 bytes */
-} __packed;
+/* 84 */__u8 reserved2[44];
+} __packed;                     /* 128 bytes */
 
 #define __EROFS_BIT(_prefix, _cur, _pre)	enum {	\
 	_prefix ## _cur ## _BIT = _prefix ## _pre ## _BIT + \
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -111,6 +111,8 @@ struct erofs_sb_info {
 
 	u8 uuid[16];                    /* 128-bit uuid for volume */
 	u8 volume_name[16];             /* volume name */
+	u32 requirements;
+
 	char *dev_name;
 
 	unsigned int mount_opt;
--- a/drivers/staging/erofs/super.c
+++ b/drivers/staging/erofs/super.c
@@ -75,6 +75,22 @@ static void destroy_inode(struct inode *
 	call_rcu(&inode->i_rcu, i_callback);
 }
 
+static bool check_layout_compatibility(struct super_block *sb,
+				       struct erofs_super_block *layout)
+{
+	const unsigned int requirements = le32_to_cpu(layout->requirements);
+
+	EROFS_SB(sb)->requirements = requirements;
+
+	/* check if current kernel meets all mandatory requirements */
+	if (requirements & (~EROFS_ALL_REQUIREMENTS)) {
+		errln("unidentified requirements %x, please upgrade kernel version",
+		      requirements & ~EROFS_ALL_REQUIREMENTS);
+		return false;
+	}
+	return true;
+}
+
 static int superblock_read(struct super_block *sb)
 {
 	struct erofs_sb_info *sbi;
@@ -108,6 +124,9 @@ static int superblock_read(struct super_
 		goto out;
 	}
 
+	if (!check_layout_compatibility(sb, layout))
+		goto out;
+
 	sbi->blocks = le32_to_cpu(layout->blocks);
 	sbi->meta_blkaddr = le32_to_cpu(layout->meta_blkaddr);
 #ifdef CONFIG_EROFS_FS_XATTR



  parent reply	other threads:[~2019-06-24 10:06 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-24  9:55 [PATCH 4.19 00/90] 4.19.56-stable review Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 01/90] tracing: Silence GCC 9 array bounds warning Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 02/90] objtool: Support per-function rodata sections Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 03/90] gcc-9: silence address-of-packed-member warning Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 04/90] ovl: support the FS_IOC_FS[SG]ETXATTR ioctls Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 05/90] ovl: fix wrong flags check in " Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 06/90] ovl: make i_ino consistent with st_ino in more cases Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 07/90] ovl: detect overlapping layers Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 08/90] ovl: dont fail with disconnected lower NFS Greg Kroah-Hartman
2019-06-24  9:55 ` [PATCH 4.19 09/90] ovl: fix bogus -Wmaybe-unitialized warning Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 10/90] s390/jump_label: Use "jdd" constraint on gcc9 Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 11/90] s390/ap: rework assembler functions to use unions for in/out register variables Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 12/90] mmc: sdhci: sdhci-pci-o2micro: Correctly set bus width when tuning Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 13/90] mmc: core: API to temporarily disable retuning for SDIO CRC errors Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 14/90] mmc: core: Add sdio_retune_hold_now() and sdio_retune_release() Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 15/90] mmc: core: Prevent processing SDIO IRQs when the card is suspended Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 16/90] scsi: ufs: Avoid runtime suspend possibly being blocked forever Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 17/90] usb: chipidea: udc: workaround for endpoint conflict issue Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 18/90] xhci: detect USB 3.2 capable host controllers correctly Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 19/90] usb: xhci: Dont try to recover an endpoint if port is in error state Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 20/90] IB/hfi1: Validate fault injection opcode user input Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 21/90] IB/hfi1: Silence txreq allocation warnings Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 22/90] iio: temperature: mlx90632 Relax the compatibility check Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 23/90] Input: synaptics - enable SMBus on ThinkPad E480 and E580 Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 24/90] Input: uinput - add compat ioctl number translation for UI_*_FF_UPLOAD Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 25/90] Input: silead - add MSSL0017 to acpi_device_id Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 26/90] apparmor: fix PROFILE_MEDIATES for untrusted input Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 27/90] apparmor: enforce nullbyte at end of tag string Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 28/90] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 29/90] brcmfmac: sdio: Dont tune while the card is off Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 30/90] ARC: fix build warnings Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 31/90] dmaengine: dw-axi-dmac: fix null dereference when pointer first is null Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 32/90] dmaengine: sprd: Fix block length overflow Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 33/90] ARC: [plat-hsdk]: Add missing multicast filter bins number to GMAC node Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 34/90] ARC: [plat-hsdk]: Add missing FIFO size entry in " Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 35/90] fpga: dfl: afu: Pass the correct device to dma_mapping_error() Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 36/90] fpga: dfl: Add lockdep classes for pdata->lock Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 37/90] parport: Fix mem leak in parport_register_dev_model Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 38/90] parisc: Fix compiler warnings in float emulation code Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 39/90] IB/rdmavt: Fix alloc_qpn() WARN_ON() Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 40/90] IB/hfi1: Insure freeze_work work_struct is canceled on shutdown Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 41/90] IB/{qib, hfi1, rdmavt}: Correct ibv_devinfo max_mr value Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 42/90] IB/hfi1: Validate page aligned for a given virtual address Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 43/90] MIPS: uprobes: remove set but not used variable epc Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 44/90] xtensa: Fix section mismatch between memblock_reserve and mem_reserve Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 45/90] kselftest/cgroup: fix unexpected testing failure on test_memcontrol Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 46/90] kselftest/cgroup: fix unexpected testing failure on test_core Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 47/90] kselftest/cgroup: fix incorrect test_core skip Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 48/90] selftests: vm: install test_vmalloc.sh for run_vmtests Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 49/90] net: dsa: mv88e6xxx: avoid error message on remove from VLAN 0 Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 50/90] net: hns: Fix loopback test failed at copper ports Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 51/90] mdesc: fix a missing-check bug in get_vdev_port_node_info() Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 52/90] sparc: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 53/90] net: ethernet: mediatek: Use hw_feature to judge if HWLRO is supported Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 54/90] net: ethernet: mediatek: Use NET_IP_ALIGN to judge if HW RX_2BYTE_OFFSET is enabled Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 55/90] drm/arm/mali-dp: Add a loop around the second set CVAL and try 5 times Greg Kroah-Hartman
2019-06-26  7:56   ` Pavel Machek
2019-06-26 10:22     ` Liviu Dudau
2019-06-24  9:56 ` [PATCH 4.19 56/90] drm/arm/hdlcd: Actually validate CRTC modes Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 57/90] drm/arm/hdlcd: Allow a bit of clock tolerance Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 58/90] nvmet: fix data_len to 0 for bdev-backed write_zeroes Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 59/90] scripts/checkstack.pl: Fix arm64 wrong or unknown architecture Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 60/90] scsi: ufs: Check that space was properly alloced in copy_query_response Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 61/90] scsi: smartpqi: unlock on error in pqi_submit_raid_request_synchronous() Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 62/90] net: ipvlan: Fix ipvlan device tso disabled while NETIF_F_IP_CSUM is set Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 63/90] s390/qeth: fix VLAN attribute in bridge_hostnotify udev event Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 64/90] hwmon: (core) add thermal sensors only if dev->of_node is present Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 65/90] hwmon: (pmbus/core) Treat parameters as paged if on multiple pages Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 66/90] arm64: Silence gcc warnings about arch ABI drift Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 67/90] nvme: Fix u32 overflow in the number of namespace list calculation Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 68/90] btrfs: start readahead also in seed devices Greg Kroah-Hartman
2019-06-24  9:56 ` [PATCH 4.19 69/90] can: xilinx_can: use correct bittiming_const for CAN FD core Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 70/90] can: flexcan: fix timeout when set small bitrate Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 71/90] can: purge socket error queue on sock destruct Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 72/90] riscv: mm: synchronize MMU after pte change Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 73/90] powerpc/bpf: use unsigned division instruction for 64-bit operations Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 74/90] ARM: imx: cpuidle-imx6sx: Restrict the SW2ISO increase to i.MX6SX Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 75/90] ARM: dts: dra76x: Update MMC2_HS200_MANUAL1 iodelay values Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 76/90] ARM: dts: am57xx-idk: Remove support for voltage switching for SD card Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 77/90] arm64/sve: <uapi/asm/ptrace.h> should not depend on <uapi/linux/prctl.h> Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 78/90] arm64: ssbd: explicitly depend on <linux/prctl.h> Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 79/90] drm/vmwgfx: Use the backdoor port if the HB port is not available Greg Kroah-Hartman
2019-06-24  9:57 ` Greg Kroah-Hartman [this message]
2019-06-24  9:57 ` [PATCH 4.19 81/90] Bluetooth: Align minimum encryption key size for LE and BR/EDR connections Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 82/90] Bluetooth: Fix regression with minimum encryption key size alignment Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 83/90] SMB3: retry on STATUS_INSUFFICIENT_RESOURCES instead of failing write Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 84/90] cfg80211: fix memory leak of wiphy device name Greg Kroah-Hartman
2019-06-25 21:51   ` Pavel Machek
2019-06-25 22:33     ` Eric Biggers
2019-06-24  9:57 ` [PATCH 4.19 85/90] mac80211: drop robust management frames from unknown TA Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 86/90] {nl,mac}80211: allow 4addr AP operation on crypto controlled devices Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 87/90] mac80211: handle deauthentication/disassociation from TDLS peer Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 88/90] nl80211: fix station_info pertid memory leak Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 89/90] mac80211: Do not use stack memory with scatterlist for GMAC Greg Kroah-Hartman
2019-06-24  9:57 ` [PATCH 4.19 90/90] x86/resctrl: Dont stop walking closids when a locksetup group is found Greg Kroah-Hartman
2019-06-24 15:11 ` [PATCH 4.19 00/90] 4.19.56-stable review kernelci.org bot
2019-06-25  0:14 ` Guenter Roeck
2019-06-25  0:43 ` Naresh Kamboju
2019-06-25 10:00 ` Jon Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190624092319.173827456@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=gaoxiang25@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=yuchao0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).