*freeptr = NULL;
- /* Ensure that alignment is a power of two */
- if (alignment == 0 || (alignment & (alignment - 1)) != 0) {
+ /* Ensure that alignment is a power of two no larger than 65536 */
+ if (alignment == 0 || (alignment & (alignment - 1)) != 0
+ || alignment > 65536) {
ossl_report_alloc_err_inv(file, line);
return NULL;
}
{
*freeptr = NULL;
- /* Ensure that alignment is a power of two */
- if (alignment == 0 || (alignment & (alignment - 1)) != 0) {
+ /* Ensure that alignment is a power of two no larger than 65536 */
+ if (alignment == 0 || (alignment & (alignment - 1)) != 0
+ || alignment > 65536) {
ossl_report_alloc_err_inv(file, line);
return NULL;
}
OPENSSL_aligned_alloc() operates just as OPENSSL_malloc() does, but it
allows for the caller to specify an alignment value, for instances in
which the default alignment of malloc is insufficient for the caller's
-needs. Note, the alignment value must be a power of 2.
+needs. Note, the alignment value must be a power of 2 no larger than 65536.
NOTE: the call to OPENSSL_aligned_alloc() accepts a 3rd argument, I<freeptr>
which must point to a void pointer. On some platforms, there is no available
library call to obtain memory allocations with alignment greater than what
the caller may need to fall back to a non-aligned memory allocation
(and open-code the alignment routine if the alignment is a requirement).
+Before OpenSSL 4.0, the call to OPENSSL_aligned_alloc() did not have
+an explicit upper limit on the value of I<alignment>.
+
=head1 COPYRIGHT
Copyright 2016-2025 The OpenSSL Project Authors. All Rights Reserved.
{ 8, 8, 63, EXP_INVAL, EXP_INVAL },
{ 8, 8, 64, EXP_NONNULL, EXP_NONNULL },
+ { 3, 4, 65536, EXP_NONNULL, EXP_NONNULL },
+ { 8, 8, 131072, EXP_INVAL, EXP_INVAL },
{ SIZE_MAX / 8 + 9, 8, 64, EXP_NONNULL, EXP_INT_OF },
/*