[SSSD] [PATCH] Suppress safealign warnings with DISCARD_ALIGN.

Michal Židek mzidek at redhat.com
Mon Jun 30 14:36:15 UTC 2014


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 <mzidek at redhat.com>
>> 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 <mzidek at redhat.com>
>> 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-type-parameter-to-DISCARD_ALIGN-macro.patch
Type: text/x-patch
Size: 1409 bytes
Desc: not available
URL: <https://lists.fedorahosted.org/pipermail/sssd-devel/attachments/20140630/c87eacef/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Suppress-safealign-warnings-with-DISCARD_ALIGN.patch
Type: text/x-patch
Size: 3001 bytes
Desc: not available
URL: <https://lists.fedorahosted.org/pipermail/sssd-devel/attachments/20140630/c87eacef/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Use-DISCARD_ALIGN-in-VTABLE_FUNC-macro.patch
Type: text/x-patch
Size: 814 bytes
Desc: not available
URL: <https://lists.fedorahosted.org/pipermail/sssd-devel/attachments/20140630/c87eacef/attachment-0002.bin>


More information about the sssd-devel mailing list