View | Details | Raw Unified | Return to bug 2735 | Differences between
and this patch

Collapse All | Expand All

(-)a/openbsd-compat/port-tun.c (-12 / +10 lines)
Lines 224-234 sys_tun_infilter(struct Channel *c, char *buf, int len) Link Here
224
	iph = (struct ip *)(ptr + sizeof(u_int32_t));
224
	iph = (struct ip *)(ptr + sizeof(u_int32_t));
225
	switch (iph->ip_v) {
225
	switch (iph->ip_v) {
226
	case 6:
226
	case 6:
227
		*af = AF_INET6;
227
		*af = htonl(AF_INET6);
228
		break;
228
		break;
229
	case 4:
229
	case 4:
230
	default:
230
	default:
231
		*af = AF_INET;
231
		*af = htonl(AF_INET);
232
		break;
232
		break;
233
	}
233
	}
234
#endif
234
#endif
Lines 253-259 u_char * Link Here
253
sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen)
253
sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen)
254
{
254
{
255
	u_char *buf;
255
	u_char *buf;
256
	u_int32_t *af;
256
	u_int32_t af;
257
	int r;
257
	int r;
258
	size_t xxx_dlen;
258
	size_t xxx_dlen;
259
259
Lines 262-282 sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen) Link Here
262
		fatal("%s: buffer error: %s", __func__, ssh_err(r));
262
		fatal("%s: buffer error: %s", __func__, ssh_err(r));
263
	if (dlen != NULL)
263
	if (dlen != NULL)
264
		*dlen = xxx_dlen;
264
		*dlen = xxx_dlen;
265
	if (*dlen < sizeof(*af))
265
	if (*dlen < sizeof(af))
266
		return (NULL);
266
		return (NULL);
267
	buf = *data;
267
	buf = *data;
268
268
269
#if defined(SSH_TUN_PREPEND_AF)
269
#if defined(SSH_TUN_PREPEND_AF)
270
	*dlen -= sizeof(u_int32_t);
270
	/* skip address family */
271
	buf = *data + sizeof(u_int32_t);
271
	*dlen -= sizeof(af);
272
	buf = *data + sizeof(af);
272
#elif defined(SSH_TUN_COMPAT_AF)
273
#elif defined(SSH_TUN_COMPAT_AF)
273
	af = ntohl(*(u_int32_t *)buf);
274
	/* translate address family */
274
	if (*af == OPENBSD_AF_INET6)
275
	af = (ntohl(PEEK_U32(buf)) == OPENBSD_AF_INET6) ? AF_INET6 : AF_INET;
275
		*af = htonl(AF_INET6);
276
	POKE_U32(buf, htonl(af));
276
	else
277
		*af = htonl(AF_INET);
278
#endif
277
#endif
279
280
	return (buf);
278
	return (buf);
281
}
279
}
282
#endif /* SSH_TUN_FILTER */
280
#endif /* SSH_TUN_FILTER */

Return to bug 2735