ksmbd: change security id to the one samba used for posix extension
[platform/kernel/linux-starfive.git] / fs / ksmbd / oplock.c
index 2e56dac..7c890da 100644 (file)
@@ -1616,7 +1616,11 @@ void create_posix_rsp_buf(char *cc, struct ksmbd_file *fp)
        memset(buf, 0, sizeof(struct create_posix_rsp));
        buf->ccontext.DataOffset = cpu_to_le16(offsetof
                        (struct create_posix_rsp, nlink));
-       buf->ccontext.DataLength = cpu_to_le32(52);
+       /*
+        * DataLength = nlink(4) + reparse_tag(4) + mode(4) +
+        * domain sid(28) + unix group sid(16).
+        */
+       buf->ccontext.DataLength = cpu_to_le32(56);
        buf->ccontext.NameOffset = cpu_to_le16(offsetof
                        (struct create_posix_rsp, Name));
        buf->ccontext.NameLength = cpu_to_le16(POSIX_CTXT_DATA_LEN);
@@ -1641,10 +1645,17 @@ void create_posix_rsp_buf(char *cc, struct ksmbd_file *fp)
        buf->nlink = cpu_to_le32(inode->i_nlink);
        buf->reparse_tag = cpu_to_le32(fp->volatile_id);
        buf->mode = cpu_to_le32(inode->i_mode);
+       /*
+        * SidBuffer(44) contain two sids(Domain sid(28), UNIX group sid(16)).
+        * Domain sid(28) = revision(1) + num_subauth(1) + authority(6) +
+        *                  sub_auth(4 * 4(num_subauth)) + RID(4).
+        * UNIX group id(16) = revision(1) + num_subauth(1) + authority(6) +
+        *                     sub_auth(4 * 1(num_subauth)) + RID(4).
+        */
        id_to_sid(from_kuid_munged(&init_user_ns, vfsuid_into_kuid(vfsuid)),
-                 SIDNFS_USER, (struct smb_sid *)&buf->SidBuffer[0]);
+                 SIDOWNER, (struct smb_sid *)&buf->SidBuffer[0]);
        id_to_sid(from_kgid_munged(&init_user_ns, vfsgid_into_kgid(vfsgid)),
-                 SIDNFS_GROUP, (struct smb_sid *)&buf->SidBuffer[20]);
+                 SIDUNIX_GROUP, (struct smb_sid *)&buf->SidBuffer[28]);
 }
 
 /*