Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | int | - |
18 | sys_tun_open(int tun, int mode, char **ifname) | - |
19 | { | - |
20 | struct ifreq ifr; | - |
21 | int fd = -1; | - |
22 | const char *name = | - |
23 | ((void *)0) | - |
24 | ; | - |
25 | | - |
26 | if (ifname != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
27 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
28 | ) | - |
29 | * never executed: *ifname = ((void *)0) ; ifname = never executed: *ifname = ((void *)0) ; | 0 |
30 | ((void *)0) never executed: *ifname = ((void *)0) ; | 0 |
31 | ; never executed: *ifname = ((void *)0) ; | 0 |
32 | | - |
33 | if ((TRUE | never evaluated | FALSE | never evaluated |
fd = open("/dev/net/tun", TRUE | never evaluated | FALSE | never evaluated |
| 0 |
34 | 02TRUE | never evaluated | FALSE | never evaluated |
| 0 |
35 | )) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
36 | debug("%s: failed to open tunnel control interface: %s", | - |
37 | __func__, strerror( | - |
38 | (*__errno_location ()) | - |
39 | )); | - |
40 | return never executed: return (-1); (-1);never executed: return (-1); | 0 |
41 | } | - |
42 | | - |
43 | bzero(&ifr, sizeof(ifr)); | - |
44 | | - |
45 | if (mode == 0x02TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
46 | ifr. | - |
47 | ifr_ifru.ifru_flags | - |
48 | = | - |
49 | 0x0002 | - |
50 | ; | - |
51 | name = "tap%d"; | - |
52 | } never executed: end of block else { | 0 |
53 | ifr. | - |
54 | ifr_ifru.ifru_flags | - |
55 | = | - |
56 | 0x0001 | - |
57 | ; | - |
58 | name = "tun%d"; | - |
59 | } never executed: end of block | 0 |
60 | ifr. | - |
61 | ifr_ifru.ifru_flags | - |
62 | |= | - |
63 | 0x1000 | - |
64 | ; | - |
65 | | - |
66 | if (tun != 0x7fffffffTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
67 | if (tun > (0x7fffffff - 2)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
68 | debug("%s: invalid tunnel id %x: %s", __func__, | - |
69 | tun, strerror( | - |
70 | (*__errno_location ()) | - |
71 | )); | - |
72 | goto never executed: goto failed; failed;never executed: goto failed; | 0 |
73 | } | - |
74 | snprintf(ifr. | - |
75 | ifr_ifrn.ifrn_name | - |
76 | , sizeof(ifr. | - |
77 | ifr_ifrn.ifrn_name | - |
78 | ), name, tun); | - |
79 | } never executed: end of block | 0 |
80 | | - |
81 | if (ioctl(fd, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
82 | (((1U) << (((0 +8)+8)+14)) | ((('T')) << (0 +8)) | (((202)) << 0) | ((((sizeof(int)))) << ((0 +8)+8)))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
83 | , &ifr) == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
84 | debug("%s: failed to configure tunnel (mode %d): %s", __func__, | - |
85 | mode, strerror( | - |
86 | (*__errno_location ()) | - |
87 | )); | - |
88 | goto never executed: goto failed; failed;never executed: goto failed; | 0 |
89 | } | - |
90 | | - |
91 | if (tun == 0x7fffffffTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
92 | debug("%s: tunnel mode %d fd %d", __func__, mode, fd); never executed: debug("%s: tunnel mode %d fd %d", __func__, mode, fd); | 0 |
93 | else | - |
94 | debug("%s: %s mode %d fd %d", __func__, ifr. never executed: debug("%s: %s mode %d fd %d", __func__, ifr. ifr_ifrn.ifrn_name , mode, fd); | 0 |
95 | ifr_ifrn.ifrn_name never executed: debug("%s: %s mode %d fd %d", __func__, ifr. ifr_ifrn.ifrn_name , mode, fd); | 0 |
96 | , mode, fd); never executed: debug("%s: %s mode %d fd %d", __func__, ifr. ifr_ifrn.ifrn_name , mode, fd); | 0 |
97 | | - |
98 | if (ifname != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
99 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
100 | && (*TRUE | never evaluated | FALSE | never evaluated |
ifname = TRUE | never evaluated | FALSE | never evaluated |
| 0 |
101 | (__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
102 | ifr.TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
103 | ifr_ifrn.ifrn_name)TRUE | never evaluated | FALSE | never evaluated |
&& ((TRUE | never evaluated | FALSE | never evaluated |
size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
104 | ifr.TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
105 | ifr_ifrn.ifrn_name) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
106 | ifr.TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
107 | ifr_ifrn.ifrn_name) == 1)TRUE | never evaluated | FALSE | never evaluated |
? (((const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
108 | ifr.TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
109 | ifr_ifrn.ifrn_name))[0] == '\0' ? (char *) calloc ((size_t) 1, (size_t) 1) : ({ size_t __len = strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
110 | ifr.TRUE | never evaluated | FALSE | never evaluated |
| 0 |
111 | ifr_ifrn.ifrn_name) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, never executed: __retval = (char *) memcpy (__retval, ifr. ifr_ifrn.ifrn_name, __len); | 0 |
112 | ifr.TRUE | never evaluated | FALSE | never evaluated |
never executed: __retval = (char *) memcpy (__retval, ifr. ifr_ifrn.ifrn_name, __len); | 0 |
113 | ifr_ifrn.ifrn_name, __len); __retval; })) : __strdup (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
114 | ifr.TRUE | never evaluated | FALSE | never evaluated |
| 0 |
115 | ifr_ifrn.ifrn_name)))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
116 | ) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
117 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
118 | ) | - |
119 | goto never executed: goto failed; failed;never executed: goto failed; | 0 |
120 | | - |
121 | return never executed: return (fd); (fd);never executed: return (fd); | 0 |
122 | | - |
123 | failed: | - |
124 | close(fd); | - |
125 | return never executed: return (-1); (-1);never executed: return (-1); | 0 |
126 | } | - |
127 | int | - |
128 | sys_tun_infilter(struct ssh *ssh, struct Channel *c, char *buf, int _len) | - |
129 | { | - |
130 | int r; | - |
131 | size_t len; | - |
132 | char *ptr = buf; | - |
133 | | - |
134 | char rbuf[(16*1024)]; | - |
135 | struct ip iph; | - |
136 | | - |
137 | | - |
138 | u_int32_t af; | - |
139 | | - |
140 | | - |
141 | | - |
142 | if (_len < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
143 | return never executed: return -1; -1;never executed: return -1; | 0 |
144 | len = _len; | - |
145 | | - |
146 | | - |
147 | if (len <= sizeof(iph)TRUE | never evaluated | FALSE | never evaluated |
|| len > sizeof(rbuf) - 4TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
148 | return never executed: return -1; -1;never executed: return -1; | 0 |
149 | | - |
150 | memcpy(&iph, buf, sizeof(iph)); | - |
151 | af = iph.ip_v == 6TRUE | never evaluated | FALSE | never evaluated |
? 24 : 2; | 0 |
152 | | - |
153 | memcpy(rbuf + 4, buf, len); | - |
154 | len += 4; | - |
155 | do { const u_int32_t __v = (af); ((u_char *)(rbuf))[0] = (__v >> 24) & 0xff; ((u_char *)(rbuf))[1] = (__v >> 16) & 0xff; ((u_char *)(rbuf))[2] = (__v >> 8) & 0xff; ((u_char *)(rbuf))[3] = __v & 0xff; } while (0); | - |
156 | ptr = rbuf; | - |
157 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_put_string(c->input, ptr, len)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
158 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); never executed: fatal("%s: buffer error: %s", __func__, ssh_err(r)); | 0 |
159 | return never executed: return (0); (0);never executed: return (0); | 0 |
160 | } | - |
161 | | - |
162 | u_char * | - |
163 | sys_tun_outfilter(struct ssh *ssh, struct Channel *c, | - |
164 | u_char **data, size_t *dlen) | - |
165 | { | - |
166 | u_char *buf; | - |
167 | u_int32_t af; | - |
168 | int r; | - |
169 | | - |
170 | | - |
171 | if ((TRUE | never evaluated | FALSE | never evaluated |
r = sshbuf_get_string(c->output, data, dlen)) != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
172 | fatal("%s: buffer error: %s", __func__, ssh_err(r)); never executed: fatal("%s: buffer error: %s", __func__, ssh_err(r)); | 0 |
173 | if (*TRUE | never evaluated | FALSE | never evaluated |
dlen < sizeof(af)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
174 | return never executed: return ( ((void *)0) ); (never executed: return ( ((void *)0) ); | 0 |
175 | ((void *)0) never executed: return ( ((void *)0) ); | 0 |
176 | ); never executed: return ( ((void *)0) ); | 0 |
177 | buf = *data; | - |
178 | | - |
179 | | - |
180 | | - |
181 | *dlen -= sizeof(af); | - |
182 | buf = *data + sizeof(af); | - |
183 | | - |
184 | | - |
185 | | - |
186 | | - |
187 | | - |
188 | return never executed: return (buf); (buf);never executed: return (buf); | 0 |
189 | } | - |
| | |