Re: [PATCH 3/3] ext4: implemet new ioctls to set and get superblock parameters
From: kernel test robot <hidden>
Date: 2025-09-09 21:35:55
Also in:
linux-ext4, oe-kbuild-all
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@intel.com/config) compiler: csky-linux-gcc (GCC) 10.5.0 reproduce: (https://download.01.org/0day-ci/archive/20250910/202509100550.fj5qrPH5-lkp@intel.com/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 [off-list ref] | Closes: https://lore.kernel.org/oe-kbuild-all/202509100550.fj5qrPH5-lkp@intel.com/ (local) sparse warnings: (new ones prefixed by >>)
quoted
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
quoted
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