All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Cc: oe-kbuild-all@lists.linux.dev, ntfs3@lists.linux.dev
Subject: [paragon-software-group-ntfs3:master 11/13] fs/ntfs3/super.c:1473:40: sparse: sparse: incorrect type in initializer (different base types)
Date: Thu, 18 Apr 2024 11:26:35 +0800	[thread overview]
Message-ID: <202404181111.Wz8a1qX6-lkp@intel.com> (raw)

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@intel.com/config)
compiler: hppa-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20240418/202404181111.Wz8a1qX6-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 <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202404181111.Wz8a1qX6-lkp@intel.com/

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

                 reply	other threads:[~2024-04-18  3:26 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202404181111.Wz8a1qX6-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=almaz.alexandrovich@paragon-software.com \
    --cc=ntfs3@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.