From d1c489f6ac587671ac1ae264972e6dd69e21cd5f Mon Sep 17 00:00:00 2001 From: Roman Sobanski Date: Wed, 25 Apr 2018 11:25:06 +0200 Subject: [PATCH 8/9] Prevent create IMSM volume with size smaller than 1M or chunk Block creation of the imsm volume when given size is smaller than 1M and print appropriate message. Commit b53bfba6119d3f6f56eb9e10e5a59da6901af159 (imsm: use rounded size for metadata initialization) introduces issue with rounding volume sizes smaller than 1M to 0. There is an inconsistency when size smaller than 1M was given depends of what we give as target device: 1) When block devices was given created volume has maximum available size. 2) When container symlink was given created volume has size 0. Additionally it causes below call trace: [69587.891556] WARNING: CPU: 28 PID: 22485 at ../drivers/md/md.c:7582 md_seq_show+0x764/0x770 [md_mod] [69588.066405] Call Trace: [69588.066409] seq_read+0x336/0x430 [69588.066411] proc_reg_read+0x40/0x70 [69588.066412] __vfs_read+0x26/0x140 [69588.066414] vfs_read+0x89/0x130 [69588.066415] SyS_read+0x42/0x90 [69588.066417] do_syscall_64+0x74/0x140 [69588.066419] entry_SYSCALL_64_after_hwframe+0x3d/0xa2 Signed-off-by: Roman Sobanski Signed-off-by: Jes Sorensen Gbp-Pq: Name 0008-Prevent-create-IMSM-volume-with-size-smaller-than-1M.patch --- super-intel.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'super-intel.c') diff --git a/super-intel.c b/super-intel.c index c55c85f1..520abf5d 100644 --- a/super-intel.c +++ b/super-intel.c @@ -7358,6 +7358,16 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout, verbose); } + if (size && ((size < 1024) || (*chunk != UnSet && + size < (unsigned long long) *chunk))) { + pr_err("Given size must be greater than 1M and chunk size.\n"); + /* Depends on algorithm in Create.c : + * if container was given (dev == NULL) return -1, + * if block device was given ( dev != NULL) return 0. + */ + return dev ? -1 : 0; + } + if (!dev) { if (st->sb) { struct intel_super *super = st->sb; -- cgit v1.2.3