@@ -597,19 +597,19 @@ int setxattr_copy(const char __user *name, struct xattr_ctx *ctx)
597
597
return error ;
598
598
}
599
599
600
- int do_setxattr (struct user_namespace * mnt_userns , struct dentry * dentry ,
600
+ int do_setxattr (struct mnt_idmap * idmap , struct dentry * dentry ,
601
601
struct xattr_ctx * ctx )
602
602
{
603
603
if (is_posix_acl_xattr (ctx -> kname -> name ))
604
- return do_set_acl (mnt_userns , dentry , ctx -> kname -> name ,
604
+ return do_set_acl (idmap , dentry , ctx -> kname -> name ,
605
605
ctx -> kvalue , ctx -> size );
606
606
607
- return vfs_setxattr (mnt_userns , dentry , ctx -> kname -> name ,
607
+ return vfs_setxattr (mnt_idmap_owner ( idmap ) , dentry , ctx -> kname -> name ,
608
608
ctx -> kvalue , ctx -> size , ctx -> flags );
609
609
}
610
610
611
611
static long
612
- setxattr (struct user_namespace * mnt_userns , struct dentry * d ,
612
+ setxattr (struct mnt_idmap * idmap , struct dentry * d ,
613
613
const char __user * name , const void __user * value , size_t size ,
614
614
int flags )
615
615
{
@@ -627,7 +627,7 @@ setxattr(struct user_namespace *mnt_userns, struct dentry *d,
627
627
if (error )
628
628
return error ;
629
629
630
- error = do_setxattr (mnt_userns , d , & ctx );
630
+ error = do_setxattr (idmap , d , & ctx );
631
631
632
632
kvfree (ctx .kvalue );
633
633
return error ;
@@ -646,7 +646,7 @@ static int path_setxattr(const char __user *pathname,
646
646
return error ;
647
647
error = mnt_want_write (path .mnt );
648
648
if (!error ) {
649
- error = setxattr (mnt_user_ns (path .mnt ), path .dentry , name ,
649
+ error = setxattr (mnt_idmap (path .mnt ), path .dentry , name ,
650
650
value , size , flags );
651
651
mnt_drop_write (path .mnt );
652
652
}
@@ -683,7 +683,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
683
683
audit_file (f .file );
684
684
error = mnt_want_write_file (f .file );
685
685
if (!error ) {
686
- error = setxattr (file_mnt_user_ns (f .file ),
686
+ error = setxattr (file_mnt_idmap (f .file ),
687
687
f .file -> f_path .dentry , name ,
688
688
value , size , flags );
689
689
mnt_drop_write_file (f .file );
@@ -696,7 +696,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
696
696
* Extended attribute GET operations
697
697
*/
698
698
ssize_t
699
- do_getxattr (struct user_namespace * mnt_userns , struct dentry * d ,
699
+ do_getxattr (struct mnt_idmap * idmap , struct dentry * d ,
700
700
struct xattr_ctx * ctx )
701
701
{
702
702
ssize_t error ;
@@ -711,9 +711,10 @@ do_getxattr(struct user_namespace *mnt_userns, struct dentry *d,
711
711
}
712
712
713
713
if (is_posix_acl_xattr (ctx -> kname -> name ))
714
- error = do_get_acl (mnt_userns , d , kname , ctx -> kvalue , ctx -> size );
714
+ error = do_get_acl (idmap , d , kname , ctx -> kvalue , ctx -> size );
715
715
else
716
- error = vfs_getxattr (mnt_userns , d , kname , ctx -> kvalue , ctx -> size );
716
+ error = vfs_getxattr (mnt_idmap_owner (idmap ), d , kname ,
717
+ ctx -> kvalue , ctx -> size );
717
718
if (error > 0 ) {
718
719
if (ctx -> size && copy_to_user (ctx -> value , ctx -> kvalue , error ))
719
720
error = - EFAULT ;
@@ -727,7 +728,7 @@ do_getxattr(struct user_namespace *mnt_userns, struct dentry *d,
727
728
}
728
729
729
730
static ssize_t
730
- getxattr (struct user_namespace * mnt_userns , struct dentry * d ,
731
+ getxattr (struct mnt_idmap * idmap , struct dentry * d ,
731
732
const char __user * name , void __user * value , size_t size )
732
733
{
733
734
ssize_t error ;
@@ -746,7 +747,7 @@ getxattr(struct user_namespace *mnt_userns, struct dentry *d,
746
747
if (error < 0 )
747
748
return error ;
748
749
749
- error = do_getxattr (mnt_userns , d , & ctx );
750
+ error = do_getxattr (idmap , d , & ctx );
750
751
751
752
kvfree (ctx .kvalue );
752
753
return error ;
@@ -762,7 +763,7 @@ static ssize_t path_getxattr(const char __user *pathname,
762
763
error = user_path_at (AT_FDCWD , pathname , lookup_flags , & path );
763
764
if (error )
764
765
return error ;
765
- error = getxattr (mnt_user_ns (path .mnt ), path .dentry , name , value , size );
766
+ error = getxattr (mnt_idmap (path .mnt ), path .dentry , name , value , size );
766
767
path_put (& path );
767
768
if (retry_estale (error , lookup_flags )) {
768
769
lookup_flags |= LOOKUP_REVAL ;
@@ -792,7 +793,7 @@ SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name,
792
793
if (!f .file )
793
794
return error ;
794
795
audit_file (f .file );
795
- error = getxattr (file_mnt_user_ns (f .file ), f .file -> f_path .dentry ,
796
+ error = getxattr (file_mnt_idmap (f .file ), f .file -> f_path .dentry ,
796
797
name , value , size );
797
798
fdput (f );
798
799
return error ;
@@ -877,7 +878,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
877
878
* Extended attribute REMOVE operations
878
879
*/
879
880
static long
880
- removexattr (struct user_namespace * mnt_userns , struct dentry * d ,
881
+ removexattr (struct mnt_idmap * idmap , struct dentry * d ,
881
882
const char __user * name )
882
883
{
883
884
int error ;
@@ -890,9 +891,9 @@ removexattr(struct user_namespace *mnt_userns, struct dentry *d,
890
891
return error ;
891
892
892
893
if (is_posix_acl_xattr (kname ))
893
- return vfs_remove_acl (mnt_userns , d , kname );
894
+ return vfs_remove_acl (mnt_idmap_owner ( idmap ) , d , kname );
894
895
895
- return vfs_removexattr (mnt_userns , d , kname );
896
+ return vfs_removexattr (mnt_idmap_owner ( idmap ) , d , kname );
896
897
}
897
898
898
899
static int path_removexattr (const char __user * pathname ,
@@ -906,7 +907,7 @@ static int path_removexattr(const char __user *pathname,
906
907
return error ;
907
908
error = mnt_want_write (path .mnt );
908
909
if (!error ) {
909
- error = removexattr (mnt_user_ns (path .mnt ), path .dentry , name );
910
+ error = removexattr (mnt_idmap (path .mnt ), path .dentry , name );
910
911
mnt_drop_write (path .mnt );
911
912
}
912
913
path_put (& path );
@@ -939,7 +940,7 @@ SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
939
940
audit_file (f .file );
940
941
error = mnt_want_write_file (f .file );
941
942
if (!error ) {
942
- error = removexattr (file_mnt_user_ns (f .file ),
943
+ error = removexattr (file_mnt_idmap (f .file ),
943
944
f .file -> f_path .dentry , name );
944
945
mnt_drop_write_file (f .file );
945
946
}
0 commit comments