From patchwork Wed Jan 17 12:19:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sowmini Varadhan X-Patchwork-Id: 862252 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.b="mkcm3aiL"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zM68J0wbSz9sNV for ; Wed, 17 Jan 2018 23:38:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753023AbeAQMha (ORCPT ); Wed, 17 Jan 2018 07:37:30 -0500 Received: from userp2120.oracle.com ([156.151.31.85]:45292 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752999AbeAQMhW (ORCPT ); Wed, 17 Jan 2018 07:37:22 -0500 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w0HCbH15078952; Wed, 17 Jan 2018 12:37:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : in-reply-to : references; s=corp-2017-10-26; bh=WQOwEzP8EimSGc0T9xNWPK2JwGZLOd4mRRVHJ7zOVjo=; b=mkcm3aiLW+UT0ovaanWF8sNUKcnd4MQRmY0g93uxMjPD9IMh33A8yCegJ9J4bEX5GjZ4 EjCBDMQQ6yPnZN9A7PiHlaAo6lv27KRud4SvyT+Ux8nSbhWpLQt+W9PamW2FlkRRLndf zJHBrbVwaEd6D+zXvLD59IHs8ytw6dllItyhWxgfihFfvFO9hT7f2lDgUvs140uExSmV 0oKrkbow5OrD8LJkCz3BqFe4jHy9FdzdHODgnejLfW3bCYP1GNZ6mXlrHV4q3ZcW786y 0JF1kVYXD/qvhliaPYxEK/YF89/u3tnum2hJFOMKYaBzNWz9DYdmqdwoyxdu7DxBDqNw GQ== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp2120.oracle.com with ESMTP id 2fj44ngkut-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Jan 2018 12:37:17 +0000 Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id w0HCbFY4024794 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 17 Jan 2018 12:37:15 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id w0HCbE50022530; Wed, 17 Jan 2018 12:37:14 GMT Received: from ipftiger1.us.oracle.com (/10.208.179.35) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 17 Jan 2018 04:37:14 -0800 From: Sowmini Varadhan To: netdev@vger.kernel.org, willemdebruijn.kernel@gmail.com Cc: davem@davemloft.net, rds-devel@oss.oracle.com, sowmini.varadhan@oracle.com, santosh.shilimkar@oracle.com Subject: [PATCH RFC net-next 1/6] sock: MSG_PEEK support for sk_error_queue Date: Wed, 17 Jan 2018 04:19:59 -0800 Message-Id: <05d060dc1169649d84c37ad51b0f8fe54a2a3185.1516147540.git.sowmini.varadhan@oracle.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8776 signatures=668653 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=2 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1801170183 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Allow the application the ability to use MSG_PEEK with sk_error_queue so that it can peek and re-read message in cases where MSG_TRUNC may be encountered. Signed-off-by: Sowmini Varadhan --- drivers/net/tun.c | 2 +- include/net/sock.h | 2 +- net/core/sock.c | 7 +++++-- net/packet/af_packet.c | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 2fba3be..cfd0e0f 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2313,7 +2313,7 @@ static int tun_recvmsg(struct socket *sock, struct msghdr *m, size_t total_len, } if (flags & MSG_ERRQUEUE) { ret = sock_recv_errqueue(sock->sk, m, total_len, - SOL_PACKET, TUN_TX_TIMESTAMP); + SOL_PACKET, TUN_TX_TIMESTAMP, flags); goto out; } ret = tun_do_read(tun, tfile, &m->msg_iter, flags & MSG_DONTWAIT, ptr); diff --git a/include/net/sock.h b/include/net/sock.h index 73b7830..f0b6990 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2343,7 +2343,7 @@ static inline bool sk_listener(const struct sock *sk) int sock_get_timestamp(struct sock *, struct timeval __user *); int sock_get_timestampns(struct sock *, struct timespec __user *); int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, int level, - int type); + int type, int flags); bool sk_ns_capable(const struct sock *sk, struct user_namespace *user_ns, int cap); diff --git a/net/core/sock.c b/net/core/sock.c index 72d14b2..4f52677 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2887,7 +2887,7 @@ void sock_enable_timestamp(struct sock *sk, int flag) } int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, - int level, int type) + int level, int type, int flags) { struct sock_exterr_skb *serr; struct sk_buff *skb; @@ -2916,7 +2916,10 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, err = copied; out_free_skb: - kfree_skb(skb); + if (likely(!(flags & MSG_PEEK))) + kfree_skb(skb); + else + skb_queue_head(&sk->sk_error_queue, skb); out: return err; } diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index ee7aa0b..4314f31 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3294,7 +3294,8 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, if (flags & MSG_ERRQUEUE) { err = sock_recv_errqueue(sk, msg, len, - SOL_PACKET, PACKET_TX_TIMESTAMP); + SOL_PACKET, PACKET_TX_TIMESTAMP, + flags); goto out; }