aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/cifs/cifsacl.c10
-rw-r--r--fs/cifs/cifsacl.h3
2 files changed, 11 insertions, 2 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
index 5a312eb45a92..141a944c9dfd 100644
--- a/fs/cifs/cifsacl.c
+++ b/fs/cifs/cifsacl.c
@@ -277,8 +277,14 @@ compare_sids(const struct cifs_sid *ctsid, const struct cifs_sid *cwsid)
277static void 277static void
278cifs_copy_sid(struct cifs_sid *dst, const struct cifs_sid *src) 278cifs_copy_sid(struct cifs_sid *dst, const struct cifs_sid *src)
279{ 279{
280 memcpy(dst, src, sizeof(*dst)); 280 int i;
281
282 dst->revision = src->revision;
281 dst->num_subauth = min_t(u8, src->num_subauth, NUM_SUBAUTHS); 283 dst->num_subauth = min_t(u8, src->num_subauth, NUM_SUBAUTHS);
284 for (i = 0; i < NUM_AUTHS; ++i)
285 dst->authority[i] = src->authority[i];
286 for (i = 0; i < dst->num_subauth; ++i)
287 dst->sub_auth[i] = src->sub_auth[i];
282} 288}
283 289
284static void 290static void
@@ -427,7 +433,7 @@ id_to_sid(unsigned long cid, uint sidtype, struct cifs_sid *ssid)
427 if (IS_ERR(sidkey)) { 433 if (IS_ERR(sidkey)) {
428 rc = -EINVAL; 434 rc = -EINVAL;
429 cFYI(1, "%s: Can't map and id to a SID", __func__); 435 cFYI(1, "%s: Can't map and id to a SID", __func__);
430 } else if (sidkey->datalen < sizeof(struct cifs_sid)) { 436 } else if (sidkey->datalen < CIFS_SID_BASE_SIZE) {
431 rc = -EIO; 437 rc = -EIO;
432 cFYI(1, "%s: Downcall contained malformed key " 438 cFYI(1, "%s: Downcall contained malformed key "
433 "(datalen=%hu)", __func__, sidkey->datalen); 439 "(datalen=%hu)", __func__, sidkey->datalen);
diff --git a/fs/cifs/cifsacl.h b/fs/cifs/cifsacl.h
index 18c7521273a7..7e52f19f996f 100644
--- a/fs/cifs/cifsacl.h
+++ b/fs/cifs/cifsacl.h
@@ -64,6 +64,9 @@ struct cifs_sid {
64 __le32 sub_auth[NUM_SUBAUTHS]; /* sub_auth[num_subauth] */ 64 __le32 sub_auth[NUM_SUBAUTHS]; /* sub_auth[num_subauth] */
65} __attribute__((packed)); 65} __attribute__((packed));
66 66
67/* size of a struct cifs_sid, sans sub_auth array */
68#define CIFS_SID_BASE_SIZE (1 + 1 + NUM_AUTHS)
69
67struct cifs_acl { 70struct cifs_acl {
68 __le16 revision; /* revision level */ 71 __le16 revision; /* revision level */
69 __le16 size; 72 __le16 size;