Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 300367
b: refs/heads/master
c: 3f9f0aa
h: refs/heads/master
i:
  300365: 67b4873
  300363: da0c84a
  300359: 94f4d66
  300351: ffb94fd
v: v3
  • Loading branch information
Linus Torvalds committed Apr 28, 2012
1 parent 7ca07dd commit c5b990c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0749708352fddbe0fa81fc25f96e3b1f77c655f4
refs/heads/master: 3f9f0aa687d45cbc8e7bb3cfd3aab555dcc8872e
58 changes: 24 additions & 34 deletions trunk/fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,47 +116,37 @@
* POSIX.1 2.4: an empty pathname is invalid (ENOENT).
* PATH_MAX includes the nul terminator --RR.
*/
static int do_getname(const char __user *filename, char *page)
{
int retval;
unsigned long len = PATH_MAX;

if (!segment_eq(get_fs(), KERNEL_DS)) {
if ((unsigned long) filename >= TASK_SIZE)
return -EFAULT;
if (TASK_SIZE - (unsigned long) filename < PATH_MAX)
len = TASK_SIZE - (unsigned long) filename;
}

retval = strncpy_from_user(page, filename, len);
if (retval > 0) {
if (retval < len)
return 0;
return -ENAMETOOLONG;
} else if (!retval)
retval = -ENOENT;
return retval;
}

static char *getname_flags(const char __user *filename, int flags, int *empty)
{
char *result = __getname();
int retval;
char *result = __getname(), *err;
int len;

if (!result)
if (unlikely(!result))
return ERR_PTR(-ENOMEM);

retval = do_getname(filename, result);
if (retval < 0) {
if (retval == -ENOENT && empty)
len = strncpy_from_user(result, filename, PATH_MAX);
err = ERR_PTR(len);
if (unlikely(len < 0))
goto error;

/* The empty path is special. */
if (unlikely(!len)) {
if (empty)
*empty = 1;
if (retval != -ENOENT || !(flags & LOOKUP_EMPTY)) {
__putname(result);
return ERR_PTR(retval);
}
err = ERR_PTR(-ENOENT);
if (!(flags & LOOKUP_EMPTY))
goto error;
}
audit_getname(result);
return result;

err = ERR_PTR(-ENAMETOOLONG);
if (likely(len < PATH_MAX)) {
audit_getname(result);
return result;
}

error:
__putname(result);
return err;
}

char *getname(const char __user * filename)
Expand Down

0 comments on commit c5b990c

Please sign in to comment.