lkml.org 
[lkml]   [2018]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.17 31/66] sock: fix sg page frag coalescing in sk_alloc_sg
    Date
    4.17-stable review patch.  If anyone has any objections, please let me know.

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

    From: Daniel Borkmann <daniel@iogearbox.net>

    [ Upstream commit 144fe2bfd236dc814eae587aea7e2af03dbdd755 ]

    Current sg coalescing logic in sk_alloc_sg() (latter is used by tls and
    sockmap) is not quite correct in that we do fetch the previous sg entry,
    however the subsequent check whether the refilled page frag from the
    socket is still the same as from the last entry with prior offset and
    length matching the start of the current buffer is comparing always the
    first sg list entry instead of the prior one.

    Fixes: 3c4d7559159b ("tls: kernel TLS support")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Dave Watson <davejwatson@fb.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/core/sock.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/net/core/sock.c
    +++ b/net/core/sock.c
    @@ -2270,9 +2270,9 @@ int sk_alloc_sg(struct sock *sk, int len
    pfrag->offset += use;

    sge = sg + sg_curr - 1;
    - if (sg_curr > first_coalesce && sg_page(sg) == pfrag->page &&
    - sg->offset + sg->length == orig_offset) {
    - sg->length += use;
    + if (sg_curr > first_coalesce && sg_page(sge) == pfrag->page &&
    + sge->offset + sge->length == orig_offset) {
    + sge->length += use;
    } else {
    sge = sg + sg_curr;
    sg_unmark_end(sge);

    \
     
     \ /
      Last update: 2018-07-27 11:52    [W:4.021 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site