24 Sep, 2009
1 commit
-
Most call sites of unload_nls() do:
if (nls)
unload_nls(nls);Check the pointer inside unload_nls() like we do in kfree() and
simplify the call sites.Signed-off-by: Thomas Gleixner
Cc: Steve French
Cc: OGAWA Hirofumi
Cc: Roman Zippel
Cc: Dave Kleikamp
Cc: Petr Vandrovec
Cc: Anton Altaparmakov
Signed-off-by: Al Viro
13 Jul, 2009
1 commit
-
* Remove smp_lock.h from files which don't need it (including some headers!)
* Add smp_lock.h to files which do need it
* Make smp_lock.h include conditional in hardirq.h
It's needed only for one kernel_locked() usage which is under CONFIG_PREEMPTThis will make hardirq.h inclusion cheaper for every PREEMPT=n config
(which includes allmodconfig/allyesconfig, BTW)Signed-off-by: Alexey Dobriyan
Signed-off-by: Linus Torvalds
12 Jun, 2009
4 commits
-
Add a ->sync_fs method for data integrity syncs, and reimplement
->write_super ontop of it.Signed-off-by: Christoph Hellwig
Signed-off-by: Al Viro -
Push down lock_super into ->write_super instances and remove it from the
caller.Following filesystem don't need ->s_lock in ->write_super and are skipped:
* bfs, nilfs2 - no other uses of s_lock and have internal locks in
->write_super
* ext2 - uses BKL in ext2_write_super and has internal calls without s_lock
* reiserfs - no other uses of s_lock as has reiserfs_write_lock (BKL) in
->write_super
* xfs - no other uses of s_lock and uses internal lock (buffer lock on
superblock buffer) to serialize ->write_super. Also xfs_fs_write_super
is superflous and will go away in the next merge windowSigned-off-by: Christoph Hellwig
Signed-off-by: Al Viro -
Move BKL into ->put_super from the only caller. A couple of
filesystems had trivial enough ->put_super (only kfree and NULLing of
s_fs_info + stuff in there) to not get any locking: coda, cramfs, efs,
hugetlbfs, omfs, qnx4, shmem, all others got the full treatment. Most
of them probably don't need it, but I'd rather sort that out individually.
Preferably after all the other BKL pushdowns in that area.[AV: original used to move lock_super() down as well; these changes are
removed since we don't do lock_super() at all in generic_shutdown_super()
now]
[AV: fuse, btrfs and xfs are known to need no damn BKL, exempt]Signed-off-by: Christoph Hellwig
Signed-off-by: Al Viro -
We just did a full fs writeout using sync_filesystem before, and if
that's not enough for the filesystem it can perform it's own writeout
in ->put_super, which many filesystems already do.Move a call to foofs_write_super into every foofs_put_super for now to
guarantee identical behaviour until it's cleaned up by the individual
filesystem maintainers.Exceptions:
- affs already has identical copy & pasted code at the beginning of
affs_put_super so no need to do it twice.
- xfs does the right thing without it and I have changes pending for
the xfs tree touching this are so I don't really need conflicts
here..Signed-off-by: Christoph Hellwig
Signed-off-by: Al Viro
03 Apr, 2009
2 commits
-
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
Remove two unneeded exports and make two symbols static in fs/mpage.c
Cleanup after commit 585d3bc06f4ca57f975a5a1f698f65a45ea66225
Trim includes of fdtable.h
Don't crap into descriptor table in binfmt_som
Trim includes in binfmt_elf
Don't mess with descriptor table in load_elf_binary()
Get rid of indirect include of fs_struct.h
New helper - current_umask()
check_unsafe_exec() doesn't care about signal handlers sharing
New locking/refcounting for fs_struct
Take fs_struct handling to new file (fs/fs_struct.c)
Get rid of bumping fs_struct refcount in pivot_root(2)
Kill unsharing fs_struct in __set_personality() -
Make hfsplus return f_fsid info for statfs(2).
Signed-off-by: Coly Li
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
01 Apr, 2009
1 commit
-
current->fs->umask is what most of fs_struct users are doing.
Put that into a helper function.Signed-off-by: Al Viro
28 Mar, 2009
1 commit
-
Signed-off-by: Al Viro
22 Jan, 2009
1 commit
-
Signed-off-by: Alexey Dobriyan
14 Nov, 2008
1 commit
-
Wrap access to task credentials so that they can be separated more easily from
the task_struct during the introduction of COW creds.Change most current->(|e|s|fs)[ug]id to current_(|e|s|fs)[ug]id().
Change some task->e?[ug]id to task_e?[ug]id(). In some places it makes more
sense to use RCU directly rather than a convenient wrapper; these will be
addressed by later patches.Signed-off-by: David Howells
Reviewed-by: James Morris
Acked-by: Serge Hallyn
Cc: Roman Zippel
Signed-off-by: James Morris
23 Oct, 2008
1 commit
-
For execute permission on a regular files we need to check if file has
any execute bits at all, regardless of capabilites.This check is normally performed by generic_permission() but was also
added to the case when the filesystem defines its own ->permission()
method. In the latter case the filesystem should be responsible for
performing this check.Move the check from inode_permission() inside filesystems which are
not calling generic_permission().Create a helper function execute_ok() that returns true if the inode
is a directory or if any execute bits are present in i_mode.Also fix up the following code:
- coda control file is never executable
- sysctl files are never executable
- hfs_permission seems broken on MAY_EXEC, remove
- hfsplus_permission is eqivalent to generic_permission(), removeSigned-off-by: Miklos Szeredi
20 Oct, 2008
2 commits
-
A corrupted extent for the extent file itself may try to get an impossible
extent, causing a deadlock if I see it correctly.Check the inode number after the first_blocks checks and fail if it's the
extent file, as according to the spec the extent file should have no
extent for itself.Signed-off-by: Eric Sesterhenn
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
hfsplus: O_LARGEFILE checking is missing
Addresses http://bugzilla.kernel.org/show_bug.cgi?id=8490
From: Alan Cox
Reported-by: didier
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
17 Oct, 2008
3 commits
-
While testing more corrupted images with hfsplus, i came across
one which triggered the following bug:[15840.675016] BUG: unable to handle kernel paging request at fffffffb
[15840.675016] IP: [] kmap+0x15/0x56
[15840.675016] *pde = 00008067 *pte = 00000000
[15840.675016] Oops: 0000 [#1] PREEMPT DEBUG_PAGEALLOC
[15840.675016] Modules linked in:
[15840.675016]
[15840.675016] Pid: 11575, comm: ln Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #29)
[15840.675016] EIP: 0060:[] EFLAGS: 00010202 CPU: 0
[15840.675016] EIP is at kmap+0x15/0x56
[15840.675016] EAX: 00000246 EBX: fffffffb ECX: 00000000 EDX: cab919c0
[15840.675016] ESI: 000007dd EDI: cab0bcf4 EBP: cab0bc98 ESP: cab0bc94
[15840.675016] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[15840.675016] Process ln (pid: 11575, ti=cab0b000 task=cab919c0 task.ti=cab0b000)
[15840.675016] Stack: 00000000 cab0bcdc c0231cfb 00000000 cab0bce0 00000800 ca9290c0 fffffffb
[15840.675016] cab145d0 cab919c0 cab15998 22222222 22222222 22222222 00000001 cab15960
[15840.675016] 000007dd cab0bcf4 cab0bd04 c022cb3a cab0bcf4 cab15a6c ca9290c0 00000000
[15840.675016] Call Trace:
[15840.675016] [] ? hfsplus_block_allocate+0x6f/0x2d3
[15840.675016] [] ? hfsplus_file_extend+0xc4/0x1db
[15840.675016] [] ? hfsplus_get_block+0x8c/0x19d
[15840.675016] [] ? sub_preempt_count+0x9d/0xab
[15840.675016] [] ? __block_prepare_write+0x147/0x311
[15840.675016] [] ? __grab_cache_page+0x52/0x73
[15840.675016] [] ? block_write_begin+0x79/0xd5
[15840.675016] [] ? hfsplus_get_block+0x0/0x19d
[15840.675016] [] ? cont_write_begin+0x27f/0x2af
[15840.675016] [] ? hfsplus_get_block+0x0/0x19d
[15840.675016] [] ? tick_program_event+0x28/0x4c
[15840.675016] [] ? trace_hardirqs_off+0xb/0xd
[15840.675016] [] ? hfsplus_write_begin+0x2d/0x32
[15840.675016] [] ? hfsplus_get_block+0x0/0x19d
[15840.675016] [] ? pagecache_write_begin+0x33/0x107
[15840.675016] [] ? __page_symlink+0x3c/0xae
[15840.675016] [] ? __mark_inode_dirty+0x12f/0x137
[15840.675016] [] ? page_symlink+0x19/0x1e
[15840.675016] [] ? hfsplus_symlink+0x41/0xa6
[15840.675016] [] ? vfs_symlink+0x99/0x101
[15840.675016] [] ? sys_symlinkat+0x6b/0xad
[15840.675016] [] ? sys_symlink+0x10/0x12
[15840.675016] [] ? sysenter_do_call+0x12/0x31
[15840.675016] =======================
[15840.675016] Code: 00 00 75 10 83 3d 88 2f ec c0 02 75 07 89 d0 e8 12 56 05 00 5d c3 55 ba 06 00 00 00 89 e5 53 89 c3 b8 3d eb 7e c0 e8 16 74 00 00 03 c1 e8 1e 69 c0 d8 02 00 00 05 b8 69 8e c0 2b 80 c4 02 00
[15840.675016] EIP: [] kmap+0x15/0x56 SS:ESP 0068:cab0bc94
[15840.675016] ---[ end trace 4fea40dad6b70e5f ]---This happens because the return value of read_mapping_page() is passed on
to kmap unchecked. The bug is triggered after the first
read_mapping_page() in hfsplus_block_allocate(), this patch fixes all
three usages in this functions but leaves the ones further down in the
file unchanged.Signed-off-by: Eric Sesterhenn
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
When an hfsplus image gets corrupted it might happen that the catalog
namelength field gets b0rked. If we mount such an image the memcpy() in
hfsplus_cat_build_key_uni() writes more than the 255 that fit in the name
field. Depending on the size of the overwritten data, we either only get
memory corruption or also trigger an oops like this:[ 221.628020] BUG: unable to handle kernel paging request at c82b0000
[ 221.629066] IP: [] hfsplus_find_cat+0x10d/0x151
[ 221.629066] *pde = 0ea29163 *pte = 082b0160
[ 221.629066] Oops: 0002 [#1] PREEMPT DEBUG_PAGEALLOC
[ 221.629066] Modules linked in:
[ 221.629066]
[ 221.629066] Pid: 4845, comm: mount Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #28)
[ 221.629066] EIP: 0060:[] EFLAGS: 00010206 CPU: 0
[ 221.629066] EIP is at hfsplus_find_cat+0x10d/0x151
[ 221.629066] EAX: 00000029 EBX: 00016210 ECX: 000042c2 EDX: 00000002
[ 221.629066] ESI: c82d70ca EDI: c82b0000 EBP: c82d1bcc ESP: c82d199c
[ 221.629066] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[ 221.629066] Process mount (pid: 4845, ti=c82d1000 task=c8224060 task.ti=c82d1000)
[ 221.629066] Stack: c080b3c4 c82aa8f8 c82d19c2 00016210 c080b3be c82d1bd4 c82aa8f0 00000300
[ 221.629066] 01000000 750008b1 74006e00 74006900 65006c00 c82d6400 c013bd35 c8224060
[ 221.629066] 00000036 00000046 c82d19f0 00000082 c8224548 c8224060 00000036 c0d653cc
[ 221.629066] Call Trace:
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? native_sched_clock+0x82/0x96
[ 221.629066] [] ? __kernel_text_address+0x1b/0x27
[ 221.629066] [] ? dump_trace+0xca/0xd6
[ 221.629066] [] ? save_stack_address+0x0/0x2c
[ 221.629066] [] ? save_stack_trace+0x1c/0x3a
[ 221.629066] [] ? save_trace+0x37/0x8d
[ 221.629066] [] ? add_lock_to_list+0x67/0x8d
[ 221.629066] [] ? validate_chain+0x8a4/0x9f4
[ 221.629066] [] ? down+0xc/0x2f
[ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? native_sched_clock+0x82/0x96
[ 221.629066] [] ? mark_held_locks+0x43/0x5a
[ 221.629066] [] ? trace_hardirqs_on+0xb/0xd
[ 221.629066] [] ? trace_hardirqs_on_caller+0xf4/0x12f
[ 221.629066] [] ? _spin_unlock_irqrestore+0x42/0x58
[ 221.629066] [] ? down+0x2b/0x2f
[ 221.629066] [] ? hfsplus_iget+0xa0/0x154
[ 221.629066] [] ? hfsplus_fill_super+0x280/0x447
[ 221.629066] [] ? native_sched_clock+0x82/0x96
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
[ 221.629066] [] ? string+0x2b/0x74
[ 221.629066] [] ? vsnprintf+0x2e9/0x512
[ 221.629066] [] ? dump_trace+0xca/0xd6
[ 221.629066] [] ? save_stack_trace+0x1c/0x3a
[ 221.629066] [] ? save_stack_trace+0x1c/0x3a
[ 221.629066] [] ? save_trace+0x37/0x8d
[ 221.629066] [] ? add_lock_to_list+0x67/0x8d
[ 221.629066] [] ? validate_chain+0x8a4/0x9f4
[ 221.629066] [] ? up+0xc/0x2f
[ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
[ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
[ 221.629066] [] ? native_sched_clock+0x82/0x96
[ 221.629066] [] ? snprintf+0x1b/0x1d
[ 221.629066] [] ? disk_name+0x25/0x67
[ 221.629066] [] ? get_sb_bdev+0xcd/0x10b
[ 221.629066] [] ? kstrdup+0x2a/0x4c
[ 221.629066] [] ? hfsplus_get_sb+0x13/0x15
[ 221.629066] [] ? hfsplus_fill_super+0x0/0x447
[ 221.629066] [] ? vfs_kern_mount+0x3b/0x76
[ 221.629066] [] ? do_kern_mount+0x32/0xba
[ 221.629066] [] ? do_new_mount+0x46/0x74
[ 221.629066] [] ? do_mount+0x175/0x193
[ 221.629066] [] ? trace_hardirqs_on_caller+0xf4/0x12f
[ 221.629066] [] ? __get_free_pages+0x1e/0x24
[ 221.629066] [] ? lock_kernel+0x19/0x8c
[ 221.629066] [] ? sys_mount+0x51/0x9b
[ 221.629066] [] ? sys_mount+0x64/0x9b
[ 221.629066] [] ? sysenter_do_call+0x12/0x31
[ 221.629066] =======================
[ 221.629066] Code: 89 c2 c1 e2 08 c1 e8 08 09 c2 8b 85 e8 fd ff ff 66 89 50 06 89 c7 53 83 c7 08 56 57 68 c4 b3 80 c0 e8 8c 5c ef ff 89 d9 c1 e9 02 a5 89 d9 83 e1 03 74 02 f3 a4 83 c3 06 8b 95 e8 fd ff ff 0f
[ 221.629066] EIP: [] hfsplus_find_cat+0x10d/0x151 SS:ESP 0068:c82d199c
[ 221.629066] ---[ end trace e417a1d67f0d0066 ]---Since hfsplus_cat_build_key_uni() returns void and only has one callsite,
the check is performed at the callsite.Signed-off-by: Eric Sesterhenn
Reviewed-by: Pekka Enberg
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Check whether the file system was to be mounted read only anyway before
warning about changing the mount to read only.Signed-off-by: Mike Crowe
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
14 Oct, 2008
1 commit
-
This is a much better version of a previous patch to make the parser
tables constant. Rather than changing the typedef, we put the "const" in
all the various places where its required, allowing the __initconst
exception for nfsroot which was the cause of the previous trouble.This was posted for review some time ago and I believe its been in -mm
since then.Signed-off-by: Steven Whitehouse
Cc: Alexander Viro
Signed-off-by: Linus Torvalds
27 Jul, 2008
3 commits
-
make it atomic_long_t; while we are at it, get rid of useless checks in affs,
hfs and hpfs - ->open() always has it equal to 1, ->release() - to 0.Signed-off-by: Al Viro
-
* kill nameidata * argument; map the 3 bits in ->flags anybody cares
about to new MAY_... ones and pass with the mask.
* kill redundant gfs2_iop_permission()
* sanitize ecryptfs_permission()
* fix remaining places where ->permission() instances might barf on new
MAY_... found in mask.The obvious next target in that direction is permission(9)
folded fix for nfs_permission() breakage from Miklos Szeredi
Signed-off-by: Al Viro
-
Kmem cache passed to constructor is only needed for constructors that are
themselves multiplexeres. Nobody uses this "feature", nor does anybody uses
passed kmem cache in non-trivial way, so pass only pointer to object.Non-trivial places are:
arch/powerpc/mm/init_64.c
arch/powerpc/mm/hugetlbpage.cThis is flag day, yes.
Signed-off-by: Alexey Dobriyan
Acked-by: Pekka Enberg
Acked-by: Christoph Lameter
Cc: Jon Tollefson
Cc: Nick Piggin
Cc: Matt Mackall
[akpm@linux-foundation.org: fix arch/powerpc/mm/hugetlbpage.c]
[akpm@linux-foundation.org: fix mm/slab.c]
[akpm@linux-foundation.org: fix ubifs]
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
26 Jul, 2008
1 commit
-
Apple Extended HFS file system: The semaphore extents lock is used as a
mutex. Convert it to the mutex API.Signed-off-by: Matthias Kaehlcke
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
13 May, 2008
1 commit
-
Fix an oops with a corrupted hfs+ image.
See http://bugzilla.kernel.org/show_bug.cgi?id=10548 for details.
Problem is that we call hfs_btree_open() from hfsplus_fill_super() to set
HFSPLUS_SB(sb).[ext_tree|cat_tree] Both trees are still NULL at this moment.
If hfs_btree_open() fails for any reason it calls iput() on the page, which
gets to hfsplus_releasepage() which tries to access HFSPLUS_SB(sb).* which is
still NULL and oopses while dereferencing it.[akpm@linux-foundation.org: build fix]
Signed-off-by: Eric Sesterhenn
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
30 Apr, 2008
3 commits
-
fs/hfsplus/btree.c: In function 'hfsplus_bmap_alloc':
fs/hfsplus/btree.c:239: warning: comparison is always false due to limited range of data typeBut this might hide a real bug?
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
replace all:
big_endian_variable = cpu_to_beX(beX_to_cpu(big_endian_variable) +
expression_in_cpu_byteorder);
with:
beX_add_cpu(&big_endian_variable, expression_in_cpu_byteorder);
generated with semantic patchSigned-off-by: Marcin Slusarz
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Dave Jones
Signed-off-by: Linus Torvalds
29 Apr, 2008
3 commits
-
Signed-off-by: Harvey Harrison
Cc: Roman Zippel
Cc: Al Viro
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
fs/hfsplus/options.c (hfsplus_parse_options): Handle match_strdup failure.
Signed-off-by: Jim Meyering
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Add proper extern declarations for two structs in fs/hfsplus/hfsplus_fs.h
Signed-off-by: Adrian Bunk
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
19 Apr, 2008
1 commit
-
Some ioctl()s can cause writes to the filesystem. Take these, and make them
use mnt_want/drop_write() instead.[AV: updated]
Acked-by: Al Viro
Signed-off-by: Christoph Hellwig
Signed-off-by: Dave Hansen
Signed-off-by: Andrew Morton
Signed-off-by: Al Viro
11 Apr, 2008
1 commit
-
Some time ago while attempting to handle invalid link counts, I botched
the unlink of links itself, so this patch fixes this now correctly, so
that only the link count of nodes that don't point to links is ignored.
Thanks to Vlado Plaga to notify me of this
problem.Signed-off-by: Roman Zippel
Signed-off-by: Linus Torvalds
09 Feb, 2008
1 commit
-
fs/hfsplus/unicode.c: In function 'hfsplus_hash_dentry':
fs/hfsplus/unicode.c:328: warning: 'dsize' may be used uninitialized in this functionCc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
08 Feb, 2008
1 commit
-
Stop the HFSPLUS filesystem from using iget() and read_inode(). Replace
hfsplus_read_inode() with hfsplus_iget(), and call that instead of iget().
hfsplus_iget() then uses iget_locked() directly and returns a proper error
code instead of an inode in the event of an error.hfsplus_fill_super() returns any error incurred when getting the root inode.
Signed-off-by: David Howells
Cc: Roman Zippel
Acked-by: Christoph Hellwig
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
17 Oct, 2007
2 commits
-
Slab constructors currently have a flags parameter that is never used. And
the order of the arguments is opposite to other slab functions. The object
pointer is placed before the kmem_cache pointer.Convert
ctor(void *object, struct kmem_cache *s, unsigned long flags)
to
ctor(struct kmem_cache *s, void *object)
throughout the kernel
[akpm@linux-foundation.org: coupla fixes]
Signed-off-by: Christoph Lameter
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Nick Piggin
Cc: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
20 Jul, 2007
1 commit
-
Slab destructors were no longer supported after Christoph's
c59def9f222d44bb7e2f0a559f2906191a0862d7 change. They've been
BUGs for both slab and slub, and slob never supported them
either.This rips out support for the dtor pointer from kmem_cache_create()
completely and fixes up every single callsite in the kernel (there were
about 224, not including the slab allocator definitions themselves,
or the documentation references).Signed-off-by: Paul Mundt
18 Jul, 2007
1 commit
-
Introduce is_owner_or_cap() macro in fs.h, and convert over relevant
users to it. This is done because we want to avoid bugs in the future
where we check for only effective fsuid of the current task against a
file's owning uid, without simultaneously checking for CAP_FOWNER as
well, thus violating its semantics.
[ XFS uses special macros and structures, and in general looked ...
untouchable, so we leave it alone -- but it has been looked over. ]The (current->fsuid != inode->i_uid) check in generic_permission() and
exec_permission_lite() is left alone, because those operations are
covered by CAP_DAC_OVERRIDE and CAP_DAC_READ_SEARCH. Similarly operations
falling under the purview of CAP_CHOWN and CAP_LEASE are also left alone.Signed-off-by: Satyam Sharma
Cc: Al Viro
Acked-by: Serge E. Hallyn
Signed-off-by: Linus Torvalds
17 Jul, 2007
2 commits
-
Add custom dentry hash and comparison operations for HFS+ filesystems that are
case-insensitive and/or do automatic unicode decomposition. The new
operations reuse the existing HFS+ ASCII to unicode conversion, unicode
decomposition and case folding functionality.Signed-off-by: Duane Griffin
Signed-off-by: Roman ZippelSigned-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The HFS+ filesystem is case-insensitive and does automatic unicode
decomposition by default, but does not provide custom dentry operations. This
can lead to multiple dentries being cached for lookups on a filename with
varying case and/or character (de)composition.These patches add custom dentry hash and comparison operations for
case-sensitive and/or automatically decomposing HFS+ filesystems. Unicode
decomposition and case-folding are performed as required to ensure equivalent
filenames are hashed to the same values and compare as equal.This patch:
Refactor existing HFS+ ASCII to unicode string conversion routine to split out
character conversion functionality. This will be reused by the custom dentry
hash and comparison routines. This approach avoids unnecessary memory
allocation compared to using the string conversion routine directly in the new
functions.[akpm@linux-foundation.org: avoid use-of-uninitialised]
Signed-off-by: Duane Griffin
Signed-off-by: Roman Zippel
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds