* fs/ext4/ioctl.c:1576 ext4_ioctl_set_lufid() warn: impossible condition '(lufid_args.esl_name_len > 255) => (1-255 > 255)'
@ 2026-08-04 23:21 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-08-04 23:21 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Artem Blagodarenko <artem.blagodarenko@gmail.com>
CC: 0day robot <lkp@intel.com>
CC: Andreas Dilger <adilger@dilger.ca>
tree: https://github.com/intel-lab-lkp/linux/commits/Artem-Blagodarenko/ext4-validate-count-against-limit-in-ext4_dx_csum_verify-_set/20260804-043122
head: 9865af268fb3a85241b9a3ee14a37281da3a4885
commit: 9865af268fb3a85241b9a3ee14a37281da3a4885 ext4: Add EXT4_IOC_SET_LUFID ioctl for setting LUFID on directory entries
date: 27 hours ago
:::::: branch date: 27 hours ago
:::::: commit date: 27 hours ago
config: i386-randconfig-141 (https://download.01.org/0day-ci/archive/20260805/202608050733.wWV0zqak-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
smatch: v0.5.0-9187-g5189e3fb
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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202608050733.wWV0zqak-lkp@intel.com/
smatch warnings:
fs/ext4/ioctl.c:1576 ext4_ioctl_set_lufid() warn: impossible condition '(lufid_args.esl_name_len > 255) => (1-255 > 255)'
fs/ext4/namei.c:2465 add_dirent_to_buf() error: we previously assumed 'de' could be null (see line 2441)
vim +1576 fs/ext4/ioctl.c
04a91570ac6776 Theodore Ts'o 2025-09-16 1537
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1538 /*
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1539 * ext4_ioctl_set_lufid() - Set LUFID on a directory entry
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1540 * @filp: file pointer (parent directory)
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1541 * @arg: pointer to ext4_set_lufid structure with filename and LUFID data
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1542 *
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1543 * This ioctl allows setting LUFID data on an existing
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1544 * directory entry. It is called on the parent directory with a filename and
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1545 * LUFID data.
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1546 */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1547 static long ext4_ioctl_set_lufid(struct file *filp, unsigned long arg)
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1548 {
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1549 struct inode *dir = file_inode(filp);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1550 struct mnt_idmap *idmap = file_mnt_idmap(filp);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1551 struct ext4_set_lufid lufid_args;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1552 struct {
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1553 __u32 edp_magic;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1554 struct ext4_dirent_data_header df_header;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1555 char df_fid[255];
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1556 } edp;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1557 int err;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1558
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1559 /* Check if parent is a directory */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1560 if (!S_ISDIR(dir->i_mode))
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1561 return -ENOTDIR;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1562
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1563 /* This ioctl mutates directory entries; merely having the directory
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1564 * open (which only ever requires read access) is not enough.
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1565 * MAY_EXEC is required for entry lookup; MAY_WRITE for modification. */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1566 err = inode_permission(idmap, dir, MAY_WRITE | MAY_EXEC);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1567 if (err)
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1568 return err;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1569
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1570 /* Copy arguments from user space */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1571 if (copy_from_user(&lufid_args, (struct ext4_set_lufid __user *)arg,
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1572 sizeof(lufid_args)))
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1573 return -EFAULT;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1574
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1575 /* Validate parameters. esl_name_len is NUL-excluded length (1-255). */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 @1576 if (lufid_args.esl_name_len == 0 || lufid_args.esl_name_len > EXT4_NAME_LEN)
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1577 return -EINVAL;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1578
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1579 /* ddh_length (esl_data_len + the header byte below) must itself fit
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1580 * in the __u8 ddh_length field without wrapping */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1581 if (lufid_args.esl_data_len == 0 ||
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1582 lufid_args.esl_data_len > 255 - sizeof(edp.df_header))
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1583 return -EINVAL;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1584
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1585 /* Ensure filename is NUL-terminated at exactly esl_name_len */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1586 if (lufid_args.esl_name[lufid_args.esl_name_len] != '\0')
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1587 return -EINVAL;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1588
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1589 /* '.' and '..' are not ordinary entries -- they must stay the first
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1590 * two entries in the directory's first block, so they can't go
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1591 * through the general delete+re-add path this ioctl uses */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1592 if (!strcmp(lufid_args.esl_name, ".") || !strcmp(lufid_args.esl_name, ".."))
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1593 return -EINVAL;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1594
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1595 /* Prepare the dentry param struct with LUFID data. ddh_length is
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1596 * documented (see struct ext4_dirent_data_header) as the length of
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1597 * the header plus the whole data blob -- include the header here so
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1598 * every dirdata reader/writer that takes ddh_length at face value
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1599 * (e.g. ext4_dirdata_set()'s memcpy) copies the full LUFID payload
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1600 * instead of silently dropping its last byte. */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1601 edp.edp_magic = EXT4_LUFID_MAGIC;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1602 edp.df_header.ddh_length = lufid_args.esl_data_len +
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1603 sizeof(edp.df_header);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1604 memcpy(edp.df_fid, lufid_args.esl_data, lufid_args.esl_data_len);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1605
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1606 /* Want write access */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1607 err = mnt_want_write_file(filp);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1608 if (err)
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1609 return err;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1610
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1611 /* Call the helper function to do the actual work */
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1612 err = ext4_dirdata_set_lufid(idmap, dir, lufid_args.esl_name,
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1613 lufid_args.esl_name_len,
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1614 (struct ext4_dentry_param *)&edp);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1615
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1616 mnt_drop_write_file(filp);
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1617 return err;
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1618 }
9865af268fb3a8 Artem Blagodarenko 2026-07-31 1619
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-04 23:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-04 23:21 fs/ext4/ioctl.c:1576 ext4_ioctl_set_lufid() warn: impossible condition '(lufid_args.esl_name_len > 255) => (1-255 > 255)' kernel test robot
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.