lkml.org 
[lkml]   [2010]   [Sep]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 26/34] union-mount: Temporarily disable some syscalls
    Date
    After some of the following patches in this series, a few system calls
    will crash the kernel if called on union-mounted file systems.
    Temporarily disable rename(), unlink(), and rmdir() on unioned file
    systems until they are correctly implemented by later patches.

    Signed-off-by: Valerie Aurora <vaurora@redhat.com>
    ---
    fs/namei.c | 17 +++++++++++++++++
    1 files changed, 17 insertions(+), 0 deletions(-)

    diff --git a/fs/namei.c b/fs/namei.c
    index 0b6378e..2de4378 100644
    --- a/fs/namei.c
    +++ b/fs/namei.c
    @@ -35,6 +35,7 @@
    #include <asm/uaccess.h>

    #include "internal.h"
    +#include "union.h"

    /* [Feb-1997 T. Schoebel-Theuer]
    * Fundamental changes in the pathname lookup mechanisms (namei)
    @@ -2404,6 +2405,11 @@ static long do_rmdir(int dfd, const char __user *pathname)
    if (error)
    return error;

    + /* rmdir() on union mounts not implemented yet */
    + error = -EINVAL;
    + if (IS_DIR_UNIONED(nd.path.dentry))
    + goto exit1;
    +
    switch(nd.last_type) {
    case LAST_DOTDOT:
    error = -ENOTEMPTY;
    @@ -2500,6 +2506,11 @@ static long do_unlinkat(int dfd, const char __user *pathname)
    if (nd.last_type != LAST_NORM)
    goto exit1;

    + /* unlink() on union mounts not implemented yet */
    + error = -EINVAL;
    + if (IS_DIR_UNIONED(nd.path.dentry))
    + goto exit1;
    +
    nd.flags &= ~LOOKUP_PARENT;

    mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
    @@ -2890,6 +2901,12 @@ SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
    if (oldnd.path.mnt != newnd.path.mnt)
    goto exit2;

    + /* rename() on union mounts not implemented yet */
    + error = -EXDEV;
    + if (IS_DIR_UNIONED(oldnd.path.dentry) ||
    + IS_DIR_UNIONED(newnd.path.dentry))
    + goto exit2;
    +
    old_dir = oldnd.path.dentry;
    error = -EBUSY;
    if (oldnd.last_type != LAST_NORM)
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2010-09-17 00:19    [W:3.280 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site