/memcheck/tests/freebsd/452275
/memcheck/tests/freebsd/errno_aligned_allocs
/memcheck/tests/freebsd/setproctitle
+/memcheck/tests/freebsd/sctp
+/memcheck/tests/freebsd/sctp2
# /memcheck/tests/amd64-freebsd
/memcheck/tests/amd64-freebsd/*.stderr.diff
351857 confusing error message about valid command line option
444110 priv/guest_ppc_toIR.c:36198:31: warning: duplicated 'if' condition.
459476 vgdb: allow address reuse to avoid "address already in use" errorsuse" errors
+462830 WARNING: unhandled amd64-freebsd syscall: 474
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
DECL_TEMPLATE(freebsd, sys_thr_set_name) // 464
DECL_TEMPLATE(freebsd, sys_aio_fsync) // 465
DECL_TEMPLATE(freebsd, sys_rtprio_thread) // 466
+DECL_TEMPLATE(freebsd, sys_sctp_generic_sendmsg) // 472
+DECL_TEMPLATE(freebsd, sys_sctp_generic_recvmsg) // 474
DECL_TEMPLATE(freebsd, sys_pread) // 475
DECL_TEMPLATE(freebsd, sys_pwrite) // 476
DECL_TEMPLATE(freebsd, sys_mmap) // 477
extern void
ML_(notify_core_and_tool_of_mprotect) ( Addr a, SizeT len, Int prot );
+extern void
+ML_(pre_mem_read_sockaddr) ( ThreadId tid, const HChar *description,
+ struct vki_sockaddr *sa, UInt salen );
extern void
ML_(buf_and_len_pre_check) ( ThreadId tid, Addr buf_p, Addr buflen_p,
const HChar* buf_s, const HChar* buflen_s );
PRINT("sys_preadv ( %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %"
FMT_REGWORD "d, %" FMT_REGWORD "d )", SARG1, ARG2, SARG3, SARG4);
PRE_REG_READ4(ssize_t, "preadv",
- int, fd, const struct iovec *, iovr,
+ int, fd, const struct iovec *, iov,
int, iovcnt, vki_off_t, offset);
if (!ML_(fd_allowed)(ARG1, "preadv", tid, False)) {
SET_STATUS_Failure( VKI_EBADF );
} else {
- if ((Int)ARG3 >= 0)
+ if ((Int)ARG3 > 0)
PRE_MEM_READ( "preadv(iov)", ARG2, ARG3 * sizeof(struct vki_iovec) );
+ // @todo PJF improve this like readv
if (ML_(safe_to_deref)((struct vki_iovec *)ARG2, ARG3 * sizeof(struct vki_iovec))) {
vec = (struct vki_iovec *)(Addr)ARG2;
for (i = 0; i < (Int)ARG3; i++)
// int sctp_peeloff(int s, sctp_assoc_t id);
// @todo
+
// SYS_sctp_generic_sendmsg 472
// int sctp_generic_sendmsg(int s, void *msg, int msglen, struct sockaddr *to,
// socklen_t len, struct sctp_sndrcvinfo *sinfo, int flags);
-// @tdo
+//
+// Not called directly from libc
+PRE(sys_sctp_generic_sendmsg)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_sctp_generic_sendmsg ( %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %" FMT_REGWORD "d )",SARG1,ARG2,ARG3,ARG4,SARG5,ARG6,SARG7);
+ PRE_REG_READ7(ssize_t, "sctp_generic_sendmsg",
+ int, s, void *, msg, int, msglen,
+ struct sockaddr *, to, socklen_t, len,
+ struct sctp_sndrcvinfo *, sinfo, int, flags);
+
+ PRE_MEM_READ( "sctp_generic_sendmsg(msg)", ARG2, ARG3);
+ ML_(pre_mem_read_sockaddr) (tid, "sctp_generic_sendmsg(to)", (struct vki_sockaddr *)ARG4, ARG5);
+
+ if (ARG6 != (Addr)NULL)
+ PRE_MEM_READ( "sctp_generic_sendmsg(sinfo)", ARG6, sizeof(struct vki_sctp_sndrcvinfo));
+}
// SYS_sctp_generic_sendmsg_iov 473
// int sctp_generic_sendmsg_iov(int s, struct iovec *iov, int iovlen,
// int sctp_generic_recvmsg(int s, struct iovec *iov, int iovlen,
// struct sockaddr *from, socklen_t *fromlen,
// struct sctp_sndrcvinfo *sinfo, int *msgflags);
-// @todo
+//
+// Not called directly from libc
+PRE(sys_sctp_generic_recvmsg)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_sctp_generic_recvmsg ( %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",SARG1,ARG2,SARG3,ARG4,ARG5,ARG6,ARG7);
+ PRE_REG_READ7(ssize_t, "sctp_generic_recvmsg",
+ int, s, struct iovec *, iov, int, iovlen,
+ struct sockaddr *, from, socklen_t *, fromlen,
+ struct sctp_sndrcvinfo *, sinfo, int *, msgflags);
+
+ // in the sctp_recvmsg libc wrapper this is always 1
+ if ((Int)ARG3 > 0) {
+ PRE_MEM_READ( "sctp_generic_recvmsg(iov)", ARG2, ARG3 * sizeof(struct vki_iovec) );
+ }
+ if (ML_(safe_to_deref)((const void*)ARG2, ARG3 * sizeof(struct vki_iovec))) {
+ struct vki_iovec* iovec = (struct vki_iovec*)ARG2;
+ PRE_MEM_WRITE("sctp_generic_recvmsg(iov.iov_base)", (Addr)iovec->iov_base, iovec->iov_len);
+ }
+
+ if (ARG4 != (Addr)NULL)
+ ML_(buf_and_len_pre_check) (tid, ARG4, ARG5,
+ "sctp_generic_recvmsg(from)",
+ "sctp_generic_recvmsg(fromlen_in)");
+
+ if (ARG6 != (Addr)NULL)
+ PRE_MEM_WRITE("sctp_generic_recvmsg(sinfo)", ARG6, sizeof(struct vki_sctp_sndrcvinfo));
+
+ if (ARG7 != (Addr)NULL)
+ PRE_MEM_WRITE("sctp_generic_recvmsg(msgflags)", ARG7, sizeof(int));
+}
+
+POST(sys_sctp_generic_recvmsg)
+{
+ vg_assert(SUCCESS);
+ struct vki_iovec* iovec = (struct vki_iovec*)ARG2;
+ POST_MEM_WRITE((Addr)iovec->iov_base, iovec->iov_len);
+
+ POST_MEM_WRITE( ARG2, ARG3*sizeof(struct vki_iovec) );
+
+ if (ARG4 != (Addr)NULL)
+ ML_(buf_and_len_post_check) (tid, VG_(mk_SysRes_Success)(RES), ARG4, ARG5,
+ "sctp_generic_recvmsg(fromlen_out)");
+
+ if (ARG6 != (Addr)NULL)
+ POST_MEM_WRITE(ARG6, sizeof(struct vki_sctp_sndrcvinfo));
+
+ if (ARG7 != (Addr)NULL)
+ POST_MEM_WRITE(ARG7, sizeof(int));
+}
// SYS_pread 475
// x86/amd64
BSDXY(__NR_rtprio_thread, sys_rtprio_thread), // 466
// unimpl sctp_peeloff 471
-
- // unimpl sctp_generic_sendmsg 472
+ BSDX_(__NR_sctp_generic_sendmsg, sys_sctp_generic_sendmsg), // 472
// unimpl sctp_generic_sendmsg_iov 473
- // unimpl sctp_generic_recvmsg 474
+ BSDXY(__NR_sctp_generic_recvmsg, sys_sctp_generic_recvmsg), // 474
BSDXY(__NR_pread, sys_pread), // 475
BSDX_(__NR_pwrite, sys_pwrite), // 476
}
/* GrP kernel ignores sa_len (at least on Darwin); this checks the rest */
-static
-void pre_mem_read_sockaddr ( ThreadId tid,
- const HChar *description,
- struct vki_sockaddr *sa, UInt salen )
+void ML_(pre_mem_read_sockaddr) ( ThreadId tid,
+ const HChar *description,
+ struct vki_sockaddr *sa, UInt salen )
{
HChar outmsg[VG_(strlen)( description ) + 30]; // large enough
struct vki_sockaddr_un* saun = (struct vki_sockaddr_un *)sa;
{
/* int bind(int sockfd, struct sockaddr *my_addr,
int addrlen); */
- pre_mem_read_sockaddr(
+ ML_(pre_mem_read_sockaddr) (
tid, "socketcall.bind(my_addr.%s)",
(struct vki_sockaddr *) arg1, arg2
);
PRE_MEM_READ( "socketcall.sendto(msg)",
arg1, /* msg */
arg2 /* len */ );
- pre_mem_read_sockaddr(
+ ML_(pre_mem_read_sockaddr) (
tid, "socketcall.sendto(to.%s)",
(struct vki_sockaddr *) arg4, arg5
);
{
/* int connect(int sockfd,
struct sockaddr *serv_addr, int addrlen ); */
- pre_mem_read_sockaddr( tid,
+ ML_(pre_mem_read_sockaddr) ( tid,
"socketcall.connect(serv_addr.%s)",
(struct vki_sockaddr *) arg1, arg2);
}
PRINT("sys_preadv ( %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %"
FMT_REGWORD "d, %llu )", SARG1, ARG2, SARG3, MERGE64(ARG4,ARG5));
PRE_REG_READ5(ssize_t, "preadv",
- int, fd, const struct iovec *, iovr,
+ int, fd, const struct iovec *, iov,
int, iovcnt, vki_uint32_t, MERGE64_FIRST(offset),
vki_uint32_t, MERGE64_SECOND(offset));
if (!ML_(fd_allowed)(ARG1, "preadv", tid, False)) {
SET_STATUS_Failure( VKI_EBADF );
} else {
- if ((Int)ARG3 >= 0)
+ if ((Int)ARG3 > 0)
PRE_MEM_READ( "preadv(iov)", ARG2, ARG3 * sizeof(struct vki_iovec) );
if (ML_(safe_to_deref)((struct vki_iovec *)ARG2, ARG3 * sizeof(struct vki_iovec))) {
vki_uint32_t sin6_scope_id; /* scope id (new in RFC2553) */
};
+//----------------------------------------------------------------------
+// From netinet/sctp_uio.h
+//----------------------------------------------------------------------
+#define VKI_SCTP_ALIGN_RESV_PAD 92
+
+typedef vki_uint32_t vki_sctp_assoc_t;
+
+struct vki_sctp_sndrcvinfo {
+ vki_uint16_t sinfo_stream;
+ vki_uint16_t sinfo_ssn;
+ vki_uint16_t sinfo_flags;
+ vki_uint32_t sinfo_ppid;
+ vki_uint32_t sinfo_context;
+ vki_uint32_t sinfo_timetolive;
+ vki_uint32_t sinfo_tsn;
+ vki_uint32_t sinfo_cumtsn;
+ vki_sctp_assoc_t sinfo_assoc_id;
+ vki_uint16_t sinfo_keynumber;
+ vki_uint16_t sinfo_keynumber_valid;
+ vki_uint8_t __reserve_pad[VKI_SCTP_ALIGN_RESV_PAD];
+};
+
//----------------------------------------------------------------------
// From sys/un.h
//----------------------------------------------------------------------
errno_aligned_allocs.stderr.exp \
setproctitle.vgtest \
setproctitle.stderr.exp \
- setproctitle.stdout.exp
+ setproctitle.stdout.exp \
+ sctp.vgtest \
+ sctp.stderr.exp \
+ sctp.stdout.exp \
+ sctp2.vgtest \
+ sctp2.stderr.exp \
+ sctp2.stdout.exp
check_PROGRAMS = \
statfs pdfork_pdkill getfsstat inlinfo inlinfo_nested.so extattr \
linkat scalar_fork scalar_thr_exit scalar_abort2 scalar_pdfork \
scalar_vfork stat file_locking_wait6 utimens access chmod_chown \
misc get_set_context utimes static_allocs fexecve errno_aligned_allocs \
- setproctitle
+ setproctitle sctp sctp2
AM_CFLAGS += $(AM_FLAG_M3264_PRI)
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
// sctp_peeloff 471
// sctp_generic_sendmsg 472
+ GO(SYS_sctp_generic_sendmsg, "7s 1m");
+ SY(SYS_sctp_generic_sendmsg, x0+1, x0+2, x0+3, x0+4, x0+5, x0+6, x0+7); FAIL;
// sctp_generic_sendmsg_iov 473
// sctp_generic_recvmsg 474
+ GO(SYS_sctp_generic_recvmsg, "7s 4m");
+ SY(SYS_sctp_generic_recvmsg, x0+1, x0+2, x0+300, x0+4, x0+5, x0+6, x0+7); FAIL;
+ {
+ socklen_t fromlen = 64;
+ struct iovec iov;
+ GO(SYS_sctp_generic_recvmsg, "6s 4m");
+ SY(SYS_sctp_generic_recvmsg, x0+1, x0+2, x0+300, x0+4, &fromlen, x0+6, x0+7); FAIL;
+
+ iov.iov_base = x0+8;
+ iov.iov_len = x0+9;
+
+ GO(SYS_sctp_generic_recvmsg, "6s 6m");
+ SY(SYS_sctp_generic_recvmsg, x0+1, &iov, 1, x0+4, x0+5, x0+6, x0+7); FAIL;
+ }
/* SYS_pread 475 */
GO(SYS_pread, "4s 1m");
Syscall param preadv(fd) contains uninitialised byte(s)
...
-Syscall param preadv(iovr) contains uninitialised byte(s)
+Syscall param preadv(iov) contains uninitialised byte(s)
...
Syscall param preadv(iovcnt) contains uninitialised byte(s)
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+---------------------------------------------------------
+472:SYS_sctp_generic_sendmsg 7s 1m
+---------------------------------------------------------
+Syscall param sctp_generic_sendmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(msg) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(msglen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(to) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(len) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(flags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 7s 4m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iovlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(fromlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(fromlen_in) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 6s 4m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iovlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(from) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 6s 6m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(fromlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param sctp_generic_recvmsg(iov.iov_base) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(fromlen_in) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
---------------------------------------------------------
475: SYS_pread 4s 1m
---------------------------------------------------------
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+---------------------------------------------------------
+472:SYS_sctp_generic_sendmsg 7s 1m
+---------------------------------------------------------
+Syscall param sctp_generic_sendmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(msg) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(msglen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(to) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(len) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(flags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_sendmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 7s 4m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iovlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(fromlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(fromlen_in) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 6s 4m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iovlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(from) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+474:SYS_sctp_generic_recvmsg 6s 6m
+---------------------------------------------------------
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(from) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(fromlen) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(sinfo) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(msgflags) contains uninitialised byte(s)
+ ...
+
+Syscall param sctp_generic_recvmsg(iov) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param sctp_generic_recvmsg(iov.iov_base) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(fromlen_in) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
---------------------------------------------------------
475: SYS_pread 4s 1m
---------------------------------------------------------
--- /dev/null
+/* This is based on /src/tools/test/stress2/misc/sctp.sh
+ * but it uses fork and the server exits rather than
+ * loops indefinitely */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <libgen.h>
+#include <netinet/in.h>
+#include <netinet/sctp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int my_port_num = 62324;
+
+static void
+die(const char *s)
+{
+ perror(s);
+ exit(1);
+}
+
+static void
+server(void)
+{
+ struct sctp_sndrcvinfo sndrcvinfo;
+ struct sockaddr_in servaddr = {
+ .sin_family = AF_INET,
+ .sin_addr.s_addr = htonl(INADDR_ANY),
+ .sin_port = htons(my_port_num),
+ };
+ struct sctp_initmsg initmsg = {
+ .sinit_num_ostreams = 5,
+ .sinit_max_instreams = 5,
+ .sinit_max_attempts = 4,
+ };
+ int listen_fd, conn_fd, flags, ret, in;
+
+ listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
+ if (listen_fd < 0)
+ die("socket");
+
+ ret = bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
+ if (ret < 0)
+ die("bind");
+
+ ret = setsockopt(listen_fd, IPPROTO_SCTP, SCTP_INITMSG, &initmsg,
+ sizeof(initmsg));
+ if (ret < 0)
+ die("setsockopt");
+
+ ret = listen(listen_fd, initmsg.sinit_max_instreams);
+ if (ret < 0)
+ die("listen");
+
+ char buffer[1024];
+
+ printf("Waiting for connection\n");
+ fflush(stdout);
+
+ conn_fd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
+ if(conn_fd < 0)
+ die("accept()");
+
+ printf("New client connected\n");
+ fflush(stdout);
+
+ /* Note that flags is uninitialized here */
+ in = sctp_recvmsg(conn_fd, buffer, sizeof(buffer), NULL, 0,
+ &sndrcvinfo, &flags);
+ if (in > 0) {
+ printf("Received data: %s\n", buffer);
+ fflush(stdout);
+ }
+
+ close(conn_fd);
+}
+
+static void
+client(void)
+{
+ struct sockaddr_in servaddr = {
+ .sin_family = AF_INET,
+ .sin_port = htons(my_port_num),
+ .sin_addr.s_addr = inet_addr("127.0.0.1"),
+ };
+ int conn_fd, ret;
+ const char *msg = "Hello, Server!";
+
+ conn_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
+ if (conn_fd < 0)
+ die("socket()");
+
+ ret = connect(conn_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
+ if (ret < 0)
+ die("connect()");
+
+ ret = sctp_sendmsg(conn_fd, (void *) msg, strlen(msg) + 1, NULL, 0, 0, 0, 0, 0, 0 );
+ if (ret < 0)
+ die("sctp_sendmsg");
+
+ close(conn_fd);
+}
+
+int
+main(int argc __unused, char *argv[])
+{
+ switch (fork())
+ {
+ case 0:
+ sleep(1);
+ client();
+ exit(EXIT_SUCCESS);
+ default:
+ server();
+ exit(EXIT_SUCCESS);
+ case -1:
+ exit(EXIT_FAILURE);
+ }
+}
--- /dev/null
+Waiting for connection
+New client connected
+Received data: Hello, Server!
--- /dev/null
+prereq: kldstat -m sctp > /dev/null
+vgopts: -q --trace-children=yes
+prog: sctp
--- /dev/null
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <libgen.h>
+#include <netinet/in.h>
+#include <netinet/sctp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "../../memcheck.h"
+
+int main()
+{
+ int conn_fd;
+ char msg[10];
+ char buffer[10];
+ struct sockaddr to;
+ socklen_t tolen = sizeof (struct sockaddr);
+ uint32_t ppid;
+ uint32_t flags;
+ uint16_t stream_no;
+ uint32_t timetolive;
+ uint32_t context;
+ struct sctp_sndrcvinfo sinfo;
+ int rflags;
+ size_t undef_size = 10U;
+
+ VALGRIND_MAKE_MEM_UNDEFINED(&undef_size, sizeof(undef_size));
+ VALGRIND_MAKE_MEM_UNDEFINED(&tolen, sizeof(tolen));
+
+ sctp_sendmsg(conn_fd, msg, undef_size, &to, tolen, ppid, flags, stream_no, timetolive, context);
+
+ VALGRIND_MAKE_MEM_NOACCESS(&to, sizeof(to));
+ VALGRIND_MAKE_MEM_UNDEFINED(&tolen, sizeof(tolen));
+ VALGRIND_MAKE_MEM_NOACCESS(&sinfo, sizeof(sinfo));
+ VALGRIND_MAKE_MEM_NOACCESS(&rflags, sizeof(rflags));
+
+ sctp_recvmsg(conn_fd, buffer, undef_size, &to, &tolen, &sinfo, &rflags);
+}
--- /dev/null
+
+Syscall param sctp_generic_sendmsg(s) contains uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+
+Syscall param sctp_generic_sendmsg(msglen) contains uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+
+Syscall param sctp_generic_sendmsg(len) contains uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+
+Syscall param sctp_generic_sendmsg(msg) points to uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+Syscall param sctp_generic_sendmsg(to) points to uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+Syscall param sctp_generic_sendmsg(sinfo) points to uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:34)
+ Address 0x........ is on thread 1's stack
+ in frame #1, created by sctp_sendmsg (???:)
+
+Syscall param sctp_generic_recvmsg(s) contains uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+
+Syscall param sctp_generic_recvmsg(iov) points to uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+ Address 0x........ is on thread 1's stack
+ in frame #1, created by sctp_recvmsg (???:)
+
+Syscall param sctp_generic_recvmsg(fromlen_in) points to uninitialised byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+Syscall param sctp_generic_recvmsg(from) points to unaddressable byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+Syscall param sctp_generic_recvmsg(sinfo) points to unaddressable byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+Syscall param sctp_generic_recvmsg(msgflags) points to unaddressable byte(s)
+ ...
+ by 0x........: main (sctp2.c:41)
+ Address 0x........ is on thread 1's stack
+ in frame #2, created by main (sctp2.c:16)
+
+
+HEAP SUMMARY:
+ in use at exit: 0 bytes in 0 blocks
+ total heap usage: 0 allocs, 0 frees, 0 bytes allocated
+
+For a detailed leak analysis, rerun with: --leak-check=full
+
+Use --track-origins=yes to see where uninitialised values come from
+For lists of detected and suppressed errors, rerun with: -s
+ERROR SUMMARY: 14 errors from 12 contexts (suppressed: 0 from 0)
--- /dev/null
+prereq: kldstat -m sctp > /dev/null
+prog: sctp2