nodejs: upgrade 22.22.2 -> 22.22.3

With this upgrade, nodejs updated the llhttp dependency to version 9.3.1
So some of the patches are nolonger necessary.

Changelog: https://github.com/nodejs/node/releases/tag/v22.22.3

Signed-off-by: Jason Schonberg <schonm@gmail.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
Jason Schonberg
2026-05-13 19:29:20 -04:00
committed by Khem Raj
parent 9be9388574
commit ea56a5e3ae
4 changed files with 1 additions and 174 deletions
@@ -1,51 +0,0 @@
From 41ec2d5302b77be27ca972102c29ce12471ed4b0 Mon Sep 17 00:00:00 2001
From: Gyorgy Sarvari <skandigraun@gmail.com>
Date: Thu, 12 Feb 2026 11:09:44 +0100
Subject: [PATCH 2/2] detect aarch64 Neon correctly
The llhttp vendored dependency of nodejs takes advantage of Arm NEON
instructions when they are available, however they are detected by
checking for an outdated CPU feature macro: it checks for __ARM_NEON__,
however it is not defined by new compilers for aarch64, rather they
set __ARM_NEON. The Arm C extension guide[1] refers to __ARM_NEON macro
aswell.
This patch changes the detection to check for both macros when detecting
the availability of NEON instructions.
The code this patch modifies is generated, so the patch itself isn't
suitable for upstream submission, as the root cause of the error is
in the generator itself. A PR has been submitted[2] to the generator
project to rectify this issue.
[1]: https://developer.arm.com/documentation/ihi0053/d/ - pdf, section 6.9
[2]: https://github.com/nodejs/llparse/pull/84
Upstream-Status: Inappropriate [see above]
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
---
deps/llhttp/src/llhttp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
index a0e59e50..b069bbbb 100644
--- a/deps/llhttp/src/llhttp.c
+++ b/deps/llhttp/src/llhttp.c
@@ -10,7 +10,7 @@
#endif /* _MSC_VER */
#endif /* __SSE4_2__ */
-#ifdef __ARM_NEON__
+#if defined(__ARM_NEON__) || defined(__ARM_NEON)
#include <arm_neon.h>
#endif /* __ARM_NEON__ */
@@ -2625,7 +2625,7 @@ static llparse_state_t llhttp__internal__run(
goto s_n_llhttp__internal__n_header_value_otherwise;
}
#endif /* __SSE4_2__ */
- #ifdef __ARM_NEON__
+ #if defined(__ARM_NEON__) || defined(__ARM_NEON)
while (endp - p >= 16) {
uint8x16_t input;
uint8x16_t single;
@@ -1,59 +0,0 @@
From 3f4283dac7d88a89b42f1f2966a862cee5afe486 Mon Sep 17 00:00:00 2001
From: Gyorgy Sarvari <skandigraun@gmail.com>
Date: Thu, 12 Feb 2026 11:03:53 +0100
Subject: [PATCH 1/2] fix arm Neon intrinsics types
The current code calls these intrinsics with incorrect datatypes
(it uses a vector of uint16 instead of uint8), causing compilation
to fail with the following error:
| ../deps/llhttp/src/llhttp.c: In function 'llhttp__internal__run':
| ../deps/llhttp/src/llhttp.c:2645:9: note: use '-flax-vector-conversions' to permit conversions between vectors with differing element types or numbers of subparts
| 2645 | );
| | ^
| ../deps/llhttp/src/llhttp.c:2643:11: error: incompatible type for argument 1 of 'vandq_u16'
| 2643 | vcgeq_u8(input, vdupq_n_u8(' ')),
To avoid this, set the correct intrinsics call that matches the
actual arguments.
The code that this patch modifies is generated code, so in itself
this change isn't appropriate for upstream. The actual problem
is in the code generator itself, for which a PR is already pending
for merging[1]. This patch is a port of that PR.
[1]: https://github.com/nodejs/llparse/pull/79
Upstream-Status: Inappropriate [see above]
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
---
deps/llhttp/src/llhttp.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
index aa4c4682..887603fd 100644
--- a/deps/llhttp/src/llhttp.c
+++ b/deps/llhttp/src/llhttp.c
@@ -2639,17 +2639,17 @@ static llparse_state_t llhttp__internal__run(
/* Find first character that does not match `ranges` */
single = vceqq_u8(input, vdupq_n_u8(0x9));
mask = single;
- single = vandq_u16(
+ single = vandq_u8(
vcgeq_u8(input, vdupq_n_u8(' ')),
vcleq_u8(input, vdupq_n_u8('~'))
);
- mask = vorrq_u16(mask, single);
- single = vandq_u16(
+ mask = vorrq_u8(mask, single);
+ single = vandq_u8(
vcgeq_u8(input, vdupq_n_u8(0x80)),
vcleq_u8(input, vdupq_n_u8(0xff))
);
- mask = vorrq_u16(mask, single);
- narrow = vshrn_n_u16(mask, 4);
+ mask = vorrq_u8(mask, single);
+ narrow = vshrn_n_u16(vreinterpretq_u16_u8(mask), 4);
match_mask = ~vget_lane_u64(vreinterpret_u64_u8(narrow), 0);
match_len = __builtin_ctzll(match_mask) >> 2;
if (match_len != 16) {
@@ -1,60 +0,0 @@
From a63a5faea54055973bf5f0a514444532563cc20d Mon Sep 17 00:00:00 2001
From: Telukula Jeevan Kumar Sahu <j-sahu@ti.com>
Date: Fri, 27 Feb 2026 20:58:43 +0530
Subject: [PATCH] llhttp: fix NEON header value __builtin_ctzll undefined
behavior
When all 16 bytes match the allowed range, match_mask becomes 0 after
the bitwise NOT. Calling __builtin_ctzll(0) is undefined behavior per
the C standard.
The code expects match_len == 16 when all bytes match (so the branch
is skipped and p += 16 continues the loop), but this relied on
ctzll(0) returning 64, which is not guaranteed.
GCC at -O2 exploits this UB by deducing that __builtin_ctzll() result
is always in range [0, 63], and after >> 2 always in [0, 15], which
is never equal to 16. The compiler then optimizes
"if (match_len != 16)" to always-true, causing every valid 16-byte
chunk to be falsely rejected as containing an invalid character.
This manifests as HTTP 400 Bad Request (HPE_INVALID_HEADER_TOKEN) for
any HTTP header value longer than 16 characters on ARM targets with
NEON enabled.
Fix by explicitly checking for match_mask == 0 and setting
match_len = 16, avoiding the undefined behavior entirely. This bug
affects both aarch64 and armv7 NEON targets.
The fix has been merged upstream in llparse 7.3.1 [1] and is included
in llhttp 9.3.1. This patch can be dropped when nodejs updates its
bundled llhttp to >= 9.3.1.
[1]: https://github.com/nodejs/llparse/pull/83
Upstream-Status: Inappropriate
Signed-off-by: Telukula Jeevan Kumar Sahu <j-sahu@ti.com>
---
deps/llhttp/src/llhttp.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
index 14b731e..b0a46c6 100644
--- a/deps/llhttp/src/llhttp.c
+++ b/deps/llhttp/src/llhttp.c
@@ -2651,7 +2651,11 @@ static llparse_state_t llhttp__internal__run(
mask = vorrq_u8(mask, single);
narrow = vshrn_n_u16(vreinterpretq_u16_u8(mask), 4);
match_mask = ~vget_lane_u64(vreinterpret_u64_u8(narrow), 0);
- match_len = __builtin_ctzll(match_mask) >> 2;
+ if (match_mask == 0) {
+ match_len = 16;
+ } else {
+ match_len = __builtin_ctzll(match_mask) >> 2;
+ }
if (match_len != 16) {
p += match_len;
goto s_n_llhttp__internal__n_header_value_otherwise;
--
2.34.1
@@ -31,9 +31,6 @@ SRC_URI = "https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
file://0001-positional-args.patch \
file://0001-custom-env.patch \
file://0001-build-remove-redundant-mXX-flags-for-V8.patch \
file://0001-fix-arm-Neon-intrinsics-types.patch \
file://0001-detect-aarch64-Neon-correctly.patch \
file://0001-llhttp-fix-NEON-header-value-__builtin_ctzll-undefin.patch \
file://run-ptest \
"
SRC_URI:append:class-target = " \
@@ -42,7 +39,7 @@ SRC_URI:append:class-target = " \
SRC_URI:append:toolchain-clang:powerpc64le = " \
file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
"
SRC_URI[sha256sum] = "b6bedd3a8cacd5df7df015a5088264b12c74a277ba60684cb9642ae8eb743132"
SRC_URI[sha256sum] = "f3e6a578db1ab335a4a72785c1e87ad18a2cf6d2fc25747a1d741fb34af0bd0f"
S = "${UNPACKDIR}/node-v${PV}"