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
_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to