All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Allison Henderson <allison.henderson@oracle.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2 23/27] xfsprogs: Do not use namechecks on parent pointers
Date: Mon, 11 Jun 2018 13:23:37 -0700	[thread overview]
Message-ID: <20180611202337.GI22045@magnolia> (raw)
In-Reply-To: <056e2e3c-7bd0-b289-9a83-2fa496fed829@oracle.com>

On Mon, Jun 11, 2018 at 01:00:45PM -0700, Allison Henderson wrote:
> On 06/11/2018 11:00 AM, Darrick J. Wong wrote:
> > On Sat, Jun 09, 2018 at 10:07:48PM -0700, Allison Henderson wrote:
> > > Attribute names of parent pointers are not strings.  So
> > > avoid doing namechecks for these attributes.
> > > 
> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> > > ---
> > >   repair/attr_repair.c | 18 +++++++++++-------
> > >   1 file changed, 11 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/repair/attr_repair.c b/repair/attr_repair.c
> > > index 8b1b8a7..b8b0768 100644
> > > --- a/repair/attr_repair.c
> > > +++ b/repair/attr_repair.c
> > > @@ -308,8 +308,9 @@ process_shortform_attr(
> > >   		/* namecheck checks for / and null terminated for file names.
> > >   		 * attributes names currently follow the same rules.
> > >   		*/
> > > -		if (namecheck((char *)&currententry->nameval[0],
> > > -						currententry->namelen))  {
> > > +		if (!(currententry->flags & XFS_ATTR_PARENT) &&
> > > +			namecheck((char *)&currententry->nameval[0],
> > > +			currententry->namelen))  {
> > >   			do_warn(
> > 
> > Please don't indent the condition tests to the same column as the code.
> > Either line them up with the if parentheses or double-tab them.
> > 
> > if (!(currententry->flags & XFS_ATTR_PARENT) &&
> >      namecheck((char *)&currententry->nameval[0],
> > 		currententry->namelen)) {
> > 	do_warn(...);
> > }
> > 
> Alrighty, will fix
> 
> > >   	_("entry contains illegal character in shortform attribute name\n"));
> > >   			junkit = 1;
> > > @@ -470,8 +471,9 @@ process_leaf_attr_local(
> > >   	xfs_attr_leaf_name_local_t *local;
> > >   	local = xfs_attr3_leaf_name_local(leaf, i);
> > > -	if (local->namelen == 0 || namecheck((char *)&local->nameval[0],
> > > -							local->namelen)) {
> > > +	if (!(entry->flags & XFS_ATTR_PARENT) &&
> > > +		(local->namelen == 0 || namecheck((char *)&local->nameval[0],
> > > +		local->namelen))) {
> > 
> > Why skip the namelen checks when it's a parent pointer?  Isn't the pptr
> > corrupt if the (ino, gen, offset) data is length zero?
> > 
> Thats true, though I suppose in the case of parent pointers it should be the
> size of the name record.  Would it maybe be cleaner to make a subroutine
> that took local and entry and did the appropriate length checking there?  It
> may make things simpler here and also in the case below?

I probably wouldn't bother for the local entry because it's fairly
short.  The remote format case below is sort of gnarly, maybe it'd be
better refactored as a functi...

...hmm, thinking further, in the (flags & PARENT) case, namelen should
be exactly sizeof(struct xfs_parent_name_rec), right?

So perhaps we just move the namelen == 0 check into namecheck and pass
in the entry->flags so that we can do....

...thinking even further ahead, if there's some sort of verifier
function for struct xfs_parent_name_rec then we should call that here
too.  What do you think of this?

/* return true if attr name is garbage */
bool namecheck(entry, nameptr, namelen)
{
	if (namelen == 0)
		return true;
	if (entry->flags & _ATTR_PARENT) {
		xfs_failaddr_t	fa;

		if (namelen != sizeof(struct xfs_parent_name_rec))
			return true;

		fa = xfs_verify_pptr(mp, (struct xfs_parent_name_rec *)nameptr);
		return fa != NULL;
	}
	/* do the other name checks */
}

--D

> 
> 
> > >   		do_warn(
> > >   	_("attribute entry %d in attr block %u, inode %" PRIu64 " has bad name (namelen = %d)\n"),
> > >   			i, da_bno, ino, local->namelen);
> > > @@ -525,13 +527,15 @@ process_leaf_attr_remote(
> > >   	remotep = xfs_attr3_leaf_name_remote(leaf, i);
> > > -	if (remotep->namelen == 0 || namecheck((char *)&remotep->name[0],
> > > -						remotep->namelen) ||
> > > +	if (!(entry->flags & XFS_ATTR_PARENT) &&
> > > +			(remotep->namelen == 0 ||
> > > +			namecheck((char *)&remotep->name[0],
> > > +				remotep->namelen) ||
> > >   			be32_to_cpu(entry->hashval) !=
> > >   				libxfs_da_hashname((unsigned char *)&remotep->name[0],
> > >   						remotep->namelen) ||
> > >   			be32_to_cpu(entry->hashval) < last_hashval ||
> > > -			be32_to_cpu(remotep->valueblk) == 0) {
> > > +			be32_to_cpu(remotep->valueblk) == 0)) {
> > 
> > Do parent pointer attrs ever end up using a remote value block to store
> > the name?  If so, I think you only want to skip the namecheck, not the
> > namelen/hashval/valueblk checks, right?
> > 
> > --D
> > 
> > >   		do_warn(
> > >   	_("inconsistent remote attribute entry %d in attr block %u, ino %" PRIu64 "\n"), i, da_bno, ino);
> > >   		return -1;
> > > -- 
> > > 2.7.4
> > > 
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> > > the body of a message to majordomo@vger.kernel.org
> > > 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@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2018-06-11 20:23 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-10  5:07 [PATCH v2 00/27] xfsprogs: parent pointers v2 Allison Henderson
2018-06-10  5:07 ` [PATCH v2 01/27] xfsprogs: Move xfs_attr.h to libxfs Allison Henderson
2018-06-10  5:07 ` [PATCH v2 02/27] xfsprogs: Add helper function xfs_attr_try_sf_addname Allison Henderson
2018-06-10  5:07 ` [PATCH v2 03/27] xfsprogs: Add trans toggle to attr routines Allison Henderson
2018-06-10  7:02   ` Amir Goldstein
2018-06-10 16:19     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 04/27] xfsprogs: Add attibute set and helper functions Allison Henderson
2018-06-10  5:07 ` [PATCH v2 05/27] xfsprogs: Add attibute remove " Allison Henderson
2018-06-10  5:07 ` [PATCH v2 06/27] xfsprogs: Set up infastructure for deferred attribute operations Allison Henderson
2018-06-10  5:07 ` [PATCH v2 07/27] xfsprogs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred Allison Henderson
2018-06-10  5:07 ` [PATCH v2 08/27] xfsprogs: Remove all strlen calls in all xfs_attr_* functions for attr names Allison Henderson
2018-06-10  5:07 ` [PATCH v2 09/27] xfsprogs: get directory offset when adding directory name Allison Henderson
2018-06-10  5:07 ` [PATCH v2 10/27] xfsprogs: get directory offset when removing " Allison Henderson
2018-06-10  5:07 ` [PATCH v2 11/27] xfsprogs: get directory offset when replacing a " Allison Henderson
2018-06-10  5:07 ` [PATCH v2 12/27] xfsprogs: add parent pointer support to attribute code Allison Henderson
2018-06-10  5:07 ` [PATCH v2 13/27] xfsprogs: define parent pointer xattr format Allison Henderson
2018-06-10  5:07 ` [PATCH v2 14/27] xfsprogs: extent transaction reservations for parent attributes Allison Henderson
2018-06-10  5:07 ` [PATCH v2 15/27] xfsprogs: parent pointer attribute creation Allison Henderson
2018-06-10  5:07 ` [PATCH v2 16/27] xfsprogs: Add the parent pointer support to the superblock version 5 Allison Henderson
2018-06-10  5:07 ` [PATCH v2 17/27] xfsprogs: Add helper function xfs_attr_list_context_init Allison Henderson
2018-06-10  5:07 ` [PATCH v2 18/27] xfsprogs: Add parent pointer ioctl Allison Henderson
2018-06-10  5:07 ` [PATCH v2 19/27] xfsprogs: Add delayed attributes error tag Allison Henderson
2018-06-11 17:28   ` Darrick J. Wong
2018-06-11 19:59     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 20/27] xfsprogs: Add parent pointer flag to cmd Allison Henderson
2018-06-11 17:43   ` Darrick J. Wong
2018-06-11 20:00     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 21/27] xfsprogs: Remove single byte array from struct parent Allison Henderson
2018-06-10 11:21   ` Amir Goldstein
2018-06-10 15:25     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 22/27] xfsprogs: Add log item printing for ATTRI and ATTRD Allison Henderson
2018-06-10  5:07 ` [PATCH v2 23/27] xfsprogs: Do not use namechecks on parent pointers Allison Henderson
2018-06-11 18:00   ` Darrick J. Wong
2018-06-11 20:00     ` Allison Henderson
2018-06-11 20:23       ` Darrick J. Wong [this message]
2018-06-11 20:38         ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 24/27] xfsprogs: Add parent pointers to recreated inodes Allison Henderson
2018-06-10 11:27   ` Amir Goldstein
2018-06-10 17:19     ` Allison Henderson
2018-06-11 17:31       ` Darrick J. Wong
2018-06-11 18:06   ` Darrick J. Wong
2018-06-11 20:00     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 25/27] xfsprogs: Add parent pointers during protofile creation Allison Henderson
2018-06-10 11:32   ` Amir Goldstein
2018-06-11 18:15   ` Darrick J. Wong
2018-06-11 19:58     ` Allison Henderson
2018-06-10  5:07 ` [PATCH v2 26/27] xfsprogs: implement the upper half of parent pointers Allison Henderson
2018-06-10 12:06   ` Amir Goldstein
2018-06-10  5:07 ` [PATCH v2 27/27] xfsprogs: Clean up old parent pointer definitions Allison Henderson
2018-06-11 18:20   ` Darrick J. Wong
2018-06-11 20:06     ` Allison Henderson

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=20180611202337.GI22045@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=allison.henderson@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    /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.