All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Meyer <thomas@m3y3r.de>
To: Ian Kent <raven@themaw.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	David Miller <davem@davemloft.net>,
	linux-kernel@vger.kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	autofs@vger.kernel.org, Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: compat: autofs v5 packet size ambiguity - update
Date: Sat, 25 Feb 2012 12:28:21 +0100	[thread overview]
Message-ID: <1330169301.1380.2.camel@localhost.localdomain> (raw)
In-Reply-To: <1329890251.2193.50.camel@perseus.themaw.net>

Am Mittwoch, den 22.02.2012, 13:57 +0800 schrieb Ian Kent:
> On Wed, 2012-02-22 at 13:53 +0800, Ian Kent wrote:
> > On Wed, 2012-02-22 at 13:43 +0800, Ian Kent wrote:
> > > On Tue, 2012-02-21 at 20:56 -0800, Linus Torvalds wrote:
> > 
> > Ahh ... forgot to set the file_operations structure member .. oops
> > 
> > >  
> > > +static int autofs4_root_dir_open(struct inode *inode, struct file *file)
> > > +{
> > > +	struct autofs_sb_info *sbi= autofs4_sbi(file->f_path.dentry->d_sb);
> > > +	if (sbi->compat_daemon < 0)
> > > +		sbi->compat_daemon = is_compat_task();
> > > +	return dcache_dir_open(inode, file);
> > > +}
> > > +
> > 
> 
> Lets try that again.
> 
> autofs: work around unhappy compat problem on x86-64
> 
> From: Ian Kent <raven@themaw.net>
> 
> When the autofs protocol version 5 packet type was added in commit
> 5c0a32fc2cd0 ("autofs4: add new packet type for v5 communications"), it
> obvously tried quite hard to be word-size agnostic, and uses explicitly
> sized fields that are all correctly aligned.
> 
> However, with the final "char name[NAME_MAX+1]" array at the end, the
> actual size of the structure ends up being not very well defined:
> because the struct isn't marked 'packed', doing a "sizeof()" on it will
> align the size of the struct up to the biggest alignment of the members
> it has.
> 
> And despite all the members being the same, the alignment of them is
> different: a "__u64" has 4-byte alignment on x86-32, but native 8-byte
> alignment on x86-64.  And while 'NAME_MAX+1' ends up being a nice round
> number (256), the name[] array starts out a 4-byte aligned.
> 
> End result: the "packed" size of the structure is 300 bytes: 4-byte, but
> not 8-byte aligned.
> 
> As a result, despite all the fields being in the same place on all
> architectures, sizeof() will round up that size to 304 bytes on
> architectures that have 8-byte alignment for u64.
> 
> Note that this is *not* a problem for 32-bit compat mode on POWER, since
> there __u64 is 8-byte aligned even in 32-bit mode.  But on x86, 32-bit
> and 64-bit alignment is different for 64-bit entities, and as a result
> the structure that has exactly the same layout has different sizes.
> 
> So on x86-64, but no other architecture, we will just subtract 4 from
> the size of the structure when running in a compat task.  That way we
> will write the properly sized packet that user mode expects.
> 
> Not pretty.  Sadly, this very subtle, and unnecessary, size difference
> has been encoded in user space that wants to read packets of *exactly*
> the right size, and will refuse to touch anything else.
> 
> Reported-and-tested-by: Thomas Meyer <thomas@m3y3r.de>
> Cc: Ian Kent <raven@themaw.net>
> ---

works for me on top of 3.2.7.


  parent reply	other threads:[~2012-02-25 11:28 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-22  2:24 compat: autofs v5 packet size ambiguity - update Linus Torvalds
2012-02-22  3:16 ` David Miller
2012-02-22  3:33   ` Linus Torvalds
2012-02-22  3:47     ` Linus Torvalds
2012-02-22  4:20       ` Ian Kent
2012-02-22  4:56       ` Linus Torvalds
2012-02-22  5:43         ` Ian Kent
2012-02-22  5:53           ` Ian Kent
2012-02-22  5:57             ` Ian Kent
2012-02-22  9:32               ` Ian Kent
2012-02-22 12:15                 ` Ian Kent
2012-02-22 12:39                   ` Ian Kent
2012-02-22 12:45                     ` Ian Kent
2012-02-22 16:20                       ` Linus Torvalds
2012-02-22 15:13                 ` H. Peter Anvin
2012-02-23  1:35                   ` Ian Kent
2012-02-22 16:12                 ` Linus Torvalds
2012-02-23  1:48                   ` Ian Kent
2012-02-23  1:54                     ` Ian Kent
2012-02-23  2:21                       ` Ian Kent
2012-02-23  6:29                         ` Ian Kent
2012-02-23  6:31                           ` H. Peter Anvin
2012-02-23 11:20                             ` Ian Kent
2012-02-23 11:26                               ` Ian Kent
2012-02-23  8:54                         ` Thomas Meyer
2012-02-23  1:56                     ` Linus Torvalds
2012-02-23  2:09                       ` Ian Kent
2012-02-23  2:11                         ` Ian Kent
2012-02-23  2:25                         ` Linus Torvalds
2012-02-23  2:32                           ` Ian Kent
2012-02-25 11:28               ` Thomas Meyer [this message]
2012-02-25 22:10               ` [PATCH] autofs4: fix compilation without CONFIG_COMPAT Andreas Schwab
2012-02-26  1:31                 ` Linus Torvalds
2012-02-26  1:46                   ` H. Peter Anvin
2012-02-26  1:53                     ` Linus Torvalds
2012-02-26  3:07                       ` H. Peter Anvin
2012-02-26  9:05                   ` Andreas Schwab
2012-02-27  7:29                   ` Christian Borntraeger
2012-02-27  9:09                     ` Heiko Carstens
2012-02-27  9:09                       ` Heiko Carstens
2012-02-27 16:22                       ` H. Peter Anvin
2012-02-27 16:25                         ` Linus Torvalds
2012-02-27  9:20                     ` Ian Kent
2012-02-22  6:02           ` compat: autofs v5 packet size ambiguity - update H. Peter Anvin
2012-02-22 16:10             ` Linus Torvalds
2012-02-22 17:43               ` H. Peter Anvin
2012-02-22 17:45               ` H. Peter Anvin
2012-02-22 18:16                 ` Linus Torvalds
2012-02-22 18:19                   ` Linus Torvalds
2012-02-22 18:20                   ` H. Peter Anvin

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=1330169301.1380.2.camel@localhost.localdomain \
    --to=thomas@m3y3r.de \
    --cc=autofs@vger.kernel.org \
    --cc=davem@davemloft.net \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=raven@themaw.net \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.