From 6b1b1d6380536e1b01f78535ac3a0a1c19c4f0b7 Mon Sep 17 00:00:00 2001 From: Florian Larysch Date: Fri, 17 Apr 2026 00:51:09 +0200 Subject: [PATCH] package/libnfs: fix build on strict alignment archs Building libnfs fails on targets that have alignment requirements via -Wcast-align even though the underlying buffers are sufficiently aligned. Import the upstream fix that silences those warnings. Fixes: https://autobuild.buildroot.org/results/d7c/d7c0bc5861afdf9bc26906e9abd217bef898fc48 Signed-off-by: Florian Larysch Signed-off-by: Romain Naour --- ...void-cast-to-allow-compile-for-arm32.patch | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 package/libnfs/0003-socket-use-void-cast-to-allow-compile-for-arm32.patch diff --git a/package/libnfs/0003-socket-use-void-cast-to-allow-compile-for-arm32.patch b/package/libnfs/0003-socket-use-void-cast-to-allow-compile-for-arm32.patch new file mode 100644 index 0000000000..1f71a391e7 --- /dev/null +++ b/package/libnfs/0003-socket-use-void-cast-to-allow-compile-for-arm32.patch @@ -0,0 +1,68 @@ +From c66dc9a65723e610fd02da38471d68b8289eb074 Mon Sep 17 00:00:00 2001 +From: Rudi Heitbaum +Date: Tue, 14 Jan 2025 14:09:36 +0000 +Subject: [PATCH] socket: use void cast to allow compile for arm32 + +When compiling for arm32 the error: cast increases required alignment +of target type occurs. + +/lib/socket.c: In function 'rpc_read_from_socket': +lib/socket.c:586:49: error: cast increases required alignment of target type [-Werror=cast-align] + 586 | rpc->rm_xid[1] = ntohl(*(uint32_t *)&buf[0]); + | ^ +lib/socket.c:587:61: error: cast increases required alignment of target type [-Werror=cast-align] + 587 | rpc->pdu = rpc_find_pdu(rpc, ntohl(*(uint32_t *)&buf[0])); + | ^ +lib/socket.c:799:35: error: cast increases required alignment of target type [-Werror=cast-align] + 799 | *((uint32_t *)rpc->inbuf) = htonl(rpc->rm_xid[1]); + | ^ +lib/socket.c:861:71: error: cast increases required alignment of target type [-Werror=cast-align] + 861 | const READ3res *res = (READ3res *) rpc->pdu->zdr_decode_buf; + | ^ + +cast via (void *) to allow the compile to suceed, as all of the source buffers should be 32bit aligned. + +Signed-off-by: Rudi Heitbaum + +Upstream: https://github.com/sahlberg/libnfs/commit/a01d42a0d9682d3e506d3c78680db8c7d158fe88 +Signed-off-by: Florian Larysch +--- + lib/socket.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/lib/socket.c b/lib/socket.c +index f51ca4d..5b9fce5 100644 +--- a/lib/socket.c ++++ b/lib/socket.c +@@ -583,8 +583,8 @@ rpc_read_from_socket(struct rpc_context *rpc) + } + if (!rpc->is_server_context) { + rpc->rm_xid[0] = count; +- rpc->rm_xid[1] = ntohl(*(uint32_t *)&buf[0]); +- rpc->pdu = rpc_find_pdu(rpc, ntohl(*(uint32_t *)&buf[0])); ++ rpc->rm_xid[1] = ntohl(*(uint32_t *)(void *)&buf[0]); ++ rpc->pdu = rpc_find_pdu(rpc, ntohl(*(uint32_t *)(void *)&buf[0])); + if (rpc->pdu == NULL) { + rpc_set_error(rpc, "Failed to match incoming PDU/XID." + " Ignoring PDU"); +@@ -796,7 +796,7 @@ rpc_read_from_socket(struct rpc_context *rpc) + } + + /* Copy the next 4 bytes into inbuf */ +- *((uint32_t *)rpc->inbuf) = htonl(rpc->rm_xid[1]); ++ *((uint32_t *)(void *)rpc->inbuf) = htonl(rpc->rm_xid[1]); + + /* but set inpos to 0, we will update it above + * that we have already read these 4 bytes in +@@ -858,7 +858,7 @@ rpc_read_from_socket(struct rpc_context *rpc) + * If the READ failed, bail out here as there is no + * data. + */ +- const READ3res *res = (READ3res *) rpc->pdu->zdr_decode_buf; ++ const READ3res *res = (READ3res *)(void *) rpc->pdu->zdr_decode_buf; + if (res->status != NFS3_OK) { + goto payload_finished; + } +-- +2.53.0 +