tree: https://android.googlesource.com/kernel/common android-4.19 head: 99e4db371753bde7471e024dff8d11c8ba946cef commit: 99e4db371753bde7471e024dff8d11c8ba946cef [6/6] ANDROID: Incremental fs: Remove unneeded compatibility typedef config: i386-randconfig-s002-20210503 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-341-g8af24329-dirty git remote add android-common https://android.googlesource.com/kernel/common git fetch --no-tags android-common android-4.19 git checkout 99e4db371753bde7471e024dff8d11c8ba946cef # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> fs/incfs/vfs.c:1306:37: sparse: sparse: non size-preserving integer to pointer cast fs/incfs/vfs.c:2053:23: sparse: sparse: cast truncates bits from constant value (5346434e49 becomes 46434e49) In file included from fs/incfs/vfs.c:22: fs/incfs/data_mgmt.h: In function 'get_incfs_node': fs/incfs/data_mgmt.h:263:27: warning: comparison is always true due to limited range of data type [-Wtype-limits] 263 | if (inode->i_sb->s_magic != INCFS_MAGIC_NUMBER) { | ^~ fs/incfs/vfs.c: In function 'ioctl_create_file': fs/incfs/vfs.c:1305:4: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 1305 | (struct incfs_file_signature_info __user *) | ^ In file included from fs/incfs/vfs.c:19: fs/incfs/vfs.c: In function 'incfs_mount_fs': include/uapi/linux/incrementalfs.h:21:28: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '357661101641' to '1178816073' [-Woverflow] 21 | #define INCFS_MAGIC_NUMBER (0x5346434e49ul) | ^ fs/incfs/vfs.c:2053:16: note: in expansion of macro 'INCFS_MAGIC_NUMBER' 2053 | sb->s_magic = INCFS_MAGIC_NUMBER; | ^~~~~~~~~~~~~~~~~~ vim +1306 fs/incfs/vfs.c 040942fc50b203 Eugene Zemtsov 2019-11-18 1137 040942fc50b203 Eugene Zemtsov 2019-11-18 1138 static long ioctl_create_file(struct mount_info *mi, 040942fc50b203 Eugene Zemtsov 2019-11-18 1139 struct incfs_new_file_args __user *usr_args) 040942fc50b203 Eugene Zemtsov 2019-11-18 1140 { 040942fc50b203 Eugene Zemtsov 2019-11-18 1141 struct incfs_new_file_args args; 040942fc50b203 Eugene Zemtsov 2019-11-18 1142 char *file_id_str = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1143 struct dentry *index_file_dentry = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1144 struct dentry *named_file_dentry = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1145 struct path parent_dir_path = {}; 040942fc50b203 Eugene Zemtsov 2019-11-18 1146 struct inode *index_dir_inode = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1147 __le64 size_attr_value = 0; 040942fc50b203 Eugene Zemtsov 2019-11-18 1148 char *file_name = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1149 char *attr_value = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1150 int error = 0; 040942fc50b203 Eugene Zemtsov 2019-11-18 1151 bool locked = false; 040942fc50b203 Eugene Zemtsov 2019-11-18 1152 040942fc50b203 Eugene Zemtsov 2019-11-18 1153 if (!mi || !mi->mi_index_dir) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1154 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1155 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1156 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1157 if (!access_ok(VERIFY_READ, usr_args, sizeof(args))) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1158 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1159 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1160 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1161 if (copy_from_user(&args, usr_args, sizeof(args)) > 0) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1162 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1163 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1164 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1165 040942fc50b203 Eugene Zemtsov 2019-11-18 1166 file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX); 040942fc50b203 Eugene Zemtsov 2019-11-18 1167 if (IS_ERR(file_name)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1168 error = PTR_ERR(file_name); 040942fc50b203 Eugene Zemtsov 2019-11-18 1169 file_name = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1170 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1171 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1172 040942fc50b203 Eugene Zemtsov 2019-11-18 1173 error = validate_name(file_name); 040942fc50b203 Eugene Zemtsov 2019-11-18 1174 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1175 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1176 040942fc50b203 Eugene Zemtsov 2019-11-18 1177 file_id_str = file_id_to_str(args.file_id); 040942fc50b203 Eugene Zemtsov 2019-11-18 1178 if (!file_id_str) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1179 error = -ENOMEM; 040942fc50b203 Eugene Zemtsov 2019-11-18 1180 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1181 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1182 040942fc50b203 Eugene Zemtsov 2019-11-18 1183 error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex); 040942fc50b203 Eugene Zemtsov 2019-11-18 1184 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1185 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1186 locked = true; 040942fc50b203 Eugene Zemtsov 2019-11-18 1187 040942fc50b203 Eugene Zemtsov 2019-11-18 1188 /* Find a directory to put the file into. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1189 error = dir_relative_path_resolve(mi, 040942fc50b203 Eugene Zemtsov 2019-11-18 1190 u64_to_user_ptr(args.directory_path), 040942fc50b203 Eugene Zemtsov 2019-11-18 1191 &parent_dir_path); 040942fc50b203 Eugene Zemtsov 2019-11-18 1192 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1193 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1194 040942fc50b203 Eugene Zemtsov 2019-11-18 1195 if (parent_dir_path.dentry == mi->mi_index_dir) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1196 /* Can't create a file directly inside .index */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1197 error = -EBUSY; 040942fc50b203 Eugene Zemtsov 2019-11-18 1198 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1199 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1200 040942fc50b203 Eugene Zemtsov 2019-11-18 1201 /* Look up a dentry in the parent dir. It should be negative. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1202 named_file_dentry = incfs_lookup_dentry(parent_dir_path.dentry, 040942fc50b203 Eugene Zemtsov 2019-11-18 1203 file_name); 040942fc50b203 Eugene Zemtsov 2019-11-18 1204 if (!named_file_dentry) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1205 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1206 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1207 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1208 if (IS_ERR(named_file_dentry)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1209 error = PTR_ERR(named_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1210 named_file_dentry = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1211 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1212 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1213 if (d_really_is_positive(named_file_dentry)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1214 /* File with this path already exists. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1215 error = -EEXIST; 040942fc50b203 Eugene Zemtsov 2019-11-18 1216 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1217 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1218 /* Look up a dentry in the .index dir. It should be negative. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1219 index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str); 040942fc50b203 Eugene Zemtsov 2019-11-18 1220 if (!index_file_dentry) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1221 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1222 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1223 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1224 if (IS_ERR(index_file_dentry)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1225 error = PTR_ERR(index_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1226 index_file_dentry = NULL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1227 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1228 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1229 if (d_really_is_positive(index_file_dentry)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1230 /* File with this ID already exists in index. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1231 error = -EEXIST; 040942fc50b203 Eugene Zemtsov 2019-11-18 1232 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1233 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1234 040942fc50b203 Eugene Zemtsov 2019-11-18 1235 /* Creating a file in the .index dir. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1236 index_dir_inode = d_inode(mi->mi_index_dir); 040942fc50b203 Eugene Zemtsov 2019-11-18 1237 inode_lock_nested(index_dir_inode, I_MUTEX_PARENT); 040942fc50b203 Eugene Zemtsov 2019-11-18 1238 error = vfs_create(index_dir_inode, index_file_dentry, 040942fc50b203 Eugene Zemtsov 2019-11-18 1239 args.mode, true); 040942fc50b203 Eugene Zemtsov 2019-11-18 1240 inode_unlock(index_dir_inode); 040942fc50b203 Eugene Zemtsov 2019-11-18 1241 040942fc50b203 Eugene Zemtsov 2019-11-18 1242 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1243 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1244 if (!d_really_is_positive(index_file_dentry)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1245 error = -EINVAL; 040942fc50b203 Eugene Zemtsov 2019-11-18 1246 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1247 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1248 040942fc50b203 Eugene Zemtsov 2019-11-18 1249 /* Save the file's ID as an xattr for easy fetching in future. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1250 error = vfs_setxattr(index_file_dentry, INCFS_XATTR_ID_NAME, 040942fc50b203 Eugene Zemtsov 2019-11-18 1251 file_id_str, strlen(file_id_str), XATTR_CREATE); 040942fc50b203 Eugene Zemtsov 2019-11-18 1252 if (error) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1253 pr_debug("incfs: vfs_setxattr err:%d\n", error); 040942fc50b203 Eugene Zemtsov 2019-11-18 1254 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1255 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1256 040942fc50b203 Eugene Zemtsov 2019-11-18 1257 /* Save the file's size as an xattr for easy fetching in future. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1258 size_attr_value = cpu_to_le64(args.size); 040942fc50b203 Eugene Zemtsov 2019-11-18 1259 error = vfs_setxattr(index_file_dentry, INCFS_XATTR_SIZE_NAME, 040942fc50b203 Eugene Zemtsov 2019-11-18 1260 (char *)&size_attr_value, sizeof(size_attr_value), 040942fc50b203 Eugene Zemtsov 2019-11-18 1261 XATTR_CREATE); 040942fc50b203 Eugene Zemtsov 2019-11-18 1262 if (error) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1263 pr_debug("incfs: vfs_setxattr err:%d\n", error); 040942fc50b203 Eugene Zemtsov 2019-11-18 1264 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1265 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1266 040942fc50b203 Eugene Zemtsov 2019-11-18 1267 /* Save the file's attrubute as an xattr */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1268 if (args.file_attr_len && args.file_attr) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1269 if (args.file_attr_len > INCFS_MAX_FILE_ATTR_SIZE) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1270 error = -E2BIG; 040942fc50b203 Eugene Zemtsov 2019-11-18 1271 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1272 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1273 040942fc50b203 Eugene Zemtsov 2019-11-18 1274 attr_value = kmalloc(args.file_attr_len, GFP_NOFS); 040942fc50b203 Eugene Zemtsov 2019-11-18 1275 if (!attr_value) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1276 error = -ENOMEM; 040942fc50b203 Eugene Zemtsov 2019-11-18 1277 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1278 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1279 040942fc50b203 Eugene Zemtsov 2019-11-18 1280 if (!access_ok(VERIFY_READ, u64_to_user_ptr(args.file_attr), 040942fc50b203 Eugene Zemtsov 2019-11-18 1281 args.file_attr_len)) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1282 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1283 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1284 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1285 040942fc50b203 Eugene Zemtsov 2019-11-18 1286 if (copy_from_user(attr_value, 040942fc50b203 Eugene Zemtsov 2019-11-18 1287 u64_to_user_ptr(args.file_attr), 040942fc50b203 Eugene Zemtsov 2019-11-18 1288 args.file_attr_len) > 0) { 040942fc50b203 Eugene Zemtsov 2019-11-18 1289 error = -EFAULT; 040942fc50b203 Eugene Zemtsov 2019-11-18 1290 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1291 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1292 040942fc50b203 Eugene Zemtsov 2019-11-18 1293 error = vfs_setxattr(index_file_dentry, 040942fc50b203 Eugene Zemtsov 2019-11-18 1294 INCFS_XATTR_METADATA_NAME, 040942fc50b203 Eugene Zemtsov 2019-11-18 1295 attr_value, args.file_attr_len, 040942fc50b203 Eugene Zemtsov 2019-11-18 1296 XATTR_CREATE); 040942fc50b203 Eugene Zemtsov 2019-11-18 1297 040942fc50b203 Eugene Zemtsov 2019-11-18 1298 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1299 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1300 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1301 040942fc50b203 Eugene Zemtsov 2019-11-18 1302 /* Initializing a newly created file. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1303 error = init_new_file(mi, index_file_dentry, &args.file_id, args.size, 040942fc50b203 Eugene Zemtsov 2019-11-18 1304 range(attr_value, args.file_attr_len), 040942fc50b203 Eugene Zemtsov 2019-11-18 1305 (struct incfs_file_signature_info __user *) 040942fc50b203 Eugene Zemtsov 2019-11-18 @1306 args.signature_info); 040942fc50b203 Eugene Zemtsov 2019-11-18 1307 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1308 goto delete_index_file; 040942fc50b203 Eugene Zemtsov 2019-11-18 1309 040942fc50b203 Eugene Zemtsov 2019-11-18 1310 /* Linking a file with it's real name from the requested dir. */ 040942fc50b203 Eugene Zemtsov 2019-11-18 1311 error = incfs_link(index_file_dentry, named_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1312 040942fc50b203 Eugene Zemtsov 2019-11-18 1313 if (!error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1314 goto out; 040942fc50b203 Eugene Zemtsov 2019-11-18 1315 040942fc50b203 Eugene Zemtsov 2019-11-18 1316 delete_index_file: 040942fc50b203 Eugene Zemtsov 2019-11-18 1317 incfs_unlink(index_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1318 040942fc50b203 Eugene Zemtsov 2019-11-18 1319 out: 040942fc50b203 Eugene Zemtsov 2019-11-18 1320 if (error) 040942fc50b203 Eugene Zemtsov 2019-11-18 1321 pr_debug("incfs: %s err:%d\n", __func__, error); 040942fc50b203 Eugene Zemtsov 2019-11-18 1322 040942fc50b203 Eugene Zemtsov 2019-11-18 1323 kfree(file_id_str); 040942fc50b203 Eugene Zemtsov 2019-11-18 1324 kfree(file_name); 040942fc50b203 Eugene Zemtsov 2019-11-18 1325 kfree(attr_value); 040942fc50b203 Eugene Zemtsov 2019-11-18 1326 dput(named_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1327 dput(index_file_dentry); 040942fc50b203 Eugene Zemtsov 2019-11-18 1328 path_put(&parent_dir_path); 040942fc50b203 Eugene Zemtsov 2019-11-18 1329 if (locked) 040942fc50b203 Eugene Zemtsov 2019-11-18 1330 mutex_unlock(&mi->mi_dir_struct_mutex); 040942fc50b203 Eugene Zemtsov 2019-11-18 1331 return error; 040942fc50b203 Eugene Zemtsov 2019-11-18 1332 } 040942fc50b203 Eugene Zemtsov 2019-11-18 1333 :::::: The code at line 1306 was first introduced by commit :::::: 040942fc50b20325bb56737c32b303268bb6f35c ANDROID: Initial commit of Incremental FS :::::: TO: Eugene Zemtsov :::::: CC: Paul Lawrence --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org