Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftest: af_unix: Silence -Wflex-array-member-not-at-end warning for scm_inq.c.

scm_inq.c has no problem in functionality, but when compiled with
-Wflex-array-member-not-at-end, it shows this warning:

scm_inq.c:15:24: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
15 | struct cmsghdr cmsghdr;
| ^~~~~~~

Let's silence it.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20250811215432.3379570-3-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Kuniyuki Iwashima and committed by
Jakub Kicinski
942224e6 b1987f1e

+12 -14
+12 -14
tools/testing/selftests/net/af_unix/scm_inq.c
··· 11 11 #define NR_CHUNKS 100 12 12 #define MSG_LEN 256 13 13 14 - struct scm_inq { 15 - struct cmsghdr cmsghdr; 16 - int inq; 17 - }; 18 - 19 14 FIXTURE(scm_inq) 20 15 { 21 16 int fd[2]; ··· 65 70 static void recv_chunks(struct __test_metadata *_metadata, 66 71 FIXTURE_DATA(scm_inq) *self) 67 72 { 73 + char cmsg_buf[CMSG_SPACE(sizeof(int))]; 68 74 struct msghdr msg = {}; 69 75 struct iovec iov = {}; 70 - struct scm_inq cmsg; 76 + struct cmsghdr *cmsg; 71 77 char buf[MSG_LEN]; 72 78 int i, ret; 73 79 int inq; 74 80 75 81 msg.msg_iov = &iov; 76 82 msg.msg_iovlen = 1; 77 - msg.msg_control = &cmsg; 78 - msg.msg_controllen = CMSG_SPACE(sizeof(cmsg.inq)); 83 + msg.msg_control = cmsg_buf; 84 + msg.msg_controllen = sizeof(cmsg_buf); 79 85 80 86 iov.iov_base = buf; 81 87 iov.iov_len = sizeof(buf); 82 88 83 89 for (i = 0; i < NR_CHUNKS; i++) { 84 90 memset(buf, 0, sizeof(buf)); 85 - memset(&cmsg, 0, sizeof(cmsg)); 91 + memset(cmsg_buf, 0, sizeof(cmsg_buf)); 86 92 87 93 ret = recvmsg(self->fd[1], &msg, 0); 88 94 ASSERT_EQ(MSG_LEN, ret); 89 - ASSERT_NE(NULL, CMSG_FIRSTHDR(&msg)); 90 - ASSERT_EQ(CMSG_LEN(sizeof(cmsg.inq)), cmsg.cmsghdr.cmsg_len); 91 - ASSERT_EQ(SOL_SOCKET, cmsg.cmsghdr.cmsg_level); 92 - ASSERT_EQ(SCM_INQ, cmsg.cmsghdr.cmsg_type); 95 + 96 + cmsg = CMSG_FIRSTHDR(&msg); 97 + ASSERT_NE(NULL, cmsg); 98 + ASSERT_EQ(CMSG_LEN(sizeof(int)), cmsg->cmsg_len); 99 + ASSERT_EQ(SOL_SOCKET, cmsg->cmsg_level); 100 + ASSERT_EQ(SCM_INQ, cmsg->cmsg_type); 93 101 94 102 ret = ioctl(self->fd[1], SIOCINQ, &inq); 95 103 ASSERT_EQ(0, ret); 96 - ASSERT_EQ(cmsg.inq, inq); 104 + ASSERT_EQ(*(int *)CMSG_DATA(cmsg), inq); 97 105 } 98 106 } 99 107