Message ID | 20180314145427.2738-1-rpalethorpe@suse.com |
---|---|
State | Accepted |
Delegated to: | Petr Vorel |
Headers | show |
Series | [1/2] lib: Add safe_recvmsg | expand |
Hi, > Identical to safe_sendmsg except *msg is not const. > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > --- > include/safe_net_fn.h | 3 +++ > include/tst_safe_net.h | 3 +++ > lib/safe_net.c | 23 +++++++++++++++++++++++ > 3 files changed, 29 insertions(+) > diff --git a/include/safe_net_fn.h b/include/safe_net_fn.h > index 2a19be875..89e5bf0cc 100644 > --- a/include/safe_net_fn.h > +++ b/include/safe_net_fn.h > @@ -49,6 +49,9 @@ ssize_t safe_sendto(const char *file, const int lineno, char len_strict, > ssize_t safe_sendmsg(const char *file, const int lineno, size_t msg_len, > int sockfd, const struct msghdr *msg, int flags); > +ssize_t safe_recvmsg(const char *file, const int lineno, size_t msg_len, > + int sockfd, struct msghdr *msg, int flags); > + > int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), > int socket, const struct sockaddr *address, > socklen_t address_len); > diff --git a/include/tst_safe_net.h b/include/tst_safe_net.h > index 68e9f5cfb..d0c0a1dc5 100644 > --- a/include/tst_safe_net.h > +++ b/include/tst_safe_net.h > @@ -54,6 +54,9 @@ > #define SAFE_SENDMSG(msg_len, fd, msg, flags) \ > safe_sendmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) > +#define SAFE_RECVMSG(msg_len, fd, msg, flags) \ > + safe_recvmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) > + > #define SAFE_BIND(socket, address, address_len) \ > safe_bind(__FILE__, __LINE__, NULL, socket, address, \ > address_len) > diff --git a/lib/safe_net.c b/lib/safe_net.c > index 9ea9d2b42..5ad478795 100644 > --- a/lib/safe_net.c > +++ b/lib/safe_net.c > @@ -209,6 +209,29 @@ ssize_t safe_sendmsg(const char *file, const int lineno, size_t len, > return rval; > } > +ssize_t safe_recvmsg(const char *file, const int lineno, size_t len, > + int sockfd, struct msghdr *msg, int flags) > +{ > + ssize_t rval; > + > + rval = recvmsg(sockfd, msg, flags); > + > + if (rval == -1) { > + tst_brkm(TBROK | TERRNO, NULL, > + "%s:%d: recvmsg(%d, %p, %d) failed", > + file, lineno, sockfd, msg, flags); > + } > + > + if (len && (size_t)rval != len) { > + tst_brkm(TBROK, NULL, > + "%s:%d: recvmsg(%d, %p, %d) ret(%zd) != len(%zu)", > + file, lineno, sockfd, msg, flags, rval, len); > + } > + > + return rval; > + > +} > + > int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), > int socket, const struct sockaddr *address, > socklen_t address_len) Obviously correct :). Acked-by: Petr Vorel <pvorel@suse.cz> Kind regards, Petr
Hi, > > Identical to safe_sendmsg except *msg is not const. > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > > --- > > include/safe_net_fn.h | 3 +++ > > include/tst_safe_net.h | 3 +++ > > lib/safe_net.c | 23 +++++++++++++++++++++++ > > 3 files changed, 29 insertions(+) > > diff --git a/include/safe_net_fn.h b/include/safe_net_fn.h > > index 2a19be875..89e5bf0cc 100644 > > --- a/include/safe_net_fn.h > > +++ b/include/safe_net_fn.h > > @@ -49,6 +49,9 @@ ssize_t safe_sendto(const char *file, const int lineno, char len_strict, > > ssize_t safe_sendmsg(const char *file, const int lineno, size_t msg_len, > > int sockfd, const struct msghdr *msg, int flags); > > +ssize_t safe_recvmsg(const char *file, const int lineno, size_t msg_len, > > + int sockfd, struct msghdr *msg, int flags); > > + > > int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), > > int socket, const struct sockaddr *address, > > socklen_t address_len); > > diff --git a/include/tst_safe_net.h b/include/tst_safe_net.h > > index 68e9f5cfb..d0c0a1dc5 100644 > > --- a/include/tst_safe_net.h > > +++ b/include/tst_safe_net.h > > @@ -54,6 +54,9 @@ > > #define SAFE_SENDMSG(msg_len, fd, msg, flags) \ > > safe_sendmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) > > +#define SAFE_RECVMSG(msg_len, fd, msg, flags) \ > > + safe_recvmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) > > + > > #define SAFE_BIND(socket, address, address_len) \ > > safe_bind(__FILE__, __LINE__, NULL, socket, address, \ > > address_len) > > diff --git a/lib/safe_net.c b/lib/safe_net.c > > index 9ea9d2b42..5ad478795 100644 > > --- a/lib/safe_net.c > > +++ b/lib/safe_net.c > > @@ -209,6 +209,29 @@ ssize_t safe_sendmsg(const char *file, const int lineno, size_t len, > > return rval; > > } > > +ssize_t safe_recvmsg(const char *file, const int lineno, size_t len, > > + int sockfd, struct msghdr *msg, int flags) > > +{ > > + ssize_t rval; > > + > > + rval = recvmsg(sockfd, msg, flags); > > + > > + if (rval == -1) { > > + tst_brkm(TBROK | TERRNO, NULL, > > + "%s:%d: recvmsg(%d, %p, %d) failed", > > + file, lineno, sockfd, msg, flags); > > + } > > + > > + if (len && (size_t)rval != len) { > > + tst_brkm(TBROK, NULL, > > + "%s:%d: recvmsg(%d, %p, %d) ret(%zd) != len(%zu)", > > + file, lineno, sockfd, msg, flags, rval, len); > > + } > > + > > + return rval; > > + > > +} > > + > > int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), > > int socket, const struct sockaddr *address, > > socklen_t address_len) > Obviously correct :). > Acked-by: Petr Vorel <pvorel@suse.cz> Pushed, thanks! Kind regards, Petr
diff --git a/include/safe_net_fn.h b/include/safe_net_fn.h index 2a19be875..89e5bf0cc 100644 --- a/include/safe_net_fn.h +++ b/include/safe_net_fn.h @@ -49,6 +49,9 @@ ssize_t safe_sendto(const char *file, const int lineno, char len_strict, ssize_t safe_sendmsg(const char *file, const int lineno, size_t msg_len, int sockfd, const struct msghdr *msg, int flags); +ssize_t safe_recvmsg(const char *file, const int lineno, size_t msg_len, + int sockfd, struct msghdr *msg, int flags); + int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), int socket, const struct sockaddr *address, socklen_t address_len); diff --git a/include/tst_safe_net.h b/include/tst_safe_net.h index 68e9f5cfb..d0c0a1dc5 100644 --- a/include/tst_safe_net.h +++ b/include/tst_safe_net.h @@ -54,6 +54,9 @@ #define SAFE_SENDMSG(msg_len, fd, msg, flags) \ safe_sendmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) +#define SAFE_RECVMSG(msg_len, fd, msg, flags) \ + safe_recvmsg(__FILE__, __LINE__, msg_len, fd, msg, flags) + #define SAFE_BIND(socket, address, address_len) \ safe_bind(__FILE__, __LINE__, NULL, socket, address, \ address_len) diff --git a/lib/safe_net.c b/lib/safe_net.c index 9ea9d2b42..5ad478795 100644 --- a/lib/safe_net.c +++ b/lib/safe_net.c @@ -209,6 +209,29 @@ ssize_t safe_sendmsg(const char *file, const int lineno, size_t len, return rval; } +ssize_t safe_recvmsg(const char *file, const int lineno, size_t len, + int sockfd, struct msghdr *msg, int flags) +{ + ssize_t rval; + + rval = recvmsg(sockfd, msg, flags); + + if (rval == -1) { + tst_brkm(TBROK | TERRNO, NULL, + "%s:%d: recvmsg(%d, %p, %d) failed", + file, lineno, sockfd, msg, flags); + } + + if (len && (size_t)rval != len) { + tst_brkm(TBROK, NULL, + "%s:%d: recvmsg(%d, %p, %d) ret(%zd) != len(%zu)", + file, lineno, sockfd, msg, flags, rval, len); + } + + return rval; + +} + int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void), int socket, const struct sockaddr *address, socklen_t address_len)
Identical to safe_sendmsg except *msg is not const. Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> --- include/safe_net_fn.h | 3 +++ include/tst_safe_net.h | 3 +++ lib/safe_net.c | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+)