[paragon-software-group-ntfs3:master 11/13] fs/ntfs3/super.c:1473:40: sparse: sparse: incorrect type in initializer (different base types)

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

 



tree:   https://github.com/Paragon-Software-Group/linux-ntfs3.git master
head:   21b6b5bc6774720b8298d9e362bec01a53ec693b
commit: ad4d82df0d44e558d23aba1954040e9b531796c4 [11/13] fs/ntfs3: Optimize to store sorted attribute definition table
config: parisc-randconfig-r133-20240418 (https://download.01.org/0day-ci/archive/20240418/202404181111.Wz8a1qX6-lkp@xxxxxxxxx/config)
compiler: hppa-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20240418/202404181111.Wz8a1qX6-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/202404181111.Wz8a1qX6-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
   fs/ntfs3/super.c:465:23: sparse: sparse: unknown escape sequence: '%'
>> fs/ntfs3/super.c:1473:40: sparse: sparse: incorrect type in initializer (different base types) @@     expected restricted __le16 const [usertype] *src @@     got unsigned short [usertype] *upcase @@
   fs/ntfs3/super.c:1473:40: sparse:     expected restricted __le16 const [usertype] *src
   fs/ntfs3/super.c:1473:40: sparse:     got unsigned short [usertype] *upcase

vim +1473 fs/ntfs3/super.c

  1339	
  1340		/* Check bitmap boundary. */
  1341		tt = sbi->used.bitmap.nbits;
  1342		if (inode->i_size < bitmap_size(tt)) {
  1343			ntfs_err(sb, "$Bitmap is corrupted.");
  1344			err = -EINVAL;
  1345			goto put_inode_out;
  1346		}
  1347	
  1348		err = wnd_init(&sbi->used.bitmap, sb, tt);
  1349		if (err) {
  1350			ntfs_err(sb, "Failed to initialize $Bitmap (%d).", err);
  1351			goto put_inode_out;
  1352		}
  1353	
  1354		iput(inode);
  1355	
  1356		/* Compute the MFT zone. */
  1357		err = ntfs_refresh_zone(sbi);
  1358		if (err) {
  1359			ntfs_err(sb, "Failed to initialize MFT zone (%d).", err);
  1360			goto out;
  1361		}
  1362	
  1363		/* Load $BadClus. */
  1364		ref.low = cpu_to_le32(MFT_REC_BADCLUST);
  1365		ref.seq = cpu_to_le16(MFT_REC_BADCLUST);
  1366		inode = ntfs_iget5(sb, &ref, &NAME_BADCLUS);
  1367		if (IS_ERR(inode)) {
  1368			err = PTR_ERR(inode);
  1369			ntfs_err(sb, "Failed to load $BadClus (%d).", err);
  1370			goto out;
  1371		}
  1372	
  1373		ni = ntfs_i(inode);
  1374		bad_len = bad_frags = 0;
  1375		for (i = 0; run_get_entry(&ni->file.run, i, &vcn, &lcn, &len); i++) {
  1376			if (lcn == SPARSE_LCN)
  1377				continue;
  1378	
  1379			bad_len += len;
  1380			bad_frags += 1;
  1381			if (ro)
  1382				continue;
  1383	
  1384			if (wnd_set_used_safe(&sbi->used.bitmap, lcn, len, &tt) || tt) {
  1385				/* Bad blocks marked as free in bitmap. */
  1386				ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
  1387			}
  1388		}
  1389		if (bad_len) {
  1390			/*
  1391			 * Notice about bad blocks.
  1392			 * In normal cases these blocks are marked as used in bitmap.
  1393			 * And we never allocate space in it.
  1394			 */
  1395			ntfs_notice(sb,
  1396				    "Volume contains %zu bad blocks in %zu fragments.",
  1397				    bad_len, bad_frags);
  1398		}
  1399		iput(inode);
  1400	
  1401		/* Load $AttrDef. */
  1402		ref.low = cpu_to_le32(MFT_REC_ATTR);
  1403		ref.seq = cpu_to_le16(MFT_REC_ATTR);
  1404		inode = ntfs_iget5(sb, &ref, &NAME_ATTRDEF);
  1405		if (IS_ERR(inode)) {
  1406			err = PTR_ERR(inode);
  1407			ntfs_err(sb, "Failed to load $AttrDef (%d)", err);
  1408			goto out;
  1409		}
  1410	
  1411		/*
  1412		 * Typical $AttrDef contains up to 20 entries.
  1413		 * Check for extremely large/small size.
  1414		 */
  1415		if (inode->i_size < sizeof(struct ATTR_DEF_ENTRY) ||
  1416		    inode->i_size > 100 * sizeof(struct ATTR_DEF_ENTRY)) {
  1417			ntfs_err(sb, "Looks like $AttrDef is corrupted (size=%llu).",
  1418				 inode->i_size);
  1419			err = -EINVAL;
  1420			goto put_inode_out;
  1421		}
  1422	
  1423		{
  1424			u32 bytes = inode->i_size;
  1425			struct ATTR_DEF_ENTRY *def_table = kmalloc(bytes, GFP_KERNEL);
  1426			if (!def_table) {
  1427				err = -ENOMEM;
  1428				goto put_inode_out;
  1429			}
  1430	
  1431			/* Read the entire file. */
  1432			err = inode_read_data(inode, def_table, bytes);
  1433			if (err) {
  1434				ntfs_err(sb, "Failed to read $AttrDef (%d).", err);
  1435			} else {
  1436				/* Check content and store sorted array. */
  1437				err = ntfs_check_attr_def(sbi, def_table, bytes);
  1438				if (err)
  1439					ntfs_err(sb, "$AttrDef is corrupted.");
  1440			}
  1441	
  1442			kfree(def_table);
  1443			if (err)
  1444				goto put_inode_out;
  1445		}
  1446		iput(inode);
  1447	
  1448		/* Load $UpCase. */
  1449		ref.low = cpu_to_le32(MFT_REC_UPCASE);
  1450		ref.seq = cpu_to_le16(MFT_REC_UPCASE);
  1451		inode = ntfs_iget5(sb, &ref, &NAME_UPCASE);
  1452		if (IS_ERR(inode)) {
  1453			err = PTR_ERR(inode);
  1454			ntfs_err(sb, "Failed to load $UpCase (%d).", err);
  1455			goto out;
  1456		}
  1457	
  1458		if (inode->i_size != 0x10000 * sizeof(short)) {
  1459			err = -EINVAL;
  1460			ntfs_err(sb, "$UpCase is corrupted.");
  1461			goto put_inode_out;
  1462		}
  1463	
  1464		/* Read the entire file. */
  1465		err = inode_read_data(inode, sbi->upcase, 0x10000 * sizeof(short));
  1466		if (err) {
  1467			ntfs_err(sb, "Failed to read $UpCase (%d).", err);
  1468			goto put_inode_out;
  1469		}
  1470	
  1471	#ifdef __BIG_ENDIAN
  1472		{
> 1473			const __le16 *src = sbi->upcase;
  1474			u16 *dst = sbi->upcase;
  1475	
  1476			for (i = 0; i < 0x10000; i++)
  1477				*dst++ = le16_to_cpu(*src++);
  1478		}
  1479	#endif
  1480	
  1481		shared = ntfs_set_shared(sbi->upcase, 0x10000 * sizeof(short));
  1482		if (shared && sbi->upcase != shared) {
  1483			kvfree(sbi->upcase);
  1484			sbi->upcase = shared;
  1485		}
  1486	
  1487		iput(inode);
  1488	
  1489		if (is_ntfs3(sbi)) {
  1490			/* Load $Secure. */
  1491			err = ntfs_security_init(sbi);
  1492			if (err) {
  1493				ntfs_err(sb, "Failed to initialize $Secure (%d).", err);
  1494				goto out;
  1495			}
  1496	
  1497			/* Load $Extend. */
  1498			err = ntfs_extend_init(sbi);
  1499			if (err) {
  1500				ntfs_warn(sb, "Failed to initialize $Extend.");
  1501				goto load_root;
  1502			}
  1503	
  1504			/* Load $Extend/$Reparse. */
  1505			err = ntfs_reparse_init(sbi);
  1506			if (err) {
  1507				ntfs_warn(sb, "Failed to initialize $Extend/$Reparse.");
  1508				goto load_root;
  1509			}
  1510	
  1511			/* Load $Extend/$ObjId. */
  1512			err = ntfs_objid_init(sbi);
  1513			if (err) {
  1514				ntfs_warn(sb, "Failed to initialize $Extend/$ObjId.");
  1515				goto load_root;
  1516			}
  1517		}
  1518	
  1519	load_root:
  1520		/* Load root. */
  1521		ref.low = cpu_to_le32(MFT_REC_ROOT);
  1522		ref.seq = cpu_to_le16(MFT_REC_ROOT);
  1523		inode = ntfs_iget5(sb, &ref, &NAME_ROOT);
  1524		if (IS_ERR(inode)) {
  1525			err = PTR_ERR(inode);
  1526			ntfs_err(sb, "Failed to load root (%d).", err);
  1527			goto out;
  1528		}
  1529	
  1530		/*
  1531		 * Final check. Looks like this case should never occurs.
  1532		 */
  1533		if (!inode->i_op) {
  1534			err = -EINVAL;
  1535			ntfs_err(sb, "Failed to load root (%d).", err);
  1536			goto put_inode_out;
  1537		}
  1538	
  1539		sb->s_root = d_make_root(inode);
  1540		if (!sb->s_root) {
  1541			err = -ENOMEM;
  1542			goto put_inode_out;
  1543		}
  1544	
  1545		if (boot2) {
  1546			/*
  1547		 	 * Alternative boot is ok but primary is not ok.
  1548		 	 * Volume is recognized as NTFS. Update primary boot.
  1549			 */
  1550			struct buffer_head *bh0 = sb_getblk(sb, 0);
  1551			if (bh0) {
  1552				if (buffer_locked(bh0))
  1553					__wait_on_buffer(bh0);
  1554	
  1555				lock_buffer(bh0);
  1556				memcpy(bh0->b_data, boot2, sizeof(*boot2));
  1557				set_buffer_uptodate(bh0);
  1558				mark_buffer_dirty(bh0);
  1559				unlock_buffer(bh0);
  1560				if (!sync_dirty_buffer(bh0))
  1561					ntfs_warn(sb, "primary boot is updated");
  1562				put_bh(bh0);
  1563			}
  1564	
  1565			kfree(boot2);
  1566		}
  1567	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux