ksmbd: fix heap-based overflow in set_ntacl_dacl()
[platform/kernel/linux-rpi.git] / fs / ksmbd / smbacl.h
index 73e08ca..fcb2c83 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/fs.h>
 #include <linux/namei.h>
 #include <linux/posix_acl.h>
+#include <linux/mnt_idmapping.h>
 
 #include "mgmt/tree_connect.h"
 
@@ -192,7 +193,7 @@ struct posix_acl_state {
 int parse_sec_desc(struct user_namespace *user_ns, struct smb_ntsd *pntsd,
                   int acl_len, struct smb_fattr *fattr);
 int build_sec_desc(struct user_namespace *user_ns, struct smb_ntsd *pntsd,
-                  struct smb_ntsd *ppntsd, int addition_info,
+                  struct smb_ntsd *ppntsd, int ppntsd_size, int addition_info,
                   __u32 *secdesclen, struct smb_fattr *fattr);
 int init_acl_state(struct posix_acl_state *state, int cnt);
 void free_acl_state(struct posix_acl_state *state);
@@ -216,7 +217,7 @@ static inline uid_t posix_acl_uid_translate(struct user_namespace *mnt_userns,
        kuid_t kuid;
 
        /* If this is an idmapped mount, apply the idmapping. */
-       kuid = kuid_into_mnt(mnt_userns, pace->e_uid);
+       kuid = mapped_kuid_fs(mnt_userns, &init_user_ns, pace->e_uid);
 
        /* Translate the kuid into a userspace id ksmbd would see. */
        return from_kuid(&init_user_ns, kuid);
@@ -228,7 +229,7 @@ static inline gid_t posix_acl_gid_translate(struct user_namespace *mnt_userns,
        kgid_t kgid;
 
        /* If this is an idmapped mount, apply the idmapping. */
-       kgid = kgid_into_mnt(mnt_userns, pace->e_gid);
+       kgid = mapped_kgid_fs(mnt_userns, &init_user_ns, pace->e_gid);
 
        /* Translate the kgid into a userspace id ksmbd would see. */
        return from_kgid(&init_user_ns, kgid);