From patchwork Tue Feb 27 23:22:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soheil Hassas Yeganeh X-Patchwork-Id: 878861 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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZTvFpP2x"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zrZVc01NBz9s0q for ; Wed, 28 Feb 2018 10:22:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752368AbeB0XWp (ORCPT ); Tue, 27 Feb 2018 18:22:45 -0500 Received: from mail-qt0-f194.google.com ([209.85.216.194]:41124 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752099AbeB0XWn (ORCPT ); Tue, 27 Feb 2018 18:22:43 -0500 Received: by mail-qt0-f194.google.com with SMTP id j4so729270qth.8 for ; Tue, 27 Feb 2018 15:22:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=s+kQNCxe/vXaVh+ecyQc3LmixmiNqdRBUGnw7NIeNBk=; b=ZTvFpP2xlOGPLk66T95PyfHc/QEytuQHShkXh7ik5f3wyawzR8LNzlAUeLaihFHZQZ 2S9gn2CYaFwdTh0SIEoAL96CbPdRMdEa4uKzpaVKjUwKKg5RbIMFfK5qw7zjc2OqGZe1 acWXNLaStEJcOi7gYn8R/Oym6GdqYFJZraMdwpG6laOnrCOrZ17Kj/XsVvYNi4dpaA5i JKXF4/OSRst17+eopQwLqcANkUgicBibmQRlz70OijohX5qPzFdMk2D7nRCymKEkgUo9 SBJ3GANkLb8iALoq9hNUFtIpjsTCjMma9a500t8uRB5FlQEkH/K5OfOggQMSjxtApU/9 BcSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=s+kQNCxe/vXaVh+ecyQc3LmixmiNqdRBUGnw7NIeNBk=; b=IaDY3H08tQLHfHlu3hkYloUEu/NOPu4nemcIk7Aes0LmbXVvVbGEBOxhd0wpUHM1/x sJU2CCLH/8GmH9s4ViehHwD11rCcRI4Vy+Hf0rk+sG9pU2KDgG/UDdNan+mdGjw7RWwJ szgZctDF9yAB783OHQwgt0HZ2Qoo0rUB9KFmpnWv7leSOuZM4XdXZLBqRgeFxPBYvBM+ 5om4nCD4O5I3gPcIvrgC1u/oxnE5EPGJX7DsE5WtyWFS1z8USPePUx2mVWZj//5SUO0U mYbBvwHm7eBQvOGdfT1Tee/t6n2KL01+Pv+SLHsCX8KyotWyequd7xIAv657aQ6lLPmH xCGw== X-Gm-Message-State: APf1xPDxq6+WnHp7hSKeFObQKEsWRaNjlN7QppykPdT+7tnQvJInoaeX AZvXlc/jR5r4SXYsRg6lTXe3LdCz X-Google-Smtp-Source: AG47ELtdmM5p94YyG9Qdv3WqLuikAuTot1fONZ0adATLQfezvJUqSsDnsifgcX2HSHRKE6U1J+BJTg== X-Received: by 10.237.45.129 with SMTP id i1mr26991315qtd.46.1519773762853; Tue, 27 Feb 2018 15:22:42 -0800 (PST) Received: from z.nyc.corp.google.com ([2620:0:1003:315:9c67:ffa0:44c0:d273]) by smtp.gmail.com with ESMTPSA id t68sm202543qkf.62.2018.02.27.15.22.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Feb 2018 15:22:42 -0800 (PST) From: Soheil Hassas Yeganeh To: davem@davemloft.net, netdev@vger.kernel.org Cc: edumazet@google.com, willemb@google.com, Soheil Hassas Yeganeh Subject: [PATCH net-next] socket: skip checking sk_err for recvmmsg(MSG_ERRQUEUE) Date: Tue, 27 Feb 2018 18:22:40 -0500 Message-Id: <20180227232240.145396-1-soheil.kdev@gmail.com> X-Mailer: git-send-email 2.16.2.395.g2e18187dfd-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Soheil Hassas Yeganeh recvmmsg does not call ___sys_recvmsg when sk_err is set. That is fine for normal reads but, for MSG_ERRQUEUE, recvmmsg should always call ___sys_recvmsg regardless of sk->sk_err to be able to clear error queue. Otherwise, users are not able to drain the error queue using recvmmsg. Signed-off-by: Soheil Hassas Yeganeh Reviewed-by: Eric Dumazet Signed-off-by: Willem de Bruijn --- net/socket.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/socket.c b/net/socket.c index 645d32b4872c..d9a1ac233b35 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2289,10 +2289,12 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, if (!sock) return err; - err = sock_error(sock->sk); - if (err) { - datagrams = err; - goto out_put; + if (likely(!(flags & MSG_ERRQUEUE))) { + err = sock_error(sock->sk); + if (err) { + datagrams = err; + goto out_put; + } } entry = mmsg;