From: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
To: khorenko@virtuozzo.com
Cc: devel@openvz.org
Subject: [Devel] [PATCH hci-8.1 2/2] ms/selftests/futex: Correct validation logic in waitv
Date: Mon, 2 Nov 2026 22:04:38 +0200 [thread overview]
Message-ID: <20261102200610.2414832-3-eva.kurchatova@virtuozzo.com> (raw)
In-Reply-To: <20261102200610.2414832-1-eva.kurchatova@virtuozzo.com>
From: Wake Liu <wakel@google.com>
In futex_waitv negative tests (invalid_flag, unaligned_address, etc.), test
results are evaluated as:
if (res == EINVAL)
Since sys_futex_waitv returns -1 on error and sets errno, direct positive
comparisons against res are always false, causing tests to silently pass
regardless of real errors.
Correct these validations to assert EXPECT_EQ(res, -1) and compare errno
directly against expected constants.
[ tglx: Fixup coding style ]
Signed-off-by: Wake Liu <wakel@google.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260526010635.23980-3-wakel@google.com
(cherry picked from commit a894f6f403320c65b26816be00d9b694e606cae1)
Rebase note: mainline moved futex_waitv.c to kselftest_harness in
commit a91e8e372e4f ("selftests/futex: Refactor futex_waitv with
kselftest_harness.h"), which this tree lacks, so the checks keep the
ksft_test_result_*() form: a result other than -1 or an errno other
than the expected one fails the subtest. The NULL waitv.uaddr check
expects EFAULT: here it runs on an otherwise valid waitv[], and a NULL
futex address is answered with EFAULT; in mainline it gets EINVAL
only from the zeroed flags of the other entries.
https://virtuozzo.atlassian.net/browse/VSTOR-152660
Feature: fix selftests
Signed-off-by: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
---
.../selftests/futex/functional/futex_waitv.c | 55 ++++++++++++-------
1 file changed, 35 insertions(+), 20 deletions(-)
diff --git a/tools/testing/selftests/futex/functional/futex_waitv.c b/tools/testing/selftests/futex/functional/futex_waitv.c
index 98edb25690d9..f58f3fa8f0e0 100644
--- a/tools/testing/selftests/futex/functional/futex_waitv.c
+++ b/tools/testing/selftests/futex/functional/futex_waitv.c
@@ -184,10 +184,13 @@ int main(int argc, char *argv[])
to.tv_sec++;
res = futex_waitv(waitv, NR_FUTEXES, 0, &to, CLOCK_MONOTONIC);
- if (res == EINVAL) {
- ksft_test_result_fail("futex_waitv private returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
+ if (res != -1) {
+ ksft_test_result_fail("futex_waitv without FUTEX_32: unexpected result: %d\n",
+ res);
+ ret = RET_FAIL;
+ } else if (errno != EINVAL) {
+ ksft_test_result_fail("futex_waitv without FUTEX_32: unexpected errno: %d\n",
+ errno);
ret = RET_FAIL;
} else {
ksft_test_result_pass("futex_waitv without FUTEX_32\n");
@@ -203,10 +206,13 @@ int main(int argc, char *argv[])
to.tv_sec++;
res = futex_waitv(waitv, NR_FUTEXES, 0, &to, CLOCK_MONOTONIC);
- if (res == EINVAL) {
- ksft_test_result_fail("futex_wake private returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
+ if (res != -1) {
+ ksft_test_result_fail("futex_waitv with an unaligned address: unexpected result: %d\n",
+ res);
+ ret = RET_FAIL;
+ } else if (errno != EINVAL) {
+ ksft_test_result_fail("futex_waitv with an unaligned address: unexpected errno: %d\n",
+ errno);
ret = RET_FAIL;
} else {
ksft_test_result_pass("futex_waitv with an unaligned address\n");
@@ -221,10 +227,13 @@ int main(int argc, char *argv[])
to.tv_sec++;
res = futex_waitv(waitv, NR_FUTEXES, 0, &to, CLOCK_MONOTONIC);
- if (res == EINVAL) {
- ksft_test_result_fail("futex_waitv private returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
+ if (res != -1) {
+ ksft_test_result_fail("futex_waitv NULL address in waitv.uaddr: unexpected result: %d\n",
+ res);
+ ret = RET_FAIL;
+ } else if (errno != EFAULT) {
+ ksft_test_result_fail("futex_waitv NULL address in waitv.uaddr: unexpected errno: %d\n",
+ errno);
ret = RET_FAIL;
} else {
ksft_test_result_pass("futex_waitv NULL address in waitv.uaddr\n");
@@ -237,10 +246,13 @@ int main(int argc, char *argv[])
to.tv_sec++;
res = futex_waitv(NULL, NR_FUTEXES, 0, &to, CLOCK_MONOTONIC);
- if (res == EINVAL) {
- ksft_test_result_fail("futex_waitv private returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
+ if (res != -1) {
+ ksft_test_result_fail("futex_waitv NULL address in *waiters: unexpected result: %d\n",
+ res);
+ ret = RET_FAIL;
+ } else if (errno != EINVAL) {
+ ksft_test_result_fail("futex_waitv NULL address in *waiters: unexpected errno: %d\n",
+ errno);
ret = RET_FAIL;
} else {
ksft_test_result_pass("futex_waitv NULL address in *waiters\n");
@@ -255,10 +267,13 @@ int main(int argc, char *argv[])
to.tv_sec++;
res = futex_waitv(waitv, NR_FUTEXES, 0, &to, CLOCK_TAI);
- if (res == EINVAL) {
- ksft_test_result_fail("futex_waitv private returned: %d %s\n",
- res ? errno : res,
- res ? strerror(errno) : "");
+ if (res != -1) {
+ ksft_test_result_fail("futex_waitv invalid clockid: unexpected result: %d\n",
+ res);
+ ret = RET_FAIL;
+ } else if (errno != EINVAL) {
+ ksft_test_result_fail("futex_waitv invalid clockid: unexpected errno: %d\n",
+ errno);
ret = RET_FAIL;
} else {
ksft_test_result_pass("futex_waitv invalid clockid\n");
--
2.56.0
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
next prev parent reply other threads:[~2026-11-02 20:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 20:04 [Devel] [PATCH hci-8.1 0/2] selftests/futex: correct " Eva Kurchatova
2026-11-02 20:04 ` [Devel] [PATCH hci-8.1 1/2] selftests/futex: run futex_waitv argument checks with a valid waitv Eva Kurchatova
2026-11-02 20:09 ` no-reply
2026-11-03 15:13 ` Konstantin Khorenko
2026-11-02 20:04 ` Eva Kurchatova [this message]
2026-11-02 20:10 ` [Devel] [PATCH hci-8.1 2/2] ms/selftests/futex: Correct validation logic in waitv no-reply
2026-11-03 15:13 ` [Devel] [PATCH hci-8.1 0/2] selftests/futex: correct " Konstantin Khorenko
2026-11-03 15:14 ` Konstantin Khorenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261102200610.2414832-3-eva.kurchatova@virtuozzo.com \
--to=eva.kurchatova@virtuozzo.com \
--cc=devel@openvz.org \
--cc=khorenko@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.