HomeFreeBSD

swab: Correctly treat the data as misaligned

Description

swab: Correctly treat the data as misaligned

The __aligned attribute in the previous version applied to the location
of the pointers, not the data the pointers pointed to. While this
could be fixed by applying the attribute to a local typedef of uint16_t,
just using memcpy() for the unaligned access is simpler and ISO C.

This fixes the build on CHERI architectures which do not support
misaligned pointers and were thus failing with:

lib/libc/string/swab.c:12:18: error: alignment (1) of 'const uint16_t *' (aka 'const unsigned short *') is less than the required capability alignment (16) [-Werror,-Wcheri-capability-misuse]

12 |         const uint16_t *f __aligned(1) = from;
   |

Co-authored by: Jessica Clarke <jrtc27@FreeBSD.org>
Fixes: 02ebbc781f08 ("swab: Fix implementation to support overlapping copies")
Sponsored by: AFRL, DARPA

Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D54399

(cherry picked from commit 2a5c5b8f7cddf14537707895fceb454cabc1b3bd)

Details

Provenance
jhbAuthored on Jan 14 2026, 5:10 PM
Reviewer
markj
Differential Revision
D54399: swab: Correctly treat the data as misaligned
Parents
rG852edd195aee: csu: Remove unused constant
Branches
Unknown
Tags
Unknown