On 06/30/2014 03:33 PM, Lukas Slebodnik wrote:
On (30/06/14 15:18), Michal Židek wrote:
On 02/13/2014 03:26 PM, Michal Židek wrote:
     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

Makes sense. Patch 2 adds this parameter.

Michal


Rebased and added one patch for VTABLE_FUNC macro.

Michal


From e50c4a89a328a20118b86bea310b26aa83f7856a Mon Sep 17 00:00:00 2001
From: Michal Zidek <[email protected]>
Date: Thu, 13 Feb 2014 11:18:14 +0100
Subject: [PATCH 1/3] 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);
     (*wrapper->refcount)++;

     talloc_set_destructor(wrapper, refcount_destructor);
--
1.7.11.2


From ee49d174b745719cc5a1848b0296af7c87d57894 Mon Sep 17 00:00:00 2001
From: Michal Zidek <[email protected]>
Date: Thu, 13 Feb 2014 14:50:57 +0100
Subject: [PATCH 2/3] Add type parameter to DISCARD_ALIGN

---
src/sss_client/nss_group.c    | 2 +-
src/sss_client/nss_mc_group.c | 2 +-
src/sss_client/nss_services.c | 2 +-
src/util/refcount.c           | 4 ++--
src/util/util_safealign.h     | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/sss_client/nss_group.c b/src/sss_client/nss_group.c
index 35838de..1614c33 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 **) DISCARD_ALIGN(&(pr->buffer[i+pad]));
+    pr->result->gr_mem = DISCARD_ALIGN(&(pr->buffer[i+pad]), char **);

     ptmem = (sizeof(char *) * (mem_num + 1)) + pad;
     if (ptmem > dlen) {
diff --git a/src/sss_client/nss_mc_group.c b/src/sss_client/nss_mc_group.c
index fb5e43f..5af5546 100644
--- a/src/sss_client/nss_mc_group.c
+++ b/src/sss_client/nss_mc_group.c
@@ -72,7 +72,7 @@ static errno_t sss_nss_mc_parse_result(struct sss_mc_rec *rec,
         return EFAULT;
     }

-    result->gr_mem = (char **)DISCARD_ALIGN(buffer);
+    result->gr_mem = DISCARD_ALIGN(buffer, char **);
     result->gr_mem[data->members] = NULL;
You changed the same lines in two different patches.
patches would be simpler with different order of changes.

1st change DISCARD_ALIGN macro
   -#define DISCARD_ALIGN(ptr) ((void *)(ptr))
   +#define DISCARD_ALIGN(ptr, type) ((type)(void *)(ptr))

2nd use macro DISCARD_ALIGN where appropriate.

LS

Ok. Now it is in more sane order.

Michal


>From 2bdd2259c0a8bd858efc42e38bdf5159d06b0fb2 Mon Sep 17 00:00:00 2001
From: Michal Zidek <[email protected]>
Date: Mon, 30 Jun 2014 15:48:49 +0200
Subject: [PATCH 1/3] Add type parameter to DISCARD_ALIGN macro

This macro will be used to suppress alignment
warnings when casting pointers.

fixes: https://fedorahosted.org/sssd/ticket/1359
---
 src/sss_client/nss_mc_group.c | 2 +-
 src/util/util_safealign.h     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/sss_client/nss_mc_group.c b/src/sss_client/nss_mc_group.c
index fb5e43f..5af5546 100644
--- a/src/sss_client/nss_mc_group.c
+++ b/src/sss_client/nss_mc_group.c
@@ -72,7 +72,7 @@ static errno_t sss_nss_mc_parse_result(struct sss_mc_rec *rec,
         return EFAULT;
     }
 
-    result->gr_mem = (char **)DISCARD_ALIGN(buffer);
+    result->gr_mem = DISCARD_ALIGN(buffer, char **);
     result->gr_mem[data->members] = NULL;
 
     cookie = NULL;
diff --git a/src/util/util_safealign.h b/src/util/util_safealign.h
index 685d659..ba216f6 100644
--- a/src/util/util_safealign.h
+++ b/src/util/util_safealign.h
@@ -34,7 +34,7 @@
 
 /* Use this macro to suppress alignment warnings (use it
  * only to suppress false-positives) */
-#define DISCARD_ALIGN(ptr) ((void *)(ptr))
+#define DISCARD_ALIGN(ptr, type) ((type)(void *)(ptr))
 
 #define IS_ALIGNED(ptr, type) \
     ((uintptr_t)(ptr) % sizeof(type) == 0)
-- 
1.7.11.2

>From c35d291d77b231a8affc02c51c8b11f198c2faab Mon Sep 17 00:00:00 2001
From: Michal Zidek <[email protected]>
Date: Mon, 30 Jun 2014 15:52:43 +0200
Subject: [PATCH 2/3] Suppress safealign warnings with DISCARD_ALIGN.

These warnings were all false positives.

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..1614c33 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 = DISCARD_ALIGN(&(pr->buffer[i+pad]), char **);
 
     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..64e0b43 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 = DISCARD_ALIGN(&(sr->buffer[i+pad]), char **);
 
     ptaliases = (sizeof(char *) * (num_aliases + 1)) + pad;
     if (ptaliases > dlen) {
diff --git a/src/util/refcount.c b/src/util/refcount.c
index 735170d..69873d3 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 = DISCARD_ALIGN(refcount_pos, int *);
     *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 = DISCARD_ALIGN(refcount_pos, int *);
     (*wrapper->refcount)++;
 
     talloc_set_destructor(wrapper, refcount_destructor);
-- 
1.7.11.2

>From c5e547019dbbdcd9c682bca709864305301902cc Mon Sep 17 00:00:00 2001
From: Michal Zidek <[email protected]>
Date: Mon, 30 Jun 2014 15:54:34 +0200
Subject: [PATCH 3/3] Use DISCARD_ALIGN in VTABLE_FUNC macro

fixes: https://fedorahosted.org/sssd/ticket/1359
---
 src/sbus/sssd_dbus_meta.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/sbus/sssd_dbus_meta.h b/src/sbus/sssd_dbus_meta.h
index 2cb9e95..e7de9df 100644
--- a/src/sbus/sssd_dbus_meta.h
+++ b/src/sbus/sssd_dbus_meta.h
@@ -35,7 +35,7 @@
 
 /* Looks up a vtable func, in a struct derived from struct sbus_vtable */
 #define VTABLE_FUNC(vtable, offset) \
-    (*((void **)((char *)(vtable) + (offset))))
+    (*(DISCARD_ALIGN((char *)(vtable) + (offset), void **)))
 
 struct sbus_arg_meta {
     const char *name;
-- 
1.7.11.2

_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to