Re: [PATCH] xfs: only return detailed fsmap info if the caller has CAP_SYS_ADMIN

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

 



On Tue, May 16, 2017 at 10:54:39AM -0700, Darrick J. Wong wrote:
> On Fri, May 12, 2017 at 10:53:57AM +0200, Carlos Maiolino wrote:
> > Hi,
> > 
> > > There were a number of handwaving complaints that one could "possibly"
> > > use inode numbers and extent maps to fingerprint a filesystem hosting
> > > multiple containers and somehow use the information to guess at the
> > > contents of other containers and attack them.  Despite the total lack of
> > > any demonstration that this is actually possible, it's easier to
> > > restrict access now and broaden it later, so use the rmapbt fsmap
> > > backends only if the caller has CAP_SYS_ADMIN.  Unprivileged users will
> > > just have to make do with only getting the free space information.
> > > 
> > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> > > ---
> > >  fs/xfs/xfs_fsmap.c |    5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
> > > index 3683819..814ed729 100644
> > > --- a/fs/xfs/xfs_fsmap.c
> > > +++ b/fs/xfs/xfs_fsmap.c
> > > @@ -828,6 +828,7 @@ xfs_getfsmap(
> > >  	struct xfs_fsmap		dkeys[2];	/* per-dev keys */
> > >  	struct xfs_getfsmap_dev		handlers[XFS_GETFSMAP_DEVS];
> > >  	struct xfs_getfsmap_info	info = { NULL };
> > > +	bool				use_rmap;
> > >  	int				i;
> > >  	int				error = 0;
> > >  
> > > @@ -837,12 +838,14 @@ xfs_getfsmap(
> > >  	    !xfs_getfsmap_is_valid_device(mp, &head->fmh_keys[1]))
> > >  		return -EINVAL;
> > >  
> > > +	use_rmap = capable(CAP_SYS_ADMIN) &&
> > > +		   xfs_sb_version_hasrmapbt(&mp->m_sb);
> > >  	head->fmh_entries = 0;
> > >  
> > >  	/* Set up our device handlers. */
> > >  	memset(handlers, 0, sizeof(handlers));
> > >  	handlers[0].dev = new_encode_dev(mp->m_ddev_targp->bt_dev);
> > > -	if (xfs_sb_version_hasrmapbt(&mp->m_sb))
> > > +	if (use_rmap)
> > >  		handlers[0].fn = xfs_getfsmap_datadev_rmapbt;
> > >  	else
> > >  		handlers[0].fn = xfs_getfsmap_datadev_bnobt;
> > >
> > 
> > I've followed the discussion too, and alhtough it just look as a very remote
> > theoretical problem, restricting this is simple.
> > 
> > Overall this looks fine to me, but, I just wonder if somebody in the future will
> > complain to be getting freespace only, instead of the fsmap itself, without
> > actually getting a permission denied error, or something like that.
> > 
> > This is a minor concern from my side though, so, unless somebody agrees with my
> > point here, you can add:
> 
> I think I'll just add a blurb to the manpage explicitly stating that
> filesystems have discretion to reveal as much or as little detail as
> they like.  Therefore, it's perfectly fine not to reveal inode numbers,
> which is what you'd get with a pre-rmap xfs (or ext4) today.
> 

This sounds perfectly fine to me, you can keep my review tag.

Cheers

> --D
> 
> > 
> > Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
> > 
> > Cheers.
> > 
> >  --
> > > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> > > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> > -- 
> > Carlos
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Carlos
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux