]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
freebsd ktls: avoid unaligned 16 bit length store in ktls_read_record
authorJoshua Rogers <MegaManSec@users.noreply.github.com>
Sat, 11 Oct 2025 06:11:07 +0000 (14:11 +0800)
committerTomas Mraz <tomas@openssl.org>
Fri, 17 Oct 2025 17:25:45 +0000 (19:25 +0200)
This prevents SIGBUS on strict alignment architectures when p+3 is not aligned
for 16 bit access. Behavior is unchanged on x86 and matches the Linux path.

Signed-off-by: Joshua Rogers <MegaManSec@users.noreply.github.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/28860)

(cherry picked from commit c33120d0e403b4079e5104fd20040a51930e8d8e)

include/internal/ktls.h

index 368ff10e4fa804cd88fe4566967cb0fbd2cdd02d..a9075a20f8b831f788929b4283cec58e4ca1c555 100644 (file)
@@ -185,7 +185,8 @@ static ossl_inline int ktls_read_record(int fd, void *data, size_t length)
     p[0] = tgr->tls_type;
     p[1] = tgr->tls_vmajor;
     p[2] = tgr->tls_vminor;
-    *(uint16_t *)(p + 3) = htons(ret);
+    p[3] = (ret >> 8) & 0xff;
+    p[4] = ret & 0xff;
 
     return ret + prepend_length;
 }