|
@@ -75,13 +75,16 @@ int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat,
|
|
|
int error = -EINVAL;
|
|
|
int lookup_flags = 0;
|
|
|
|
|
|
- if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT)) != 0)
|
|
|
+ if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |
|
|
|
+ AT_EMPTY_PATH)) != 0)
|
|
|
goto out;
|
|
|
|
|
|
if (!(flag & AT_SYMLINK_NOFOLLOW))
|
|
|
lookup_flags |= LOOKUP_FOLLOW;
|
|
|
if (flag & AT_NO_AUTOMOUNT)
|
|
|
lookup_flags |= LOOKUP_NO_AUTOMOUNT;
|
|
|
+ if (flag & AT_EMPTY_PATH)
|
|
|
+ lookup_flags |= LOOKUP_EMPTY;
|
|
|
|
|
|
error = user_path_at(dfd, filename, lookup_flags, &path);
|
|
|
if (error)
|
|
@@ -297,7 +300,7 @@ SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname,
|
|
|
if (bufsiz <= 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- error = user_path_at(dfd, pathname, 0, &path);
|
|
|
+ error = user_path_at(dfd, pathname, LOOKUP_EMPTY, &path);
|
|
|
if (!error) {
|
|
|
struct inode *inode = path.dentry->d_inode;
|
|
|
|