selftest: af_unix: Add zero-buffer test for msg_oob.c

The previous patches fixed two issues related to zero-length
buffer with MSG_PEEK for MSG_OOB skb.

Let's add corresponding tests in msg_oob.c.

Without this series:

  # FAILED: 50 / 60 tests passed.
  # Totals: pass:50 fail:10 xfail:0 xpass:0 skip:0 error:0

With this series:

  # PASSED: 60 / 60 tests passed.
  # Totals: pass:60 fail:0 xfail:0 xpass:0 skip:0 error:0

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260902202202.892676-4-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Kuniyuki Iwashima 2026-09-02 20:21:52 +00:00 committed by Jakub Kicinski
parent 6e5ee08eb5
commit ca0b0a8687

View File

@ -290,6 +290,25 @@ static void __setinlinepair(struct __test_metadata *_metadata,
}
}
static void __setblockingpair(struct __test_metadata *_metadata,
FIXTURE_DATA(msg_oob) *self)
{
int i;
for (i = 0; i < 2; i++) {
int ret, old_flags, flags;
old_flags = fcntl(self->fd[i * 2 + 1], F_GETFL, 0);
ASSERT_NE(-1, old_flags);
ret = fcntl(self->fd[i * 2 + 1], F_SETFL, old_flags & ~O_NONBLOCK);
ASSERT_EQ(0, ret);
flags = fcntl(self->fd[i * 2 + 1], F_GETFL, 0);
ASSERT_EQ(old_flags & ~O_NONBLOCK, flags);
}
}
static void __siocatmarkpair(struct __test_metadata *_metadata,
FIXTURE_DATA(msg_oob) *self,
bool oob_head)
@ -347,6 +366,9 @@ static void __resetpair(struct __test_metadata *_metadata,
#define setinlinepair() \
__setinlinepair(_metadata, self)
#define setblockingpair() \
__setblockingpair(_metadata, self)
#define resetpair(reset) \
__resetpair(_metadata, self, variant, reset)
@ -888,4 +910,49 @@ TEST_F(msg_oob, inline_ex_oob_siocatmark)
resetpair(true);
}
TEST_F(msg_oob, zero_buf_oob)
{
sendpair("a", 1, MSG_OOB);
recvpair("", 0, 0, 0);
}
TEST_F(msg_oob, zero_buf_oob_blocking)
{
sendpair("a", 1, MSG_OOB);
setblockingpair();
recvpair("", 0, 0, 0);
}
TEST_F(msg_oob, zero_buf_non_oob_oob)
{
sendpair("ab", 2, MSG_OOB);
recvpair("", 0, 0, 0);
}
TEST_F(msg_oob, zero_buf_non_oob_oob_blocking)
{
sendpair("ab", 2, MSG_OOB);
setblockingpair();
recvpair("", 0, 0, 0);
}
TEST_F(msg_oob, zero_buf_ex_oob_oob)
{
sendpair("a", 1, MSG_OOB);
recvpair("a", 1, 1, MSG_OOB);
sendpair("b", 1, MSG_OOB);
recvpair("", 0, 0, 0);
}
TEST_F(msg_oob, zero_buf_ex_oob_oob_blocking)
{
sendpair("a", 1, MSG_OOB);
recvpair("a", 1, 1, MSG_OOB);
sendpair("b", 1, MSG_OOB);
setblockingpair();
recvpair("", 0, 0, 0);
}
TEST_HARNESS_MAIN