Skip to content

Commit

Permalink
odp-util: Fix alignment when scanning Geneve attributes.
Browse files Browse the repository at this point in the history
Clang complains about the fact that we use a byte array to scan
Geneve attributes into since there are different alignment requirements:

lib/odp-util.c:2936:30: error: cast from 'uint8_t *' (aka 'unsigned char *') to

      'struct geneve_opt *' increases required alignment from 1 to 2

      [-Werror,-Wcast-align]

    struct geneve_opt *opt = (struct geneve_opt *)key->d;

                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~

We can instead treat this as an array of Geneve option headers to
ensure we get the right alignment and then there are no need for
casts.

Reported-by: Joe Stringer <[email protected]>
Signed-off-by: Jesse Gross <[email protected]>
Acked-by: Joe Stringer <[email protected]>
  • Loading branch information
jessegross committed May 29, 2015
1 parent 622a0a8 commit c05c01c
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lib/odp-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -2925,16 +2925,16 @@ scan_vxlan_gbp(const char *s, uint32_t *key, uint32_t *mask)
}

struct geneve_scan {
uint8_t d[252];
struct geneve_opt d[63];
int len;
};

static int
scan_geneve(const char *s, struct geneve_scan *key, struct geneve_scan *mask)
{
const char *s_base = s;
struct geneve_opt *opt = (struct geneve_opt *)key->d;
struct geneve_opt *opt_mask = (struct geneve_opt *)(mask ? mask->d : NULL);
struct geneve_opt *opt = key->d;
struct geneve_opt *opt_mask = mask ? mask->d : NULL;
int len_remain = sizeof key->d;

while (s[0] == '{' && len_remain >= sizeof *opt) {
Expand Down

0 comments on commit c05c01c

Please sign in to comment.