Re: [PATCH 3/3] ext4: implemet new ioctls to set and get superblock parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


(追記) (追記ここまで)



Hi Theodore,
kernel test robot noticed the following build warnings:
[auto build test WARNING on b320789d6883cc00ac78ce83bccbfe7ed58afcf0]
url: https://github.com/intel-lab-lkp/linux/commits/Theodore-Ts-o-via-B4-Relay/ext4-avoid-potential-buffer-over-read-in-parse_apply_sb_mount_options/20250909-111746
base: b320789d6883cc00ac78ce83bccbfe7ed58afcf0
patch link: https://lore.kernel.org/r/20250908-tune2fs-v1-3-e3a6929f3355%40mit.edu
patch subject: [PATCH 3/3] ext4: implemet new ioctls to set and get superblock parameters
config: csky-randconfig-r123-20250910 (https://download.01.org/0day-ci/archive/20250910/202509100550.fj5qrPH5-lkp@xxxxxxxxx/config)
compiler: csky-linux-gcc (GCC) 10.5.0
reproduce: (https://download.01.org/0day-ci/archive/20250910/202509100550.fj5qrPH5-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509100550.fj5qrPH5-lkp@xxxxxxxxx/
sparse warnings: (new ones prefixed by >>)
>> fs/ext4/ioctl.c:1255:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [addressable] [assigned] [usertype] errors_behavior @@ got restricted __le16 [usertype] s_errors @@
 fs/ext4/ioctl.c:1255:29: sparse: expected unsigned short [addressable] [assigned] [usertype] errors_behavior
 fs/ext4/ioctl.c:1255:29: sparse: got restricted __le16 [usertype] s_errors
>> fs/ext4/ioctl.c:1267:33: sparse: sparse: cast to restricted __le16
>> fs/ext4/ioctl.c:1267:33: sparse: sparse: cast from restricted __le32
>> fs/ext4/ioctl.c:1323:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] s_raid_stripe_width @@ got restricted __le16 [usertype] @@
 fs/ext4/ioctl.c:1323:41: sparse: expected restricted __le32 [usertype] s_raid_stripe_width
 fs/ext4/ioctl.c:1323:41: sparse: got restricted __le16 [usertype]
 fs/ext4/ioctl.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: cast removes address space '__user' of expression
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: asm output is not an lvalue
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: cast removes address space '__user' of expression
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: cast removes address space '__user' of expression
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: asm output is not an lvalue
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: cast removes address space '__user' of expression
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: generating address of non-lvalue (11)
 arch/csky/include/asm/uaccess.h:110:17: sparse: sparse: generating address of non-lvalue (11)
vim +1255 fs/ext4/ioctl.c
 1235	
 1236	
 1237	#define TUNE_OPS_SUPPORTED (EXT4_TUNE_FL_ERRORS_BEHAVIOR | \
 1238		EXT4_TUNE_FL_MNT_COUNT | EXT4_TUNE_FL_MAX_MNT_COUNT | \
 1239		EXT4_TUNE_FL_CHECKINTRVAL | EXT4_TUNE_FL_LAST_CHECK_TIME | \
 1240		EXT4_TUNE_FL_RESERVED_BLOCKS | EXT4_TUNE_FL_RESERVED_UID | \
 1241		EXT4_TUNE_FL_RESERVED_GID | EXT4_TUNE_FL_DEFAULT_MNT_OPTS | \
 1242		EXT4_TUNE_FL_DEF_HASH_ALG | EXT4_TUNE_FL_RAID_STRIDE | \
 1243		EXT4_TUNE_FL_RAID_STRIPE_WIDTH | EXT4_TUNE_FL_MOUNT_OPTS | \
 1244		EXT4_TUNE_FL_FEATURES | EXT4_TUNE_FL_EDIT_FEATURES | \
 1245		EXT4_TUNE_FL_FORCE_FSCK)
 1246	
 1247	static int ext4_ioctl_get_tune_sb(struct ext4_sb_info *sbi,
 1248					 struct ext4_tune_sb_params __user *params)
 1249	{
 1250		struct ext4_tune_sb_params ret;
 1251		struct ext4_super_block *es = sbi->s_es;
 1252	
 1253		memset(&ret, 0, sizeof(ret));
 1254		ret.set_flags = TUNE_OPS_SUPPORTED;
> 1255		ret.errors_behavior = es->s_errors;
 1256		ret.mnt_count = le16_to_cpu(es->s_mnt_count);
 1257		ret.max_mnt_count = le16_to_cpu(es->s_max_mnt_count);
 1258		ret.checkinterval = le32_to_cpu(es->s_checkinterval);
 1259		ret.last_check_time = le32_to_cpu(es->s_lastcheck);
 1260		ret.reserved_blocks = ext4_r_blocks_count(es);
 1261		ret.blocks_count = ext4_blocks_count(es);
 1262		ret.reserved_uid = ext4_get_resuid(es);
 1263		ret.reserved_gid = ext4_get_resgid(es);
 1264		ret.default_mnt_opts = le32_to_cpu(es->s_default_mount_opts);
 1265		ret.def_hash_alg = es->s_def_hash_version;
 1266		ret.raid_stride = le16_to_cpu(es->s_raid_stride);
> 1267		ret.raid_stripe_width = le16_to_cpu(es->s_raid_stripe_width);
 1268		strscpy_pad(ret.mount_opts, es->s_mount_opts);
 1269		ret.feature_compat = le32_to_cpu(es->s_feature_compat);
 1270		ret.feature_incompat = le32_to_cpu(es->s_feature_incompat);
 1271		ret.feature_ro_compat = le32_to_cpu(es->s_feature_ro_compat);
 1272		ret.set_feature_compat_mask = EXT4_TUNE_SET_COMPAT_SUPP;
 1273		ret.set_feature_incompat_mask = EXT4_TUNE_SET_INCOMPAT_SUPP;
 1274		ret.set_feature_ro_compat_mask = EXT4_TUNE_SET_RO_COMPAT_SUPP;
 1275		ret.clear_feature_compat_mask = EXT4_TUNE_CLEAR_COMPAT_SUPP;
 1276		ret.clear_feature_incompat_mask = EXT4_TUNE_CLEAR_INCOMPAT_SUPP;
 1277		ret.clear_feature_ro_compat_mask = EXT4_TUNE_CLEAR_RO_COMPAT_SUPP;
 1278		if (copy_to_user(params, &ret, sizeof(ret)))
 1279			return -EFAULT;
 1280		return 0;
 1281	}
 1282	
 1283	static void ext4_sb_setparams(struct ext4_sb_info *sbi,
 1284				 struct ext4_super_block *es, const void *arg)
 1285	{
 1286		const struct ext4_tune_sb_params *params = arg;
 1287	
 1288		if (params->set_flags & EXT4_TUNE_FL_ERRORS_BEHAVIOR)
 1289			es->s_errors = cpu_to_le16(params->errors_behavior);
 1290		if (params->set_flags & EXT4_TUNE_FL_MNT_COUNT)
 1291			es->s_mnt_count = cpu_to_le16(params->mnt_count);
 1292		if (params->set_flags & EXT4_TUNE_FL_MAX_MNT_COUNT)
 1293			es->s_max_mnt_count = cpu_to_le16(params->max_mnt_count);
 1294		if (params->set_flags & EXT4_TUNE_FL_CHECKINTRVAL)
 1295			es->s_checkinterval = cpu_to_le32(params->checkinterval);
 1296		if (params->set_flags & EXT4_TUNE_FL_LAST_CHECK_TIME)
 1297			es->s_lastcheck = cpu_to_le32(params->last_check_time);
 1298		if (params->set_flags & EXT4_TUNE_FL_RESERVED_BLOCKS) {
 1299			ext4_fsblk_t blk = params->reserved_blocks;
 1300	
 1301			es->s_r_blocks_count_lo = cpu_to_le32((u32)blk);
 1302			es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
 1303		}
 1304		if (params->set_flags & EXT4_TUNE_FL_RESERVED_UID) {
 1305			int uid = params->reserved_uid;
 1306	
 1307			es->s_def_resuid = cpu_to_le16(uid & 0xFFFF);
 1308			es->s_def_resuid_hi = cpu_to_le16(uid >> 16);
 1309		}
 1310		if (params->set_flags & EXT4_TUNE_FL_RESERVED_GID) {
 1311			int gid = params->reserved_gid;
 1312	
 1313			es->s_def_resgid = cpu_to_le16(gid & 0xFFFF);
 1314			es->s_def_resgid_hi = cpu_to_le16(gid >> 16);
 1315		}
 1316		if (params->set_flags & EXT4_TUNE_FL_DEFAULT_MNT_OPTS)
 1317			es->s_default_mount_opts = cpu_to_le32(params->default_mnt_opts);
 1318		if (params->set_flags & EXT4_TUNE_FL_DEF_HASH_ALG)
 1319			es->s_def_hash_version = params->def_hash_alg;
 1320		if (params->set_flags & EXT4_TUNE_FL_RAID_STRIDE)
 1321			es->s_raid_stride = cpu_to_le16(params->raid_stride);
 1322		if (params->set_flags & EXT4_TUNE_FL_RAID_STRIPE_WIDTH)
> 1323			es->s_raid_stripe_width =
 1324				cpu_to_le16(params->raid_stripe_width);
 1325		strscpy_pad(es->s_mount_opts, params->mount_opts);
 1326		if (params->set_flags & EXT4_TUNE_FL_EDIT_FEATURES) {
 1327			es->s_feature_compat |=
 1328				cpu_to_le32(params->set_feature_compat_mask);
 1329			es->s_feature_incompat |=
 1330				cpu_to_le32(params->set_feature_incompat_mask);
 1331			es->s_feature_ro_compat |=
 1332				cpu_to_le32(params->set_feature_ro_compat_mask);
 1333			es->s_feature_compat &=
 1334				~cpu_to_le32(params->clear_feature_compat_mask);
 1335			es->s_feature_incompat &=
 1336				~cpu_to_le32(params->clear_feature_incompat_mask);
 1337			es->s_feature_ro_compat &=
 1338				~cpu_to_le32(params->clear_feature_ro_compat_mask);
 1339			if (params->set_feature_compat_mask &
 1340			 EXT4_FEATURE_COMPAT_DIR_INDEX)
 1341				es->s_def_hash_version = sbi->s_def_hash_version;
 1342			if (params->set_feature_incompat_mask &
 1343			 EXT4_FEATURE_INCOMPAT_CSUM_SEED)
 1344				es->s_checksum_seed = cpu_to_le32(sbi->s_csum_seed);
 1345		}
 1346		if (params->set_flags & EXT4_TUNE_FL_FORCE_FSCK)
 1347			es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
 1348	}
 1349	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

[Index of Archives] [Linux USB Devel] [Video for Linux] [Linux Audio Users] [Yosemite News] [Linux Kernel] [Linux SCSI]

(追記) (追記ここまで)
Powered by Linux

AltStyle によって変換されたページ (->オリジナル) /