Commit Graph

14 Commits

Author SHA1 Message Date
Alan Somers
6addc01e8f Abort the create_socket test if socket creation fails.
MFC after:	1 week
Reported by:	Coverity
CID:		1232756
2014-09-10 14:57:26 +00:00
Alan Somers
e594026d6d Numerous small fixes, mostly suggested by Coverity.
tests/sys/kern/unix_seqpacket_test.c
	* Remove a duplicate error check in mk_pair_of_sockets
	* Always close sockets in the success path of ATF test cases.  Don't
	  bother with the error paths, because those are mostly assertions
	  anyway.  Most of these socket leaks were reported by Coverity.
	  All of them are harmless, because each ATF test case runs in its
	  own process.
	* Fix the len argument to send in shutdown_send and
	  shutdown_send_sigpipe.  The old version was using sizeof a pointer
	  instead of sizeof the char array.  Reported by Coverity.
	* Change a few ATF_CHECK to ATF_REQUIRE if the test can't reasonably
	  continue past a failure.

Reported by:	Coverity Scan
CID:		1229995, 1229991, 1229988, 1229994, 1229989, 1229992
CID:		1229993, 1229990, 1229984, 1229967, 1230005, 1229977
CID:		1229966, 1230004, 1229976
MFC after:	1 week
Sponsored by:	Spectra Logic
2014-08-20 16:59:33 +00:00
Julio Merino
3be7751dca Fix variable type to avoid printf formatter warning.
This fixes the build under powerpc64 where gcc complains about a mismatch
between a %zd printf formatter and an int variable passed to it.
2014-04-04 18:10:11 +00:00
Peter Holm
a31faec3d1 Added sysctl kern.maxfiles increase test, do not use /etc/passwd for tests
and use volatile sig_atomic_t for signal handler variable.

Reviewed by:	 asomers (previous version)
Sponsored by:	EMC / Isilon storage division
2014-03-19 09:41:12 +00:00
Julio Merino
f5fd950e35 Make bsd.test.mk the only public mk fragment for the building of tests.
Change {atf,plain,tap}.test.mk to be internal implementation details of
bsd.test.mk.  Makefiles that build tests should now only include bsd.test.mk
and declaratively specify what they want to build, without worrying about
the internal implementation of the mk files.

The reason for this change is to permit building test programs of different
interfaces from a single directory, which is something I had a need for
while porting tests over from src/tools/regression/.

Additionally, this change makes it possible to perform some other requested
changes to bsd.test.mk in an easier manner.  Coming soon.
2014-03-14 08:56:19 +00:00
Alan Somers
c2090e73d7 Replace 4.4BSD Lite's unix domain socket backpressure hack with a cleaner
mechanism, based on the new SB_STOP sockbuf flag.  The old hack dynamically
changed the sending sockbuf's high water mark whenever adding or removing
data from the receiving sockbuf.  It worked for stream sockets, but it never
worked for SOCK_SEQPACKET sockets because of their atomic nature.  If the
sockbuf was partially full, it might return EMSGSIZE instead of blocking.

The new solution is based on DragonFlyBSD's fix from commit
3a6117bbe0ed6a87605c1e43e12a1438d8844380 on 2008-05-27.  It adds an SB_STOP
flag to sockbufs.  Whenever uipc_send surpasses the socket's size limit, it
sets SB_STOP on the sending sockbuf.  sbspace() will then return 0 for that
sockbuf, causing sosend_generic and friends to block.  uipc_rcvd will
likewise clear SB_STOP.  There are two fringe benefits: uipc_{send,rcvd} no
longer need to call chgsbsize() on every send and receive because they don't
change the sockbuf's high water mark.  Also, uipc_sense no longer needs to
acquire the UIPC linkage lock, because it's simpler to compute the
st_blksizes.

There is one drawback: since sbspace() will only ever return 0 or the
maximum, sosend_generic will allow the sockbuf to exceed its nominal maximum
size by at most one packet of size less than the max.  I don't think that's
a serious problem.  In fact, I'm not even positive that FreeBSD guarantees a
socket will always stay within its nominal size limit.

sys/sys/sockbuf.h
	Add the SB_STOP flag and adjust sbspace()

sys/sys/unpcb.h
	Delete the obsolete unp_cc and unp_mbcnt fields from struct unpcb.

sys/kern/uipc_usrreq.c
	Adjust uipc_rcvd, uipc_send, and uipc_sense to use the SB_STOP
	backpressure mechanism.  Removing obsolete unpcb fields from
	db_show_unpcb.

tests/sys/kern/unix_seqpacket_test.c
	Clear expected failures from ATF.

Obtained from:	DragonFly BSD
PR:		kern/185812
Reviewed by:	silence from freebsd-net@ and rwatson@
MFC after:	3 weeks
Sponsored by:	Spectra Logic Corporation
2014-03-13 18:42:12 +00:00
Alan Somers
5d5b721a4d kern/Makefile
Set WARNS=5 for all files in this directory

kern/unix_seqpacket_test.c
	Fix compiler warnings.  Most were benign, but rcvbuf_oversized
	wasn't working as intended because I forgot to set the buffer sizes.

MFC after:	2 weeks
Reported by:	pho
Sponsored by:	Spectra Logic Corporation
2014-03-07 19:30:03 +00:00
Alan Somers
b3a67a4242 Only use -lpthread for unix_seqpacket_test, not for all test programs.
Reported by:	Garrett Cooper
MFC after:	3 weeks
Sponsored by:	Spectra Logic Corporation
2014-03-06 20:39:56 +00:00
Alan Somers
8de34a88de Fix PR kern/185813 "SOCK_SEQPACKET AF_UNIX sockets with asymmetrical
buffers drop packets".  It was caused by a check for the space available
in a sockbuf, but it was checking the wrong sockbuf.

sys/sys/sockbuf.h
sys/kern/uipc_sockbuf.c
    Add sbappendaddr_nospacecheck_locked(), which is just like
    sbappendaddr_locked but doesn't validate the receiving socket's
    space.  Factor out common code into sbappendaddr_locked_internal().
    We shouldn't simply make sbappendaddr_locked check the space and
    then call sbappendaddr_nospacecheck_locked, because that would cause
    the O(n) function m_length to be called twice.

sys/kern/uipc_usrreq.c
    Use sbappendaddr_nospacecheck_locked for SOCK_SEQPACKET sockets,
    because the receiving sockbuf's size limit is irrelevant.

tests/sys/kern/unix_seqpacket_test.c
    Now that 185813 is fixed, pipe_128k_8k fails intermittently due to
    185812.  Make it fail every time by adding a usleep after starting
    the writer thread and before starting the reader thread in
    test_pipe.  That gives the writer time to fill up its send buffer.
    Also, clear the expected failure message due to 185813.  It actually
    said "185812", but that was a typo.

PR:		kern/185813
Reviewed by:	silence from freebsd-net@ and rwatson@
MFC after:	3 weeks
Sponsored by:	Spectra Logic Corporation
2014-03-06 20:24:15 +00:00
Peter Holm
f8eccd0a09 Preserve naming consistency for test cases.
Pointed out by:	 jmmv
Sponsored by:	EMC / Isilon storage division
2014-03-05 08:33:58 +00:00
Peter Holm
af7b51e6ac Changed name of test case to a more descriptive one and moved
comment to the "descr" property.

Suggested by:	 jmmv
Sponsored by:	EMC / Isilon storage division
2014-03-04 10:47:35 +00:00
Peter Holm
276ffe2d97 Added a regression test for r234131.
Discussed with:	 asomers
Sponsored by:	EMC / Isilon storage division
2014-02-26 09:08:25 +00:00
Alan Somers
b9a9db10d4 test_eagain_*_* should've been using nonblocking sockets instead of
blocking sockets.  The error was not exposed as long as the kernel
suffered from PR kern/185812.  Now corrected, these tests pass on
DragonFlyBSD 3.6.0.

PR:		kern/185812
Sponsored by:	Spectra Logic Corporation
MFC after:	2 weeks
2014-02-17 22:06:52 +00:00
Alan Somers
a8eb96d593 Replace the old unix_seqpacket and unix_seqpacket_exercise tests, which
were a little broken and not automatable, with unix_seqpacket_test.
It's coverage is a superset of the old tests and it uses ATF.  It
includes test cases for bugs kern/185813 and kern/185812.

PR:		kern/185812
PR:		kern/185813
Sponsored by:	Spectra Logic
MFC after:	2 weeks
2014-01-23 17:26:28 +00:00