From patchwork Wed Mar 14 14:54:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Palethorpe X-Patchwork-Id: 885834 X-Patchwork-Delegate: petr.vorel@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.com Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 401ZWv4S3Gz9sTD for ; Thu, 15 Mar 2018 01:55:07 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id EECB73E76DE for ; Wed, 14 Mar 2018 15:55:04 +0100 (CET) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [217.194.8.4]) by picard.linux.it (Postfix) with ESMTP id AC2553E6DE7 for ; Wed, 14 Mar 2018 15:55:02 +0100 (CET) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by in-4.smtp.seeweb.it (Postfix) with ESMTPS id 4096F1001BDA for ; Wed, 14 Mar 2018 15:54:59 +0100 (CET) Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 82F09AE0C for ; Wed, 14 Mar 2018 14:54:59 +0000 (UTC) From: Richard Palethorpe To: ltp@lists.linux.it Date: Wed, 14 Mar 2018 15:54:26 +0100 Message-Id: <20180314145427.2738-1-rpalethorpe@suse.com> X-Mailer: git-send-email 2.16.2 X-Virus-Scanned: clamav-milter 0.99.2 at in-4.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-0.0 required=7.0 tests=SPF_PASS autolearn=disabled version=3.4.0 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on in-4.smtp.seeweb.it Cc: Richard Palethorpe , nstange@suse.de Subject: [LTP] [PATCH 1/2] lib: Add safe_recvmsg X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.18 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Identical to safe_sendmsg except *msg is not const. Signed-off-by: Richard Palethorpe Acked-by: Petr Vorel --- 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)