[SSSD] [PATCH] Suppress safealign warnings with DISCARD_ALIGN.
Lukas Slebodnik
lslebodn at redhat.com
Thu Feb 13 12:35:04 UTC 2014
On (13/02/14 12:06), Michal Židek wrote:
>This is the last patch related to ticket
>
>https://fedorahosted.org/sssd/ticket/1359
>
>The warnings here are currently all false positives (refcount) or
>the alignment is calculated during runtime with PADDING_SIZE macro
>so this patch is just about silencing the compiler.
>
>The patch is attached.
>
>Michal
>From 7b57e5039038661e79e918bc253dc15f91fb78ea Mon Sep 17 00:00:00 2001
>From: Michal Zidek <mzidek at redhat.com>
>Date: Thu, 13 Feb 2014 11:18:14 +0100
>Subject: [PATCH] Suppress safealign warnings with DISCARD_ALIGN.
>
>These warnings were all false positives (or the alignment is
>calculated during runtime).
>
>fixes: https://fedorahosted.org/sssd/ticket/1359
>---
> src/sss_client/nss_group.c | 2 +-
> src/sss_client/nss_services.c | 2 +-
> src/util/refcount.c | 8 ++++++--
> 3 files changed, 8 insertions(+), 4 deletions(-)
>
>diff --git a/src/sss_client/nss_group.c b/src/sss_client/nss_group.c
>index 9e25931..35838de 100644
>--- a/src/sss_client/nss_group.c
>+++ b/src/sss_client/nss_group.c
>@@ -237,7 +237,7 @@ static int sss_nss_getgr_readrep(struct sss_nss_gr_rep *pr,
> pad = PADDING_SIZE(i, char *);
>
> /* now members */
>- pr->result->gr_mem = (char **)&(pr->buffer[i+pad]);
>+ pr->result->gr_mem = (char **) DISCARD_ALIGN(&(pr->buffer[i+pad]));
>
> ptmem = (sizeof(char *) * (mem_num + 1)) + pad;
> if (ptmem > dlen) {
>diff --git a/src/sss_client/nss_services.c b/src/sss_client/nss_services.c
>index e89e0d2..902e14c 100644
>--- a/src/sss_client/nss_services.c
>+++ b/src/sss_client/nss_services.c
>@@ -131,7 +131,7 @@ sss_nss_getsvc_readrep(struct sss_nss_svc_rep *sr,
> pad = PADDING_SIZE(i, char *);
>
> /* Copy in the aliases */
>- sr->result->s_aliases = (char **) &(sr->buffer[i+pad]);
>+ sr->result->s_aliases = (char **) DISCARD_ALIGN(&(sr->buffer[i+pad]));
>
> ptaliases = (sizeof(char *) * (num_aliases + 1)) + pad;
> if (ptaliases > dlen) {
>diff --git a/src/util/refcount.c b/src/util/refcount.c
>index 735170d..5c454e7 100644
>--- a/src/util/refcount.c
>+++ b/src/util/refcount.c
>@@ -48,6 +48,7 @@ _rc_alloc(const void *context, size_t size, size_t refcount_offset,
> const char *type_name)
> {
> struct wrapper *wrapper;
>+ char *refcount_pos;
>
> wrapper = talloc(context, struct wrapper);
> if (wrapper == NULL) {
>@@ -60,7 +61,8 @@ _rc_alloc(const void *context, size_t size, size_t refcount_offset,
> return NULL;
> };
>
>- wrapper->refcount = (int *)((char *)wrapper->ptr + refcount_offset);
>+ refcount_pos = (char *)wrapper->ptr + refcount_offset;
>+ wrapper->refcount = (int *) DISCARD_ALIGN(refcount_pos);
> *wrapper->refcount = 1;
>
> talloc_set_destructor(wrapper, refcount_destructor);
>@@ -72,6 +74,7 @@ void *
> _rc_reference(const void *context, size_t refcount_offset, void *source)
> {
> struct wrapper *wrapper;
>+ char *refcount_pos;
>
> wrapper = talloc(context, struct wrapper);
> if (wrapper == NULL) {
>@@ -79,7 +82,8 @@ _rc_reference(const void *context, size_t refcount_offset, void *source)
> }
>
> wrapper->ptr = source;
>- wrapper->refcount = (int *)((char *)wrapper->ptr + refcount_offset);
>+ refcount_pos = (char *)wrapper->ptr + refcount_offset;
>+ wrapper->refcount = (int *) DISCARD_ALIGN(refcount_pos);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It looks like macro DISCARD_ALIGN can be extended to in similar way like a
talloc_zero(const void *ptr, #type);
LS
More information about the sssd-devel
mailing list