* [PATCH Liburing 0/2] build and compiler warning fixes @ 2026-03-14 8:35 Yang Xiuwei 2026-03-14 8:35 ` [PATCH 1/2] examples/send-zerocopy: fix -Wstringop-truncation on ifr.ifr_name Yang Xiuwei 2026-03-14 8:35 ` [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available Yang Xiuwei 0 siblings, 2 replies; 5+ messages in thread From: Yang Xiuwei @ 2026-03-14 8:35 UTC (permalink / raw) To: axboe; +Cc: io-uring, Yang Xiuwei Fix two issues: (1) cbpf_filter test fails to build when kernel headers lack openat2.h; (2) send-zerocopy triggers -Wstringop-truncation on ifr.ifr_name. Yang Xiuwei (2): examples/send-zerocopy: fix -Wstringop-truncation on ifr.ifr_name test/cbpf_filter: skip when openat2.h is not available examples/send-zerocopy.c | 2 +- test/cbpf_filter.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] examples/send-zerocopy: fix -Wstringop-truncation on ifr.ifr_name 2026-03-14 8:35 [PATCH Liburing 0/2] build and compiler warning fixes Yang Xiuwei @ 2026-03-14 8:35 ` Yang Xiuwei 2026-03-14 8:35 ` [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available Yang Xiuwei 1 sibling, 0 replies; 5+ messages in thread From: Yang Xiuwei @ 2026-03-14 8:35 UTC (permalink / raw) To: axboe; +Cc: io-uring, Yang Xiuwei strncpy(ifr.ifr_name, cfg_ifname, sizeof(ifr.ifr_name)) triggers -Wstringop-truncation because the bound equals the destination size, so the compiler assumes the result may not be null-terminated. Use sizeof(ifr.ifr_name) - 1 as the bound so at most 15 bytes are copied. Fixes: 3e4f05342662 ("examples/send-zerocopy: use strncpy() to copy interface name") Signed-off-by: Yang Xiuwei <yangxiuwei@kylinos.cn> --- examples/send-zerocopy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/send-zerocopy.c b/examples/send-zerocopy.c index f0248d20..b2821af6 100644 --- a/examples/send-zerocopy.c +++ b/examples/send-zerocopy.c @@ -353,7 +353,7 @@ static void do_tx(struct thread_data *td, int domain, int type, int protocol) struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, cfg_ifname, sizeof(ifr.ifr_name)); + strncpy(ifr.ifr_name, cfg_ifname, sizeof(ifr.ifr_name) - 1); if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)) < 0) t_error(1, errno, "Binding to device failed\n"); -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available 2026-03-14 8:35 [PATCH Liburing 0/2] build and compiler warning fixes Yang Xiuwei 2026-03-14 8:35 ` [PATCH 1/2] examples/send-zerocopy: fix -Wstringop-truncation on ifr.ifr_name Yang Xiuwei @ 2026-03-14 8:35 ` Yang Xiuwei 2026-03-14 13:35 ` Jens Axboe 1 sibling, 1 reply; 5+ messages in thread From: Yang Xiuwei @ 2026-03-14 8:35 UTC (permalink / raw) To: axboe; +Cc: io-uring, Yang Xiuwei cbpf_filter.c unconditionally includes <linux/openat2.h>, so the test fails to build on systems whose kernel headers do not provide that file (e.g. older distros or LTS). configure already sets CONFIG_HAVE_OPEN_HOW=n and provides struct open_how in compat.h for the library and other tests; only this test bypassed that by including the kernel header directly. Wrap the entire test in #ifdef CONFIG_HAVE_OPEN_HOW and add a stub main that returns T_EXIT_SKIP in the #else branch. The test then always compiles; on systems without openat2.h it skips at runtime. Signed-off-by: Yang Xiuwei <yangxiuwei@kylinos.cn> --- test/cbpf_filter.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/cbpf_filter.c b/test/cbpf_filter.c index 41fd284e..050b3ac7 100644 --- a/test/cbpf_filter.c +++ b/test/cbpf_filter.c @@ -6,6 +6,7 @@ * Unlike eBPF which requires a separate compiled program, cBPF filters can * be defined inline as an array of sock_filter instructions. */ +#ifdef CONFIG_HAVE_OPEN_HOW #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -1443,3 +1444,10 @@ int main(int argc, char *argv[]) return total_failed; } +#else /* #ifdef CONFIG_HAVE_OPEN_HOW */ +#include "helpers.h" +int main(void) +{ + return T_EXIT_SKIP; +} +#endif /* #ifdef CONFIG_HAVE_OPEN_HOW */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available 2026-03-14 8:35 ` [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available Yang Xiuwei @ 2026-03-14 13:35 ` Jens Axboe 2026-03-15 5:02 ` Yang Xiuwei 0 siblings, 1 reply; 5+ messages in thread From: Jens Axboe @ 2026-03-14 13:35 UTC (permalink / raw) To: Yang Xiuwei; +Cc: io-uring On 3/14/26 2:35 AM, Yang Xiuwei wrote: > cbpf_filter.c unconditionally includes <linux/openat2.h>, so the test > fails to build on systems whose kernel headers do not provide that > file (e.g. older distros or LTS). configure already sets > CONFIG_HAVE_OPEN_HOW=n and provides struct open_how in compat.h for > the library and other tests; only this test bypassed that by > including the kernel header directly. > > Wrap the entire test in #ifdef CONFIG_HAVE_OPEN_HOW and add a stub > main that returns T_EXIT_SKIP in the #else branch. The test then > always compiles; on systems without openat2.h it skips at runtime. liburing defines open_how if it's not in the system headers. I feel like all you need to do here is remove the openat2.h include, rather than disable the test entirely? -- Jens Axboe ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available 2026-03-14 13:35 ` Jens Axboe @ 2026-03-15 5:02 ` Yang Xiuwei 0 siblings, 0 replies; 5+ messages in thread From: Yang Xiuwei @ 2026-03-15 5:02 UTC (permalink / raw) To: axboe; +Cc: io-uring Hi Jens, On 2026-03-14 13:35 UTC, Jens Axboe wrote: > liburing defines open_how if it's not in the system headers. I feel > like all you need to do here is remove the openat2.h include, rather > than disable the test entirely? Thanks for the suggestion. I had actually tried that first: removing only the #include <linux/openat2.h> and relying on liburing's compat for struct open_how. It turned out that this test also uses the RESOLVE_IN_ROOT macro (and the filter logic is built around it). Without the header, the build fails with 'RESOLVE_IN_ROOT' undeclared. RESOLVE_IN_ROOT and the other RESOLVE_* flags come from <linux/openat2.h>; compat.h only provides struct open_how when the header is missing, not those constants. Defining RESOLVE_IN_ROOT (and friends) ourselves in compat or in the test would duplicate kernel UAPI and could get out of sync if the kernel ever changes them. So I went back to the more conservative approach: wrap the test in #ifdef CONFIG_HAVE_OPEN_HOW and provide a stub main that returns T_EXIT_SKIP when openat2.h is not available. The test then always compiles; on systems without the header it simply skips at runtime. If you have a better approach in mind, I'd be glad to follow that instead. Best regards, Yang Xiuwei ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-03-15 5:02 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-03-14 8:35 [PATCH Liburing 0/2] build and compiler warning fixes Yang Xiuwei 2026-03-14 8:35 ` [PATCH 1/2] examples/send-zerocopy: fix -Wstringop-truncation on ifr.ifr_name Yang Xiuwei 2026-03-14 8:35 ` [PATCH 2/2] test/cbpf_filter: skip when openat2.h is not available Yang Xiuwei 2026-03-14 13:35 ` Jens Axboe 2026-03-15 5:02 ` Yang Xiuwei
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox