mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 10:54:35 +03:00
Add configure check for user_path_dir()
I didn't notice at the time but user_path_dir() was not introduced at the same time as set_fs_pwd() change. I had lumped the two together but in fact user_path_dir() was introduced in 2.6.27 and set_fs_pwd() taking 2 args was introduced in 2.6.25. This means builds against 2.6.25-2.6.26 kernels were broken. To fix this I've added a check for user_path_dir() and no longer assume that if set_fs_pwd() takes 2 args then user_path_dir() is also available.
This commit is contained in:
+17
-1
@@ -648,7 +648,7 @@ set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, struct dentry *dentry)
|
||||
int
|
||||
vn_set_pwd(const char *filename)
|
||||
{
|
||||
#ifdef HAVE_2ARGS_SET_FS_PWD
|
||||
#if defined(HAVE_2ARGS_SET_FS_PWD) && defined(HAVE_USER_PATH_DIR)
|
||||
struct path path;
|
||||
#else
|
||||
struct nameidata nd;
|
||||
@@ -666,6 +666,7 @@ vn_set_pwd(const char *filename)
|
||||
set_fs(get_ds());
|
||||
|
||||
#ifdef HAVE_2ARGS_SET_FS_PWD
|
||||
# ifdef HAVE_USER_PATH_DIR
|
||||
rc = user_path_dir(filename, &path);
|
||||
if (rc)
|
||||
GOTO(out, rc);
|
||||
@@ -678,6 +679,21 @@ vn_set_pwd(const char *filename)
|
||||
|
||||
dput_and_out:
|
||||
path_put(&path);
|
||||
# else
|
||||
rc = __user_walk(filename,
|
||||
LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_CHDIR, &nd);
|
||||
if (rc)
|
||||
GOTO(out, rc);
|
||||
|
||||
rc = vfs_permission(&nd, MAY_EXEC);
|
||||
if (rc)
|
||||
GOTO(dput_and_out, rc);
|
||||
|
||||
set_fs_pwd(current->fs, &nd.path);
|
||||
|
||||
dput_and_out:
|
||||
path_put(&nd.path);
|
||||
# endif /* HAVE_USER_PATH_DIR */
|
||||
#else
|
||||
rc = __user_walk(filename,
|
||||
LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_CHDIR, &nd);
|
||||
|
||||
Reference in New Issue
Block a user