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