[ammarfaizi2-block:google/android/kernel/common/android-trusty-5.4 2537/6879] fs/incfs/vfs.c:1307:37: sparse: sparse: non size-preserving integer to pointer cast

From: kernel test robot
Date: Wed Mar 02 2022 - 20:15:14 EST


tree: https://github.com/ammarfaizi2/linux-block google/android/kernel/common/android-trusty-5.4
head: d556bac5a4d65c759ce3c5a7529aef568f05f650
commit: 383f53ee186a22c3d04cc6809e3b5e13bc2b571d [2537/6879] ANDROID: Incremental fs: Remove unneeded compatibility typedef
config: i386-randconfig-s001-20211124 (https://download.01.org/0day-ci/archive/20220303/202203030947.eI7d79Mg-lkp@xxxxxxxxx/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://github.com/ammarfaizi2/linux-block/commit/383f53ee186a22c3d04cc6809e3b5e13bc2b571d
git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block google/android/kernel/common/android-trusty-5.4
git checkout 383f53ee186a22c3d04cc6809e3b5e13bc2b571d
# save the config file to linux build tree
mkdir build_dir
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash fs/incfs/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
>> fs/incfs/vfs.c:1307:37: sparse: sparse: non size-preserving integer to pointer cast
fs/incfs/vfs.c:2054:23: sparse: sparse: cast truncates bits from constant value (5346434e49 becomes 46434e49)

vim +1307 fs/incfs/vfs.c

1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1138
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1139 static long ioctl_create_file(struct mount_info *mi,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1140 struct incfs_new_file_args __user *usr_args)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1141 {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1142 struct incfs_new_file_args args;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1143 char *file_id_str = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1144 struct dentry *index_file_dentry = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1145 struct dentry *named_file_dentry = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1146 struct path parent_dir_path = {};
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1147 struct inode *index_dir_inode = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1148 __le64 size_attr_value = 0;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1149 char *file_name = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1150 char *attr_value = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1151 int error = 0;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1152 bool locked = false;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1153
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1154 if (!mi || !mi->mi_index_dir) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1155 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1156 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1157 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1158 if (!access_ok(usr_args, sizeof(args))) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1159 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1160 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1161 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1162 if (copy_from_user(&args, usr_args, sizeof(args)) > 0) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1163 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1164 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1165 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1166
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1167 file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1168 if (IS_ERR(file_name)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1169 error = PTR_ERR(file_name);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1170 file_name = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1171 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1172 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1173
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1174 error = validate_name(file_name);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1175 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1176 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1177
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1178 file_id_str = file_id_to_str(args.file_id);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1179 if (!file_id_str) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1180 error = -ENOMEM;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1181 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1182 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1183
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1184 error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1185 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1186 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1187 locked = true;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1188
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1189 /* Find a directory to put the file into. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1190 error = dir_relative_path_resolve(mi,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1191 u64_to_user_ptr(args.directory_path),
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1192 &parent_dir_path);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1193 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1194 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1195
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1196 if (parent_dir_path.dentry == mi->mi_index_dir) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1197 /* Can't create a file directly inside .index */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1198 error = -EBUSY;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1199 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1200 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1201
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1202 /* Look up a dentry in the parent dir. It should be negative. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1203 named_file_dentry = incfs_lookup_dentry(parent_dir_path.dentry,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1204 file_name);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1205 if (!named_file_dentry) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1206 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1207 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1208 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1209 if (IS_ERR(named_file_dentry)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1210 error = PTR_ERR(named_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1211 named_file_dentry = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1212 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1213 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1214 if (d_really_is_positive(named_file_dentry)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1215 /* File with this path already exists. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1216 error = -EEXIST;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1217 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1218 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1219 /* Look up a dentry in the .index dir. It should be negative. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1220 index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1221 if (!index_file_dentry) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1222 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1223 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1224 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1225 if (IS_ERR(index_file_dentry)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1226 error = PTR_ERR(index_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1227 index_file_dentry = NULL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1228 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1229 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1230 if (d_really_is_positive(index_file_dentry)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1231 /* File with this ID already exists in index. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1232 error = -EEXIST;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1233 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1234 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1235
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1236 /* Creating a file in the .index dir. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1237 index_dir_inode = d_inode(mi->mi_index_dir);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1238 inode_lock_nested(index_dir_inode, I_MUTEX_PARENT);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1239 error = vfs_create(index_dir_inode, index_file_dentry,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1240 args.mode, true);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1241 inode_unlock(index_dir_inode);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1242
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1243 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1244 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1245 if (!d_really_is_positive(index_file_dentry)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1246 error = -EINVAL;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1247 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1248 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1249
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1250 /* Save the file's ID as an xattr for easy fetching in future. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1251 error = vfs_setxattr(index_file_dentry, INCFS_XATTR_ID_NAME,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1252 file_id_str, strlen(file_id_str), XATTR_CREATE);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1253 if (error) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1254 pr_debug("incfs: vfs_setxattr err:%d\n", error);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1255 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1256 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1257
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1258 /* Save the file's size as an xattr for easy fetching in future. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1259 size_attr_value = cpu_to_le64(args.size);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1260 error = vfs_setxattr(index_file_dentry, INCFS_XATTR_SIZE_NAME,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1261 (char *)&size_attr_value, sizeof(size_attr_value),
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1262 XATTR_CREATE);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1263 if (error) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1264 pr_debug("incfs: vfs_setxattr err:%d\n", error);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1265 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1266 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1267
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1268 /* Save the file's attrubute as an xattr */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1269 if (args.file_attr_len && args.file_attr) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1270 if (args.file_attr_len > INCFS_MAX_FILE_ATTR_SIZE) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1271 error = -E2BIG;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1272 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1273 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1274
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1275 attr_value = kmalloc(args.file_attr_len, GFP_NOFS);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1276 if (!attr_value) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1277 error = -ENOMEM;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1278 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1279 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1280
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1281 if (!access_ok(u64_to_user_ptr(args.file_attr),
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1282 args.file_attr_len)) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1283 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1284 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1285 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1286
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1287 if (copy_from_user(attr_value,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1288 u64_to_user_ptr(args.file_attr),
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1289 args.file_attr_len) > 0) {
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1290 error = -EFAULT;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1291 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1292 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1293
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1294 error = vfs_setxattr(index_file_dentry,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1295 INCFS_XATTR_METADATA_NAME,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1296 attr_value, args.file_attr_len,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1297 XATTR_CREATE);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1298
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1299 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1300 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1301 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1302
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1303 /* Initializing a newly created file. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1304 error = init_new_file(mi, index_file_dentry, &args.file_id, args.size,
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1305 range(attr_value, args.file_attr_len),
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1306 (struct incfs_file_signature_info __user *)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 @1307 args.signature_info);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1308 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1309 goto delete_index_file;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1310
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1311 /* Linking a file with it's real name from the requested dir. */
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1312 error = incfs_link(index_file_dentry, named_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1313
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1314 if (!error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1315 goto out;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1316
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1317 delete_index_file:
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1318 incfs_unlink(index_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1319
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1320 out:
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1321 if (error)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1322 pr_debug("incfs: %s err:%d\n", __func__, error);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1323
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1324 kfree(file_id_str);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1325 kfree(file_name);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1326 kfree(attr_value);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1327 dput(named_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1328 dput(index_file_dentry);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1329 path_put(&parent_dir_path);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1330 if (locked)
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1331 mutex_unlock(&mi->mi_dir_struct_mutex);
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1332 return error;
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1333 }
1be052b20ba04b6 Eugene Zemtsov 2019-11-18 1334

:::::: The code at line 1307 was first introduced by commit
:::::: 1be052b20ba04b635cf87bcff80de5314697953e ANDROID: Initial commit of Incremental FS

:::::: TO: Eugene Zemtsov <ezemtsov@xxxxxxxxxx>
:::::: CC: Paul Lawrence <paullawrence@xxxxxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx