Ian Kent
a32744d4ab
autofs: work around unhappy compat problem on x86-64
...
When the autofs protocol version 5 packet type was added in commit
5c0a32fc2c ("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>
Signed-off-by: Ian Kent <raven@themaw.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-02-25 12:10:27 -08:00
..
9p
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
2012-01-10 15:09:01 -08:00
adfs
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
affs
affs: propagate umode_t
2012-01-03 22:55:04 -05:00
afs
switch ->create() to umode_t
2012-01-03 22:54:53 -05:00
autofs4
autofs: work around unhappy compat problem on x86-64
2012-02-25 12:10:27 -08:00
befs
vfs: fix the stupidity with i_dentry in inode destructors
2012-01-03 22:52:40 -05:00
bfs
switch ->create() to umode_t
2012-01-03 22:54:53 -05:00
btrfs
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2012-02-24 09:02:53 -08:00
cachefiles
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
ceph
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
2012-02-02 15:47:33 -08:00
cifs
cifs: don't return error from standard_receive3 after marking response malformed
2012-02-07 22:25:31 -06:00
coda
coda: switch coda_cnode_make() to sane API as well, clean coda_lookup()
2012-01-10 11:13:16 -05:00
configfs
configfs: convert to umode_t
2012-01-03 22:54:57 -05:00
cramfs
Merge branches 'vfsmount-guts', 'umode_t' and 'partitions' into Z
2012-01-06 23:15:54 -05:00
debugfs
kernel-doc: fix new warnings in debugfs
2012-01-24 10:47:41 -08:00
devpts
devpts: fix double-free on mount failure
2012-01-08 20:19:03 -05:00
dlm
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm
2012-01-10 14:55:55 -08:00
ecryptfs
ecryptfs: remove the second argument of k[un]map_atomic()
2012-02-16 16:06:27 -06:00
efs
vfs: fix the stupidity with i_dentry in inode destructors
2012-01-03 22:52:40 -05:00
exofs
Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
2012-01-09 12:51:01 -08:00
exportfs
ext2
ext2: protect inode changes in the SETVERSION and SETFLAGS ioctls
2012-01-11 13:39:02 +01:00
ext3
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
2012-01-09 12:51:21 -08:00
ext4
Merge branch 'for_linus' into for_linus_merged
2012-01-10 11:54:07 -05:00
fat
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
2012-01-09 12:09:47 -08:00
freevxfs
fs: propagate umode_t, misc bits
2012-01-03 22:55:10 -05:00
fscache
fuse
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
2012-01-12 12:39:21 -08:00
gfs2
GFS2: Fix nlink setting on inode creation
2012-01-11 12:35:05 +00:00
hfs
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
hfsplus
hfsplus: creation of hidden dir on mount can fail
2012-01-10 17:48:52 -05:00
hostfs
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
hpfs
switch ->mknod() to umode_t
2012-01-03 22:54:54 -05:00
hppfs
vfs: for usbfs, etc. internal vfsmounts ->mnt_sb->s_root == ->mnt_root
2012-01-03 22:52:41 -05:00
hugetlbfs
mm: compaction: introduce sync-light migration for use by compaction
2012-01-12 20:13:09 -08:00
isofs
isofs: inode leak on mount failure
2012-01-09 10:48:11 -05:00
jbd
jbd: Issue cache flush after checkpointing
2012-01-11 13:36:57 +01:00
jbd2
Merge branch 'for_linus' into for_linus_merged
2012-01-10 11:54:07 -05:00
jffs2
jffs2: do not initialize variable unnecessarily
2012-01-11 09:53:51 +00:00
jfs
Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
2012-01-08 13:10:57 -08:00
lockd
module_param: make bool parameters really bool (drivers & misc)
2012-01-13 09:32:20 +10:30
logfs
mtd: fix merge conflict resolution breakage
2012-02-01 11:10:24 -08:00
minix
Merge branch 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2012-01-08 12:19:57 -08:00
ncpfs
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
nfs
NFSv4: fix server_scope memory leak
2012-02-17 17:34:03 -05:00
nfs_common
nfsd
Merge branch 'for-3.3' of git://linux-nfs.org/~bfields/linux
2012-01-14 12:26:41 -08:00
nilfs2
nilfs2: avoid overflowing segment numbers in nilfs_ioctl_clean_segments()
2012-02-08 19:03:51 -08:00
nls
NLS: raname "maxlen" to "maxout" in UTF conversion routines
2011-11-26 19:58:47 -08:00
notify
fsnotify: don't BUG in fsnotify_destroy_mark()
2012-01-14 18:01:42 -08:00
ntfs
module_param: avoid bool abuse, add bint for special cases.
2012-01-13 09:32:17 +10:30
ocfs2
ocfs2: deal with wraparounds of i_nlink in ocfs2_rename()
2012-02-13 20:45:39 -05:00
omfs
omfs: propagate umode_t
2012-01-03 22:55:01 -05:00
openpromfs
vfs: fix the stupidity with i_dentry in inode destructors
2012-01-03 22:52:40 -05:00
proc
Fix race in process_vm_rw_core
2012-02-02 12:55:17 -08:00
pstore
pstore: gracefully handle NULL pstore_info functions
2011-11-18 13:49:00 -08:00
qnx4
qnx4: don't leak ->BitMap on late failure exits
2012-01-19 13:54:36 -05:00
quota
quota: Fix deadlock with suspend and quotas
2012-02-13 20:45:39 -05:00
ramfs
pohmelfs: propagate umode_t
2012-01-03 22:55:07 -05:00
reiserfs
reiserfs: don't lock root inode searching
2012-01-10 16:30:54 -08:00
romfs
MTD pull for 3.3
2012-01-10 13:45:22 -08:00
squashfs
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pkl/squashfs-next
2012-01-13 10:34:57 -08:00
sysfs
sysfs: Complain bitterly about attempts to remove files from nonexistent directories.
2012-01-24 12:12:32 -08:00
sysv
vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
2012-01-06 23:16:53 -05:00
ubifs
UBIFS: fix non-debug configuration build
2012-01-15 13:46:02 +02:00
udf
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
2012-01-09 12:51:21 -08:00
ufs
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
xfs
xfs: make inode quota check more general
2012-02-21 10:12:43 -06:00
aio.c
Unused iocbs in a batch should not be accounted as active.
2012-01-13 20:39:44 -08:00
anon_inodes.c
attr.c
switch is_sxid() to umode_t
2012-01-03 22:55:11 -05:00
bad_inode.c
switch ->mknod() to umode_t
2012-01-03 22:54:54 -05:00
binfmt_aout.c
binfmt_elf.c
fs: binfmt_elf: create Kconfig variable for PIE randomization
2012-01-10 16:30:51 -08:00
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
2012-01-06 23:16:53 -05:00
binfmt_script.c
binfmt_som.c
bio-integrity.c
fs: add export.h to files using EXPORT_SYMBOL/THIS_MODULE macros
2011-10-31 19:30:31 -04:00
bio.c
bio: don't overflow in bio_get_nr_vecs()
2012-02-08 22:07:18 +01:00
block_dev.c
vfs: cache request_queue in struct block_device
2012-01-12 20:13:12 -08:00
buffer.c
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
char_dev.c
char_dev.c: fix up some whitespace errors
2011-12-13 11:18:17 -08:00
compat.c
vfs: fix compat_sys_stat() handling of overflows in st_nlink
2012-02-13 20:45:39 -05:00
compat_binfmt_elf.c
compat_ioctl.c
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
2012-01-15 12:49:56 -08:00
dcache.c
vfs: fix panic in __d_lookup() with high dentry hashtable counts
2012-02-13 20:45:38 -05:00
dcookies.c
direct-io.c
Restore direct_io / truncate locking API
2012-02-23 15:56:21 -08:00
drop_caches.c
eventfd.c
eventpoll.c
epoll: ep_unregister_pollwait() can use the freed pwq->whead
2012-02-24 11:42:50 -08:00
exec.c
exec: fix use-after-free bug in setup_new_exec()
2012-02-06 15:15:20 -08:00
fcntl.c
fhandle.c
vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
2012-01-06 23:16:53 -05:00
fifo.c
file.c
file_table.c
vfs: prevent remount read-only if pending removes
2012-01-06 23:20:13 -05:00
filesystems.c
vfs: convert fs_supers to hlist
2012-01-03 22:52:39 -05:00
fs-writeback.c
writeback: fix NULL bdi->dev in trace writeback_single_inode
2012-02-01 16:53:40 +08:00
fs_struct.c
generic_acl.c
inode.c
vfs: fix panic in __d_lookup() with high dentry hashtable counts
2012-02-13 20:45:38 -05:00
internal.h
vfs: protect remounting superblock read-only
2012-01-06 23:20:12 -05:00
ioctl.c
vfs: fix up ENOIOCTLCMD error handling
2012-01-05 15:40:12 -08:00
ioprio.c
block: strip out locking optimization in put_io_context()
2012-02-07 07:51:30 +01:00
Kconfig
Merge branch 'for-linus' of git://git.open-osd.org/linux-open-osd
2012-01-09 12:51:01 -08:00
Kconfig.binfmt
fs: binfmt_elf: create Kconfig variable for PIE randomization
2012-01-10 16:30:51 -08:00
libfs.c
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
locks.c
vfs: fix handling of lock allocation failure in lease-break case
2011-12-26 10:25:26 -08:00
Makefile
Merge branches 'vfsmount-guts', 'umode_t' and 'partitions' into Z
2012-01-06 23:15:54 -05:00
mbcache.c
mount.h
vfs: keep list of mounts for each superblock
2012-01-06 23:20:12 -05:00
mpage.c
fs: remove unneeded plug in mpage_readpages()
2012-01-12 09:19:54 +01:00
namei.c
vfs: fix d_inode_lookup() dentry ref leak
2012-02-13 20:45:37 -05:00
namespace.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
no-block.c
open.c
switch security_path_chmod() to struct path *
2012-01-06 23:16:53 -05:00
pipe.c
pipe: fail cleanly when root tries F_SETPIPE_SZ with big size
2012-01-12 20:13:04 -08:00
pnode.c
vfs: switch pnode.h macros to struct mount *
2012-01-03 22:57:11 -05:00
pnode.h
vfs: switch pnode.h macros to struct mount *
2012-01-03 22:57:11 -05:00
posix_acl.c
vfs: pass all mask flags check_acl and posix_acl_permission
2011-10-28 14:58:54 +02:00
proc_namespace.c
vfs: switch ->show_options() to struct dentry *
2012-01-06 23:19:54 -05:00
read_write.c
Cross Memory Attach
2011-10-31 17:30:44 -07:00
read_write.h
readdir.c
select.c
sys_poll: fix incorrect type for 'timeout' parameter
2012-02-21 17:24:20 -08:00
seq_file.c
constify seq_file stuff
2012-01-03 22:52:40 -05:00
signalfd.c
epoll: ep_unregister_pollwait() can use the freed pwq->whead
2012-02-24 11:42:50 -08:00
splice.c
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
stack.c
filesystems: add set_nlink()
2011-11-02 12:53:43 +01:00
stat.c
readlinkat: ensure we return ENOENT for the empty pathname for normal lookups
2011-11-02 12:53:42 +01:00
statfs.c
vfs: new helper - vfs_ustat()
2012-01-03 22:53:07 -05:00
super.c
vfs: Provide function to get superblock and wait for it to thaw
2012-02-13 20:45:38 -05:00
sync.c
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
timerfd.c
utimes.c
xattr.c
vfs: mnt_drop_write_file()
2012-01-03 22:52:40 -05:00
xattr_acl.c