Module Name: src Committed By: snj Date: Thu Jun 15 05:32:35 UTC 2017
Modified Files: src/sys/netcan [netbsd-8]: can_pcb.c src/tests/net/can [netbsd-8]: t_can.c Log Message: Pull up following revision(s) (requested by bouyer in ticket #34): sys/netcan/can_pcb.c: revision 1.6 tests/net/can/t_can.c: revision 1.6 Refuse to bind to a non-CAN interface. Also release the lock in the error branch. -- Test bind()ing to a non-existent interface. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.5.2.1 src/sys/netcan/can_pcb.c cvs rdiff -u -r1.5 -r1.5.2.1 src/tests/net/can/t_can.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netcan/can_pcb.c diff -u src/sys/netcan/can_pcb.c:1.5 src/sys/netcan/can_pcb.c:1.5.2.1 --- src/sys/netcan/can_pcb.c:1.5 Thu Jun 1 02:45:14 2017 +++ src/sys/netcan/can_pcb.c Thu Jun 15 05:32:35 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: can_pcb.c,v 1.5 2017/06/01 02:45:14 chs Exp $ */ +/* $NetBSD: can_pcb.c,v 1.5.2.1 2017/06/15 05:32:35 snj Exp $ */ /*- * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: can_pcb.c,v 1.5 2017/06/01 02:45:14 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: can_pcb.c,v 1.5.2.1 2017/06/15 05:32:35 snj Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -127,8 +127,12 @@ can_pcbbind(void *v, struct sockaddr_can mutex_enter(&canp->canp_mtx); if (scan->can_ifindex != 0) { canp->canp_ifp = if_byindex(scan->can_ifindex); - if (canp->canp_ifp == NULL) + if (canp->canp_ifp == NULL || + canp->canp_ifp->if_dlt != DLT_CAN_SOCKETCAN) { + canp->canp_ifp = NULL; + mutex_exit(&canp->canp_mtx); return (EADDRNOTAVAIL); + } soisconnected(canp->canp_socket); } else { canp->canp_ifp = NULL; Index: src/tests/net/can/t_can.c diff -u src/tests/net/can/t_can.c:1.5 src/tests/net/can/t_can.c:1.5.2.1 --- src/tests/net/can/t_can.c:1.5 Sun May 28 14:53:13 2017 +++ src/tests/net/can/t_can.c Thu Jun 15 05:32:35 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: t_can.c,v 1.5 2017/05/28 14:53:13 christos Exp $ */ +/* $NetBSD: t_can.c,v 1.5.2.1 2017/06/15 05:32:35 snj Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: t_can.c,v 1.5 2017/05/28 14:53:13 christos Exp $"); +__RCSID("$NetBSD: t_can.c,v 1.5.2.1 2017/06/15 05:32:35 snj Exp $"); #endif /* not lint */ #include <sys/types.h> @@ -717,6 +717,31 @@ ATF_TC_BODY(cannoloop, tc) } } +ATF_TC(canbindunknown); +ATF_TC_HEAD(canbindunknown, tc) +{ + + atf_tc_set_md_var(tc, "descr", "check that bind to unkown interface fails"); + atf_tc_set_md_var(tc, "timeout", "5"); +} + +ATF_TC_BODY(canbindunknown, tc) +{ + struct sockaddr_can sa; + int r, s; + + rump_init(); + + s = can_socket_with_own(); + + sa.can_family = AF_CAN; + sa.can_ifindex = 10; /* should not exist */ + + r = rump_sys_bind(s, (struct sockaddr *)&sa, sizeof(sa)); + + ATF_CHECK_MSG(r < 0, "bind() didn't fail (%d)", r); +} + ATF_TP_ADD_TCS(tp) { @@ -730,5 +755,6 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, canrecvfrom); ATF_TP_ADD_TC(tp, canbindfilter); ATF_TP_ADD_TC(tp, cannoloop); + ATF_TP_ADD_TC(tp, canbindunknown); return atf_no_error(); }