~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/af_unix/unix_connect.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 
  3 #define _GNU_SOURCE
  4 #include <sched.h>
  5 
  6 #include <stddef.h>
  7 #include <stdio.h>
  8 #include <unistd.h>
  9 
 10 #include <sys/socket.h>
 11 #include <sys/un.h>
 12 
 13 #include "../../kselftest_harness.h"
 14 
 15 FIXTURE(unix_connect)
 16 {
 17         int server, client;
 18         int family;
 19 };
 20 
 21 FIXTURE_VARIANT(unix_connect)
 22 {
 23         int type;
 24         char sun_path[8];
 25         int len;
 26         int flags;
 27         int err;
 28 };
 29 
 30 FIXTURE_VARIANT_ADD(unix_connect, stream_pathname)
 31 {
 32         .type = SOCK_STREAM,
 33         .sun_path = "test",
 34         .len = 4 + 1,
 35         .flags = 0,
 36         .err = 0,
 37 };
 38 
 39 FIXTURE_VARIANT_ADD(unix_connect, stream_abstract)
 40 {
 41         .type = SOCK_STREAM,
 42         .sun_path = "\0test",
 43         .len = 5,
 44         .flags = 0,
 45         .err = 0,
 46 };
 47 
 48 FIXTURE_VARIANT_ADD(unix_connect, stream_pathname_netns)
 49 {
 50         .type = SOCK_STREAM,
 51         .sun_path = "test",
 52         .len = 4 + 1,
 53         .flags = CLONE_NEWNET,
 54         .err = 0,
 55 };
 56 
 57 FIXTURE_VARIANT_ADD(unix_connect, stream_abstract_netns)
 58 {
 59         .type = SOCK_STREAM,
 60         .sun_path = "\0test",
 61         .len = 5,
 62         .flags = CLONE_NEWNET,
 63         .err = ECONNREFUSED,
 64 };
 65 
 66 FIXTURE_VARIANT_ADD(unix_connect, dgram_pathname)
 67 {
 68         .type = SOCK_DGRAM,
 69         .sun_path = "test",
 70         .len = 4 + 1,
 71         .flags = 0,
 72         .err = 0,
 73 };
 74 
 75 FIXTURE_VARIANT_ADD(unix_connect, dgram_abstract)
 76 {
 77         .type = SOCK_DGRAM,
 78         .sun_path = "\0test",
 79         .len = 5,
 80         .flags = 0,
 81         .err = 0,
 82 };
 83 
 84 FIXTURE_VARIANT_ADD(unix_connect, dgram_pathname_netns)
 85 {
 86         .type = SOCK_DGRAM,
 87         .sun_path = "test",
 88         .len = 4 + 1,
 89         .flags = CLONE_NEWNET,
 90         .err = 0,
 91 };
 92 
 93 FIXTURE_VARIANT_ADD(unix_connect, dgram_abstract_netns)
 94 {
 95         .type = SOCK_DGRAM,
 96         .sun_path = "\0test",
 97         .len = 5,
 98         .flags = CLONE_NEWNET,
 99         .err = ECONNREFUSED,
100 };
101 
102 FIXTURE_SETUP(unix_connect)
103 {
104         self->family = AF_UNIX;
105 }
106 
107 FIXTURE_TEARDOWN(unix_connect)
108 {
109         close(self->server);
110         close(self->client);
111 
112         if (variant->sun_path[0])
113                 remove("test");
114 }
115 
116 TEST_F(unix_connect, test)
117 {
118         socklen_t addrlen;
119         struct sockaddr_un addr = {
120                 .sun_family = self->family,
121         };
122         int err;
123 
124         self->server = socket(self->family, variant->type, 0);
125         ASSERT_NE(-1, self->server);
126 
127         addrlen = offsetof(struct sockaddr_un, sun_path) + variant->len;
128         memcpy(&addr.sun_path, variant->sun_path, variant->len);
129 
130         err = bind(self->server, (struct sockaddr *)&addr, addrlen);
131         ASSERT_EQ(0, err);
132 
133         if (variant->type == SOCK_STREAM) {
134                 err = listen(self->server, 32);
135                 ASSERT_EQ(0, err);
136         }
137 
138         err = unshare(variant->flags);
139         ASSERT_EQ(0, err);
140 
141         self->client = socket(self->family, variant->type, 0);
142         ASSERT_LT(0, self->client);
143 
144         err = connect(self->client, (struct sockaddr *)&addr, addrlen);
145         ASSERT_EQ(variant->err, err == -1 ? errno : 0);
146 }
147 
148 TEST_HARNESS_MAIN
149 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php