lkml.org 
[lkml]   [2013]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 104/222] nfs: don't zero out the rest of the page if we hit the EOF on a DIO READ
    Date
    3.5.7.3 -stable review patch.  If anyone has any objections, please let me know.

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

    From: Jeff Layton <jlayton@redhat.com>

    commit 67fad106a219e083c91c79695bd1807dde1bf7b9 upstream.

    Eryu provided a test program that would segfault when attempting to read
    past the EOF on file that was opened O_DIRECT. The buffer given to the
    read() call was on the stack, and when he attempted to read past it it
    would scribble over the rest of the stack page.

    If we hit the end of the file on a DIO READ request, then we don't want
    to zero out the rest of the buffer. These aren't pagecache pages after
    all, and there's no guarantee that the buffers that were passed in
    represent entire pages.

    Cc: Fred Isaman <iisaman@netapp.com>
    Reported-by: Eryu Guan <eguan@redhat.com>
    Signed-off-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
    ---
    fs/nfs/direct.c | 8 --------
    1 file changed, 8 deletions(-)

    diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
    index 4825337..36b3958 100644
    --- a/fs/nfs/direct.c
    +++ b/fs/nfs/direct.c
    @@ -247,14 +247,6 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
    struct nfs_page *req = nfs_list_entry(hdr->pages.next);
    struct page *page = req->wb_page;

    - if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
    - if (bytes > hdr->good_bytes)
    - zero_user(page, 0, PAGE_SIZE);
    - else if (hdr->good_bytes - bytes < PAGE_SIZE)
    - zero_user_segment(page,
    - hdr->good_bytes & ~PAGE_MASK,
    - PAGE_SIZE);
    - }
    if (!PageCompound(page)) {
    if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
    if (bytes < hdr->good_bytes)
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2013-01-16 18:01    [W:8.189 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site