public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [allisonhenderson-xfs-work:larp_cleanupv4_pptrs 35/35] fs/xfs/xfs_ioctl.c:1756 xfs_ioc_get_parent_pointer() warn: maybe return -EFAULT instead of the bytes remaining?
@ 2022-05-12 10:12 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2022-05-12 10:12 UTC (permalink / raw)
  To: kbuild, Allison Henderson; +Cc: lkp, kbuild-all, linux-kernel

tree:   https://github.com/allisonhenderson/xfs_work.git larp_cleanupv4_pptrs
head:   3d7771d8177638d5d115404cbee0b9a77cf0bb4c
commit: 3d7771d8177638d5d115404cbee0b9a77cf0bb4c [35/35] xfs: Add parent pointer ioctl
config: i386-randconfig-m031-20220509 (https://download.01.org/0day-ci/archive/20220512/202205121128.R82udPf8-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
fs/xfs/xfs_ioctl.c:1756 xfs_ioc_get_parent_pointer() warn: maybe return -EFAULT instead of the bytes remaining?

vim +1756 fs/xfs/xfs_ioctl.c

3d7771d8177638 Allison Henderson 2022-05-10  1689  STATIC int
3d7771d8177638 Allison Henderson 2022-05-10  1690  xfs_ioc_get_parent_pointer(
3d7771d8177638 Allison Henderson 2022-05-10  1691  	struct file			*filp,
3d7771d8177638 Allison Henderson 2022-05-10  1692  	void				__user *arg)
3d7771d8177638 Allison Henderson 2022-05-10  1693  {
3d7771d8177638 Allison Henderson 2022-05-10  1694  	struct xfs_pptr_info		*ppi = NULL;

I would just declare ppi on the stack to void the krealloc().  It's
not a huge struct.

3d7771d8177638 Allison Henderson 2022-05-10  1695  	int				error = 0;
3d7771d8177638 Allison Henderson 2022-05-10  1696  	struct xfs_inode		*ip = XFS_I(file_inode(filp));
3d7771d8177638 Allison Henderson 2022-05-10  1697  	struct xfs_mount		*mp = ip->i_mount;
3d7771d8177638 Allison Henderson 2022-05-10  1698  
3d7771d8177638 Allison Henderson 2022-05-10  1699  	if (!capable(CAP_SYS_ADMIN))
3d7771d8177638 Allison Henderson 2022-05-10  1700  		return -EPERM;
3d7771d8177638 Allison Henderson 2022-05-10  1701  
3d7771d8177638 Allison Henderson 2022-05-10  1702  	/* Allocate an xfs_pptr_info to put the user data */
3d7771d8177638 Allison Henderson 2022-05-10  1703  	ppi = kmem_alloc(sizeof(struct xfs_pptr_info), 0);
3d7771d8177638 Allison Henderson 2022-05-10  1704  	if (!ppi)
3d7771d8177638 Allison Henderson 2022-05-10  1705  		return -ENOMEM;
3d7771d8177638 Allison Henderson 2022-05-10  1706  
3d7771d8177638 Allison Henderson 2022-05-10  1707  	/* Copy the data from the user */
3d7771d8177638 Allison Henderson 2022-05-10  1708  	error = copy_from_user(ppi, arg, sizeof(struct xfs_pptr_info));
3d7771d8177638 Allison Henderson 2022-05-10  1709  	if (error)
3d7771d8177638 Allison Henderson 2022-05-10  1710  		goto out;

copy_from_user() returns the number of bytes remaining but we want to
return -EFAULT to the user.

	if (copy_from_user(ppi, arg, sizeof(struct xfs_pptr_info))) {
		error = -EFAULT;
		goto out;
	}

3d7771d8177638 Allison Henderson 2022-05-10  1711  
3d7771d8177638 Allison Henderson 2022-05-10  1712  	/* Check size of buffer requested by user */
3d7771d8177638 Allison Henderson 2022-05-10  1713  	if (XFS_PPTR_INFO_SIZEOF(ppi->pi_ptrs_size) > XFS_XATTR_LIST_MAX) {
3d7771d8177638 Allison Henderson 2022-05-10  1714  		error = -ENOMEM;
3d7771d8177638 Allison Henderson 2022-05-10  1715  		goto out;
3d7771d8177638 Allison Henderson 2022-05-10  1716  	}
3d7771d8177638 Allison Henderson 2022-05-10  1717  
3d7771d8177638 Allison Henderson 2022-05-10  1718  	/*
3d7771d8177638 Allison Henderson 2022-05-10  1719  	 * Now that we know how big the trailing buffer is, expand
3d7771d8177638 Allison Henderson 2022-05-10  1720  	 * our kernel xfs_pptr_info to be the same size
3d7771d8177638 Allison Henderson 2022-05-10  1721  	 */
3d7771d8177638 Allison Henderson 2022-05-10  1722  	ppi = krealloc(ppi, XFS_PPTR_INFO_SIZEOF(ppi->pi_ptrs_size),
3d7771d8177638 Allison Henderson 2022-05-10  1723  		       GFP_NOFS | __GFP_NOFAIL);
3d7771d8177638 Allison Henderson 2022-05-10  1724  	if (!ppi)
3d7771d8177638 Allison Henderson 2022-05-10  1725  		return -ENOMEM;
3d7771d8177638 Allison Henderson 2022-05-10  1726  
3d7771d8177638 Allison Henderson 2022-05-10  1727  	if (ppi->pi_flags != 0 && ppi->pi_flags != XFS_PPTR_IFLAG_HANDLE) {
3d7771d8177638 Allison Henderson 2022-05-10  1728  		error = -EINVAL;
3d7771d8177638 Allison Henderson 2022-05-10  1729  		goto out;
3d7771d8177638 Allison Henderson 2022-05-10  1730  	}
3d7771d8177638 Allison Henderson 2022-05-10  1731  
3d7771d8177638 Allison Henderson 2022-05-10  1732  	if (ppi->pi_flags == XFS_PPTR_IFLAG_HANDLE) {
3d7771d8177638 Allison Henderson 2022-05-10  1733  		error = xfs_iget(mp, NULL, ppi->pi_handle.ha_fid.fid_ino,
3d7771d8177638 Allison Henderson 2022-05-10  1734  				0, 0, &ip);
3d7771d8177638 Allison Henderson 2022-05-10  1735  		if (error)
3d7771d8177638 Allison Henderson 2022-05-10  1736  			goto out;
3d7771d8177638 Allison Henderson 2022-05-10  1737  	}
3d7771d8177638 Allison Henderson 2022-05-10  1738  
3d7771d8177638 Allison Henderson 2022-05-10  1739  	if (ip->i_ino == mp->m_sb.sb_rootino)
3d7771d8177638 Allison Henderson 2022-05-10  1740  		ppi->pi_flags |= XFS_PPTR_OFLAG_ROOT;
3d7771d8177638 Allison Henderson 2022-05-10  1741  
3d7771d8177638 Allison Henderson 2022-05-10  1742  	/* Get the parent pointers */
3d7771d8177638 Allison Henderson 2022-05-10  1743  	error = xfs_attr_get_parent_pointer(ip, ppi);
3d7771d8177638 Allison Henderson 2022-05-10  1744  
3d7771d8177638 Allison Henderson 2022-05-10  1745  	if (error)
3d7771d8177638 Allison Henderson 2022-05-10  1746  		goto out;
3d7771d8177638 Allison Henderson 2022-05-10  1747  
3d7771d8177638 Allison Henderson 2022-05-10  1748  	/* Copy the parent pointers back to the user */
3d7771d8177638 Allison Henderson 2022-05-10  1749  	error = copy_to_user(arg, ppi,
3d7771d8177638 Allison Henderson 2022-05-10  1750  			XFS_PPTR_INFO_SIZEOF(ppi->pi_ptrs_size));

	if (copy_to_user(arg, ppi, XFS_PPTR_INFO_SIZEOF(ppi->pi_ptrs_size))) {
		error = -EFAULT;
		goto out;
	}

3d7771d8177638 Allison Henderson 2022-05-10  1751  	if (error)
3d7771d8177638 Allison Henderson 2022-05-10  1752  		goto out;
3d7771d8177638 Allison Henderson 2022-05-10  1753  
3d7771d8177638 Allison Henderson 2022-05-10  1754  out:
3d7771d8177638 Allison Henderson 2022-05-10  1755  	kmem_free(ppi);
3d7771d8177638 Allison Henderson 2022-05-10 @1756  	return error;
3d7771d8177638 Allison Henderson 2022-05-10  1757  }

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-12 10:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-12 10:12 [allisonhenderson-xfs-work:larp_cleanupv4_pptrs 35/35] fs/xfs/xfs_ioctl.c:1756 xfs_ioc_get_parent_pointer() warn: maybe return -EFAULT instead of the bytes remaining? Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox