Have you tried changing
struct sockaddr *ifa_addr;
with
struct sockaddr *ifa_addr __attribute__((aligned(2)));
in your declaration of struct ifaddrs?
That attribute lets you force an arbitrary alignment for a variable.
Cheers,
Luca