From patchwork Thu Apr 25 13:47:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 239511 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 1B8AA2C00CB for ; Thu, 25 Apr 2013 23:48:04 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932430Ab3DYNrb (ORCPT ); Thu, 25 Apr 2013 09:47:31 -0400 Received: from mail-qe0-f48.google.com ([209.85.128.48]:41339 "EHLO mail-qe0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932307Ab3DYNra (ORCPT ); Thu, 25 Apr 2013 09:47:30 -0400 Received: by mail-qe0-f48.google.com with SMTP id 9so2007434qea.35 for ; Thu, 25 Apr 2013 06:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer; bh=YsUvGAgiFNUb0d2oc0N9vKkylx2cvuUqtG/44jDmR6M=; b=eGQtFy7YCjjErEj8rlNK03RXHF55N49GO+4QSWGJbxw/MNHSvLKHEA1vf97+JQp2iT GAyUbndcPj6idegdugZY2YFzvEsvZA5EFPY+de8ib2riqbhEAc+b6JPvMxe+S9V+iYNE pagpSnGtvnWVd8mKsD3YFQD1X8b0JXAxfn038DEfs6sgj23Gqr9QxV8P1We7yurUKeKl KO6zr2pgdT6wbF9/Rd4jwd35MH/+B1arlMl56HUgFeBLjJg5jrC/4ze2291Ec8i2BcA6 +i8TZa/BHIvWmsWah25Ak9FoTVwu7KQxU1h44eFaDZxZsnVUQJVodD0k18RYUdfERn+o X5Sg== X-Received: by 10.224.23.10 with SMTP id p10mr35648288qab.39.1366897649370; Thu, 25 Apr 2013 06:47:29 -0700 (PDT) Received: from d2.synalogic.ca (modemcable062.27-82-70.mc.videotron.ca. [70.82.27.62]) by mx.google.com with ESMTPSA id kf2sm9973066qeb.4.2013.04.25.06.47.28 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Apr 2013 06:47:28 -0700 (PDT) From: Benjamin Poirier To: "David S. Miller" , Eric Dumazet , Pavel Emelyanov Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net 1/3] unix/dgram: peek beyond 0-sized skbs Date: Thu, 25 Apr 2013 09:47:16 -0400 Message-Id: <1366897638-21882-1-git-send-email-bpoirier@suse.de> X-Mailer: git-send-email 1.7.10.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org "77c1090 net: fix infinite loop in __skb_recv_datagram()" (v3.8) introduced a regression: After that commit, recv can no longer peek beyond a 0-sized skb in the queue. __skb_recv_datagram() instead stops at the first skb with len == 0 and results in the system call failing with -EFAULT via skb_copy_datagram_iovec(). Signed-off-by: Benjamin Poirier --- net/core/datagram.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/core/datagram.c b/net/core/datagram.c index 368f9c3..02398ae 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -187,7 +187,7 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags, skb_queue_walk(queue, skb) { *peeked = skb->peeked; if (flags & MSG_PEEK) { - if (*off >= skb->len && skb->len) { + if (*off >= skb->len && (skb->len || *off)) { *off -= skb->len; continue; }