Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1254804

[PATCH 4.1 16/46] af_unix: return data from multiple SKBs on recv() with MSG_PEEK flag

From Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Newsgroups linux.kernel
Subject [PATCH 4.1 16/46] af_unix: return data from multiple SKBs on recv() with MSG_PEEK flag
Date 2015-10-23 20:10 +0200
Message-ID <qmOWT-DI-57@gated-at.bofh.it> (permalink)
References <qmONc-d5-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


4.1-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Aaron Conole <aconole@bytheb.org>

[ Upstream commit 9f389e35674f5b086edd70ed524ca0f287259725 ]

AF_UNIX sockets now return multiple skbs from recv() when MSG_PEEK flag
is set.

This is referenced in kernel bugzilla #12323 @
https://bugzilla.kernel.org/show_bug.cgi?id=12323

As described both in the BZ and lkml thread @
http://lkml.org/lkml/2008/1/8/444 calling recv() with MSG_PEEK on an
AF_UNIX socket only reads a single skb, where the desired effect is
to return as much skb data has been queued, until hitting the recv
buffer size (whichever comes first).

The modified MSG_PEEK path will now move to the next skb in the tree
and jump to the again: label, rather than following the natural loop
structure. This requires duplicating some of the loop head actions.

This was tested using the python socketpair python code attached to
the bugzilla issue.

Signed-off-by: Aaron Conole <aconole@bytheb.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/unix/af_unix.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2046,8 +2046,20 @@ again:
 			if (UNIXCB(skb).fp)
 				scm.fp = scm_fp_dup(UNIXCB(skb).fp);
 
-			sk_peek_offset_fwd(sk, chunk);
+			if (skip) {
+				sk_peek_offset_fwd(sk, chunk);
+				skip -= chunk;
+			}
 
+			if (UNIXCB(skb).fp)
+				break;
+
+			last = skb;
+			unix_state_lock(sk);
+			skb = skb_peek_next(skb, &sk->sk_receive_queue);
+			if (skb)
+				goto again;
+			unix_state_unlock(sk);
 			break;
 		}
 	} while (size);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 4.1 00/46] 4.1.12-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 05/46] inet: fix races in reqsk_queue_hash_req() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 06/46] net: add pfmemalloc check in sk_add_backlog() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 04/46] skbuff: Fix skb checksum partial check. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 02/46] l2tp: protect tunnel->del_work by ref_count Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 16/46] af_unix: return data from multiple SKBs on recv() with MSG_PEEK flag Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 30/46] i2c: designware-platdrv: enable RuntimePM before registering to the core Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 29/46] i2c: designware: Do not use parameters from ACPI on Dell Inspiron 7348 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 34/46] drm/radeon: attach tile property to mst connector Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 17/46] net/unix: fix logic about sk_peek_offset Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 32/46] drm/nouveau/fbcon: take runpm reference when userspace has an open fd Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 09/46] bpf: fix panic in SO_GET_FILTER with native ebpf programs Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 27/46] i2c: rcar: enable RuntimePM before registering to the core Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 31/46] workqueue: make sure delayed work run in local cpu Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
  [PATCH 4.1 39/46] sched/preempt: Fix cond_resched_lock() and cond_resched_softirq() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-23 20:10 +0200
    Re: [PATCH 4.1 39/46] sched/preempt: Fix cond_resched_lock() and  cond_resched_softirq() Thomas Backlund <backlund.thomas@gmail.com> - 2015-10-23 22:20 +0200
      Re: [PATCH 4.1 39/46] sched/preempt: Fix cond_resched_lock() and  cond_resched_softirq() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-24 01:30 +0200
  Re: [PATCH 4.1 00/46] 4.1.12-stable review Shuah Khan <shuahkh@osg.samsung.com> - 2015-10-23 22:40 +0200
    Re: [PATCH 4.1 00/46] 4.1.12-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-24 01:30 +0200
      Re: [PATCH 4.1 00/46] 4.1.12-stable review Guenter Roeck <linux@roeck-us.net> - 2015-10-24 03:20 +0200
  Re: [PATCH 4.1 00/46] 4.1.12-stable review Guenter Roeck <linux@roeck-us.net> - 2015-10-24 05:20 +0200
    Re: [PATCH 4.1 00/46] 4.1.12-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-10-24 15:30 +0200

csiph-web