mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-05-30 13:00:02 +00:00
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:
committed by
Khem Raj
parent
9be9388574
commit
ea56a5e3ae
@@ -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) {
|
||||
-60
@@ -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
|
||||
|
||||
+1
-4
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user