On Wed, Feb 10, 2010 at 01:21:04PM +0100, Jakub Hrozek wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 02/10/2010 11:55 AM, Sumit Bose wrote: > > This patch works on i686, too. Please remove the FIXME. The assignment > > was introduced in commit 2b4d76971e4ad803b42051fddb3add9fe2215dc2 with > > no special reason. > > > > bye, > > Sumit > > attached
ACK bye, Sumit > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (GNU/Linux) > Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ > > iEYEARECAAYFAktypK8ACgkQHsardTLnvCXEowCgweCFSuOOlfdpDlVDVu3YsAyt > 2ZAAn0OOAlRS4rOBpO4kRb1LeLDaJHjC > =3nt9 > -----END PGP SIGNATURE----- > From 80541ad346728f5df4fb21760fe4d0f7ca26fee5 Mon Sep 17 00:00:00 2001 > From: Jakub Hrozek <jhro...@redhat.com> > Date: Mon, 25 Jan 2010 23:59:03 +0100 > Subject: [PATCH] Fix other memory alignment issues > > Similar to George McCollister's patch to the pam code, this patch fixes > other places in the code where we forced data into 32-bit alignment. > > Fixes: #390 > --- > server/providers/krb5/krb5_auth.c | 32 +++++++++++++++------------ > server/providers/krb5/krb5_child.c | 31 ++++++++++++++------------ > server/providers/ldap/ldap_child.c | 13 +++++++---- > server/providers/ldap/sdap_child_helpers.c | 21 ++++++++++------- > 4 files changed, 55 insertions(+), 42 deletions(-) > > diff --git a/server/providers/krb5/krb5_auth.c > b/server/providers/krb5/krb5_auth.c > index c013ea8..fd0a063 100644 > --- a/server/providers/krb5/krb5_auth.c > +++ b/server/providers/krb5/krb5_auth.c > @@ -301,6 +301,7 @@ errno_t create_send_buffer(struct krb5child_req *kr, > struct io_buffer **io_buf) > size_t rp; > const char *keytab; > uint32_t validate; > + uint32_t c = 0; > > keytab = dp_opt_get_cstring(kr->krb5_ctx->opts, KRB5_KEYTAB); > if (keytab == NULL) { > @@ -331,47 +332,50 @@ errno_t create_send_buffer(struct krb5child_req *kr, > struct io_buffer **io_buf) > } > > rp = 0; > - ((uint32_t *)(&buf->data[rp]))[0] = kr->pd->cmd; > + memcpy(&buf->data[rp], &kr->pd->cmd, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - ((uint32_t *)(&buf->data[rp]))[0] = kr->pd->pw_uid; > + memcpy(&buf->data[rp], &kr->pd->pw_uid, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - ((uint32_t *)(&buf->data[rp]))[0] = kr->pd->gr_gid; > + memcpy(&buf->data[rp], &kr->pd->gr_gid, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - ((uint32_t *)(&buf->data[rp]))[0] = validate; > + memcpy(&buf->data[rp], &validate, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - ((uint32_t *)(&buf->data[rp]))[0] = kr->is_offline; > + memcpy(&buf->data[rp], &kr->is_offline, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - ((uint32_t *)(&buf->data[rp]))[0] = (uint32_t) strlen(kr->pd->upn); > + c = (uint32_t) strlen(kr->pd->upn); > + memcpy(&buf->data[rp], &c, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - memcpy(&buf->data[rp], kr->pd->upn, strlen(kr->pd->upn)); > - rp += strlen(kr->pd->upn); > + memcpy(&buf->data[rp], kr->pd->upn, c); > + rp += c; > > - ((uint32_t *)(&buf->data[rp]))[0] = (uint32_t) strlen(kr->ccname); > + c = (uint32_t) strlen(kr->ccname); > + memcpy(&buf->data[rp], &c, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - memcpy(&buf->data[rp], kr->ccname, strlen(kr->ccname)); > + memcpy(&buf->data[rp], kr->ccname, c); > rp += strlen(kr->ccname); > > - ((uint32_t *)(&buf->data[rp]))[0] = (uint32_t) strlen(keytab); > + c = (uint32_t) strlen(keytab); > + memcpy(&buf->data[rp], &c, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > - memcpy(&buf->data[rp], keytab, strlen(keytab)); > + memcpy(&buf->data[rp], keytab, c); > rp += strlen(keytab); > > - ((uint32_t *)(&buf->data[rp]))[0] = kr->pd->authtok_size; > + memcpy(&buf->data[rp], &kr->pd->authtok_size, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > memcpy(&buf->data[rp], kr->pd->authtok, kr->pd->authtok_size); > rp += kr->pd->authtok_size; > > if (kr->pd->cmd == SSS_PAM_CHAUTHTOK) { > - ((uint32_t *)(&buf->data[rp]))[0] = kr->pd->newauthtok_size; > + memcpy(&buf->data[rp], &kr->pd->newauthtok_size, sizeof(uint32_t)); > rp += sizeof(uint32_t); > > memcpy(&buf->data[rp], kr->pd->newauthtok, kr->pd->newauthtok_size); > diff --git a/server/providers/krb5/krb5_child.c > b/server/providers/krb5/krb5_child.c > index 08e16b4..f4de846 100644 > --- a/server/providers/krb5/krb5_child.c > +++ b/server/providers/krb5/krb5_child.c > @@ -260,6 +260,7 @@ static errno_t pack_response_packet(struct response > *resp, int status, int type, > { > int len; > int p=0; > + int32_t c; > > len = strlen(data)+1; > if ((3*sizeof(int32_t) + len +1) > resp->max_size) { > @@ -267,13 +268,16 @@ static errno_t pack_response_packet(struct response > *resp, int status, int type, > return ENOMEM; > } > > - ((int32_t *)(&resp->buf[p]))[0] = status; > + c = status; > + memcpy(&resp->buf[p], &c, sizeof(int32_t)); > p += sizeof(int32_t); > > - ((int32_t *)(&resp->buf[p]))[0] = type; > + c = type; > + memcpy(&resp->buf[p], &c, sizeof(int32_t)); > p += sizeof(int32_t); > > - ((int32_t *)(&resp->buf[p]))[0] = len; > + c = len; > + memcpy(&resp->buf[p], &c, sizeof(int32_t)); > p += sizeof(int32_t); > > memcpy(&resp->buf[p], data, len); > @@ -694,28 +698,27 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > struct pam_data *pd, > uint32_t len; > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - pd->cmd = *((uint32_t *)(buf + p)); > + memcpy(&pd->cmd, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - pd->pw_uid = *((uint32_t *)(buf + p)); > + memcpy(&pd->pw_uid, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - pd->gr_gid = *((uint32_t *)(buf + p)); > + memcpy(&pd->gr_gid, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - *validate = *((uint32_t *)(buf + p)); > + memcpy(validate, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > - *offline = len; > + memcpy(offline, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len ) > size) return EINVAL; > @@ -724,7 +727,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > struct pam_data *pd, > p += len; > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len ) > size) return EINVAL; > @@ -733,7 +736,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > struct pam_data *pd, > p += len; > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len ) > size) return EINVAL; > @@ -742,7 +745,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > struct pam_data *pd, > p += len; > > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len) > size) return EINVAL; > @@ -753,7 +756,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > struct pam_data *pd, > > if (pd->cmd == SSS_PAM_CHAUTHTOK) { > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len) > size) return EINVAL; > diff --git a/server/providers/ldap/ldap_child.c > b/server/providers/ldap/ldap_child.c > index a17bcad..448a9cc 100644 > --- a/server/providers/ldap/ldap_child.c > +++ b/server/providers/ldap/ldap_child.c > @@ -54,7 +54,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > DEBUG(1, ("Error: buffer too big!\n")); > return EINVAL; > } > - len = ((uint32_t *)(buf + p))[0]; > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > DEBUG(7, ("realm_str size: %d\n", len)); > @@ -68,7 +68,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > > /* princ_str size and length */ > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = ((uint32_t *)(buf + p))[0]; > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > DEBUG(7, ("princ_str size: %d\n", len)); > @@ -82,7 +82,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, > > /* keytab_name size and length */ > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = ((uint32_t *)(buf + p))[0]; > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > DEBUG(7, ("keytab_name size: %d\n", len)); > @@ -101,16 +101,19 @@ static int pack_buffer(struct response *r, int result, > const char *msg) > { > int len; > int p = 0; > + uint32_t c; > > len = strlen(msg); > r->size = 2 * sizeof(uint32_t) + len; > > /* result */ > - ((uint32_t *)(&r->buf[p]))[0] = result; > + c = result; > + memcpy(&r->buf[p], &c, sizeof(uint32_t)); > p += sizeof(uint32_t); > > /* message size */ > - ((uint32_t *)(&r->buf[p]))[0] = len; > + c = len; > + memcpy(&r->buf[p], &c, sizeof(uint32_t)); > p += sizeof(uint32_t); > > /* message itself */ > diff --git a/server/providers/ldap/sdap_child_helpers.c > b/server/providers/ldap/sdap_child_helpers.c > index 862dacf..7f743d7 100644 > --- a/server/providers/ldap/sdap_child_helpers.c > +++ b/server/providers/ldap/sdap_child_helpers.c > @@ -168,36 +168,39 @@ static errno_t create_tgt_req_send_buffer(TALLOC_CTX > *mem_ctx, > /* realm */ > if (realm_str) { > len = strlen(realm_str); > - ((uint32_t *)(&buf->data[rp]))[0] = len; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > memcpy(&buf->data[rp], realm_str, len); > rp += len; > } else { > - ((uint32_t *)(&buf->data[rp]))[0] = 0; > + len = 0; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > } > > /* principal */ > if (princ_str) { > len = strlen(princ_str); > - ((uint32_t *)(&buf->data[rp]))[0] = len; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > memcpy(&buf->data[rp], princ_str, len); > rp += len; > } else { > - ((uint32_t *)(&buf->data[rp]))[0] = 0; > + len = 0; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > } > > /* keytab */ > if (keytab_name) { > len = strlen(keytab_name); > - ((uint32_t *)(&buf->data[rp]))[0] = len; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > memcpy(&buf->data[rp], keytab_name, len); > rp += len; > } else { > - ((uint32_t *)(&buf->data[rp]))[0] = 0; > + len = 0; > + memcpy(&buf->data[rp], &len, sizeof(uint32_t)); > rp += sizeof(uint32_t); > } > > @@ -214,14 +217,14 @@ static int parse_child_response(TALLOC_CTX *mem_ctx, > uint32_t res; > char *ccn; > > - /* operatoin result code */ > + /* operation result code */ > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - res = *((uint32_t *)(buf + p)); > + memcpy(&res, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > /* ccache name size */ > if ((p + sizeof(uint32_t)) > size) return EINVAL; > - len = *((uint32_t *)(buf + p)); > + memcpy(&len, buf + p, sizeof(uint32_t)); > p += sizeof(uint32_t); > > if ((p + len ) > size) return EINVAL; > -- > 1.6.6 > > _______________________________________________ > sssd-devel mailing list > sssd-devel@lists.fedorahosted.org > https://fedorahosted.org/mailman/listinfo/sssd-devel _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/sssd-devel