summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Layton <jlayton@samba.org>2012-12-04 06:21:06 -0500
committerJeff Layton <jlayton@samba.org>2012-12-04 06:52:04 -0500
commitbacbbf7c0994bdeaf49234abd07d840673d37e95 (patch)
treea194ea91c96beee2dba27b332592a86ddf782967
parentc1fd5753a3f996203e4b39158e360f4b799a3254 (diff)
downloadcifs-utils-bacbbf7c0994bdeaf49234abd07d840673d37e95.tar.gz
cifs-utils-bacbbf7c0994bdeaf49234abd07d840673d37e95.tar.bz2
cifs-utils-bacbbf7c0994bdeaf49234abd07d840673d37e95.zip
getcifsacl: ensure that we don't overrun the wbcDomainSid when converting
If we get a SID that contains more than 15 subauthorities, we'll end up overrunning the struct wbcDomainSid. Just ignore any past 15. Signed-off-by: Jeff Layton <jlayton@samba.org>
-rw-r--r--getcifsacl.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/getcifsacl.c b/getcifsacl.c
index 256b2ad..3f94a99 100644
--- a/getcifsacl.c
+++ b/getcifsacl.c
@@ -180,12 +180,14 @@ static void
csid_to_wsid(struct wbcDomainSid *wsid, const struct cifs_sid *csid)
{
int i;
+ uint8_t num_subauth = (csid->num_subauth <= WBC_MAXSUBAUTHS) ?
+ csid->num_subauth : WBC_MAXSUBAUTHS;
wsid->sid_rev_num = csid->revision;
- wsid->num_auths = csid->num_subauth;
+ wsid->num_auths = num_subauth;
for (i = 0; i < NUM_AUTHS; i++)
wsid->id_auth[i] = csid->authority[i];
- for (i = 0; i < csid->num_subauth; i++)
+ for (i = 0; i < num_subauth; i++)
wsid->sub_auths[i] = le32toh(csid->sub_auth[i]);
}