View | Details | Raw Unified | Return to bug 252551
Collapse All | Expand All

(-)b/contrib/netbsd-tests/lib/libc/sys/t_write.c (+22 lines)
Lines 213-218 ATF_TC_BODY(writev_iovmax, tc) Link Here
213
	ATF_REQUIRE_EQ_MSG(errno, EINVAL, "got: %s", strerror(errno));
213
	ATF_REQUIRE_EQ_MSG(errno, EINVAL, "got: %s", strerror(errno));
214
}
214
}
215
215
216
ATF_TC(writev_zero);
217
ATF_TC_HEAD(writev_zero, tc)
218
{
219
	atf_tc_set_md_var(tc, "timeout", "10");
220
	atf_tc_set_md_var(tc, "descr",
221
	    "writev must return EINVAL when iovcnt == 0");
222
}
223
224
ATF_TC_BODY(writev_zero, tc)
225
{
226
	ssize_t retval;
227
228
	(void)printf("Calling writev(2, NULL, 0)...\n");
229
230
	errno = 0;
231
	retval = writev(2, NULL, 0);
232
233
	ATF_REQUIRE_EQ_MSG(retval, -1, "got: %zd", retval);
234
	ATF_REQUIRE_EQ_MSG(errno, EINVAL, "got: %s", strerror(errno));
235
}
236
216
ATF_TP_ADD_TCS(tp)
237
ATF_TP_ADD_TCS(tp)
217
{
238
{
218
239
Lines 221-226 ATF_TP_ADD_TCS(tp) Link Here
221
	ATF_TP_ADD_TC(tp, write_pos);
242
	ATF_TP_ADD_TC(tp, write_pos);
222
	ATF_TP_ADD_TC(tp, write_ret);
243
	ATF_TP_ADD_TC(tp, write_ret);
223
	ATF_TP_ADD_TC(tp, writev_iovmax);
244
	ATF_TP_ADD_TC(tp, writev_iovmax);
245
	ATF_TP_ADD_TC(tp, writev_zero);
224
246
225
	return atf_no_error();
247
	return atf_no_error();
226
}
248
}
(-)b/sys/kern/subr_uio.c (-2 / +1 lines)
Lines 370-376 copyinuio(const struct iovec *iovp, u_int iovcnt, struct uio **uiop) Link Here
370
	int error, i;
370
	int error, i;
371
371
372
	*uiop = NULL;
372
	*uiop = NULL;
373
	if (iovcnt > UIO_MAXIOV)
373
	if (iovcnt <= 0 || iovcnt > UIO_MAXIOV)
374
		return (EINVAL);
374
		return (EINVAL);
375
	iovlen = iovcnt * sizeof (struct iovec);
375
	iovlen = iovcnt * sizeof (struct iovec);
376
	uio = malloc(iovlen + sizeof *uio, M_IOV, M_WAITOK);
376
	uio = malloc(iovlen + sizeof *uio, M_IOV, M_WAITOK);
377
- 

Return to bug 252551