[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