OSDN Git Service

ksmbd: change LeaseKey data type to u8 array
authorNamjae Jeon <linkinjeon@kernel.org>
Thu, 9 Sep 2021 03:28:18 +0000 (12:28 +0900)
committerSteve French <stfrench@microsoft.com>
Fri, 12 Nov 2021 01:22:58 +0000 (19:22 -0600)
cifs define LeaseKey as u8 array in structure. To move lease structure
to smbfs_common, ksmbd change LeaseKey data type to u8 array.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/ksmbd/oplock.c
fs/ksmbd/oplock.h
fs/ksmbd/smb2pdu.h

index ce0e855..077b876 100644 (file)
@@ -1335,19 +1335,16 @@ __u8 smb2_map_lease_to_oplock(__le32 lease_state)
  */
 void create_lease_buf(u8 *rbuf, struct lease *lease)
 {
-       char *LeaseKey = (char *)&lease->lease_key;
-
        if (lease->version == 2) {
                struct create_lease_v2 *buf = (struct create_lease_v2 *)rbuf;
-               char *ParentLeaseKey = (char *)&lease->parent_lease_key;
 
                memset(buf, 0, sizeof(struct create_lease_v2));
-               buf->lcontext.LeaseKeyLow = *((__le64 *)LeaseKey);
-               buf->lcontext.LeaseKeyHigh = *((__le64 *)(LeaseKey + 8));
+               memcpy(buf->lcontext.LeaseKey, lease->lease_key,
+                      SMB2_LEASE_KEY_SIZE);
                buf->lcontext.LeaseFlags = lease->flags;
                buf->lcontext.LeaseState = lease->state;
-               buf->lcontext.ParentLeaseKeyLow = *((__le64 *)ParentLeaseKey);
-               buf->lcontext.ParentLeaseKeyHigh = *((__le64 *)(ParentLeaseKey + 8));
+               memcpy(buf->lcontext.ParentLeaseKey, lease->parent_lease_key,
+                      SMB2_LEASE_KEY_SIZE);
                buf->ccontext.DataOffset = cpu_to_le16(offsetof
                                (struct create_lease_v2, lcontext));
                buf->ccontext.DataLength = cpu_to_le32(sizeof(struct lease_context_v2));
@@ -1362,8 +1359,7 @@ void create_lease_buf(u8 *rbuf, struct lease *lease)
                struct create_lease *buf = (struct create_lease *)rbuf;
 
                memset(buf, 0, sizeof(struct create_lease));
-               buf->lcontext.LeaseKeyLow = *((__le64 *)LeaseKey);
-               buf->lcontext.LeaseKeyHigh = *((__le64 *)(LeaseKey + 8));
+               memcpy(buf->lcontext.LeaseKey, lease->lease_key, SMB2_LEASE_KEY_SIZE);
                buf->lcontext.LeaseFlags = lease->flags;
                buf->lcontext.LeaseState = lease->state;
                buf->ccontext.DataOffset = cpu_to_le16(offsetof
@@ -1416,19 +1412,17 @@ struct lease_ctx_info *parse_lease_state(void *open_req)
                if (sizeof(struct lease_context_v2) == le32_to_cpu(cc->DataLength)) {
                        struct create_lease_v2 *lc = (struct create_lease_v2 *)cc;
 
-                       *((__le64 *)lreq->lease_key) = lc->lcontext.LeaseKeyLow;
-                       *((__le64 *)(lreq->lease_key + 8)) = lc->lcontext.LeaseKeyHigh;
+                       memcpy(lreq->lease_key, lc->lcontext.LeaseKey, SMB2_LEASE_KEY_SIZE);
                        lreq->req_state = lc->lcontext.LeaseState;
                        lreq->flags = lc->lcontext.LeaseFlags;
                        lreq->duration = lc->lcontext.LeaseDuration;
-                       *((__le64 *)lreq->parent_lease_key) = lc->lcontext.ParentLeaseKeyLow;
-                       *((__le64 *)(lreq->parent_lease_key + 8)) = lc->lcontext.ParentLeaseKeyHigh;
+                       memcpy(lreq->parent_lease_key, lc->lcontext.ParentLeaseKey,
+                              SMB2_LEASE_KEY_SIZE);
                        lreq->version = 2;
                } else {
                        struct create_lease *lc = (struct create_lease *)cc;
 
-                       *((__le64 *)lreq->lease_key) = lc->lcontext.LeaseKeyLow;
-                       *((__le64 *)(lreq->lease_key + 8)) = lc->lcontext.LeaseKeyHigh;
+                       memcpy(lreq->lease_key, lc->lcontext.LeaseKey, SMB2_LEASE_KEY_SIZE);
                        lreq->req_state = lc->lcontext.LeaseState;
                        lreq->flags = lc->lcontext.LeaseFlags;
                        lreq->duration = lc->lcontext.LeaseDuration;
index 119b804..0cf7a2b 100644 (file)
@@ -28,8 +28,6 @@
 #define OPLOCK_WRITE_TO_NONE           0x04
 #define OPLOCK_READ_TO_NONE            0x08
 
-#define SMB2_LEASE_KEY_SIZE            16
-
 struct lease_ctx_info {
        __u8                    lease_key[SMB2_LEASE_KEY_SIZE];
        __le32                  req_state;
index f418b00..829f445 100644 (file)
@@ -733,22 +733,21 @@ struct create_posix_rsp {
 
 #define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS_LE   cpu_to_le32(0x02)
 
+#define SMB2_LEASE_KEY_SIZE                    16
+
 struct lease_context {
-       __le64 LeaseKeyLow;
-       __le64 LeaseKeyHigh;
+       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
        __le32 LeaseState;
        __le32 LeaseFlags;
        __le64 LeaseDuration;
 } __packed;
 
 struct lease_context_v2 {
-       __le64 LeaseKeyLow;
-       __le64 LeaseKeyHigh;
+       __u8 LeaseKey[SMB2_LEASE_KEY_SIZE];
        __le32 LeaseState;
        __le32 LeaseFlags;
        __le64 LeaseDuration;
-       __le64 ParentLeaseKeyLow;
-       __le64 ParentLeaseKeyHigh;
+       __u8 ParentLeaseKey[SMB2_LEASE_KEY_SIZE];
        __le16 Epoch;
        __le16 Reserved;
 } __packed;