lkml.org 
[lkml]   [2007]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch 04/26] writeback: dont propagate AOP_WRITEPAGE_ACTIVATE
    On Mon, 19 Nov 2007, Greg Kroah-Hartman wrote:
    >
    > 2.6.22-stable review patch. If anyone has any objections, please let us
    > know.
    >
    > ------------------
    > From: Andrew Morton <akpm@linux-foundation.org>
    >
    > patch e423003028183df54f039dfda8b58c49e78c89d7 in mainline.
    >
    > This is a writeback-internal marker but we're propagating it all the way back
    > to userspace!.
    >
    > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    > Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    It's fine by me that this should go into 2.6.22-stable, but then please
    also put in this related patch from 2.6.23-stable: it's arguable whether
    either are strictly needed (they were originally provoked by unionfs, in
    Ubuntu but not mainline), but more helpful to include than exclude them.

    Thanks,
    Hugh


    Subject: [patch 12/13] fix tmpfs BUG and AOP_WRITEPAGE_ACTIVATE

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

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

    From: Hugh Dickins <hugh@veritas.com>

    patch 487e9bf25cbae11b131d6a14bdbb3a6a77380837 in mainline.

    It's possible to provoke unionfs (not yet in mainline, though in mm and
    some distros) to hit shmem_writepage's BUG_ON(page_mapped(page)). I expect
    it's possible to provoke the 2.6.23 ecryptfs in the same way (but the
    2.6.24 ecryptfs no longer calls lower level's ->writepage).

    This came to light with the recent find that AOP_WRITEPAGE_ACTIVATE could
    leak from tmpfs via write_cache_pages and unionfs to userspace. There's
    already a fix (e423003028183df54f039dfda8b58c49e78c89d7 - writeback: don't
    propagate AOP_WRITEPAGE_ACTIVATE) in the tree for that, and it's okay so
    far as it goes; but insufficient because it doesn't address the underlying
    issue, that shmem_writepage expects to be called only by vmscan (relying on
    backing_dev_info capabilities to prevent the normal writeback path from
    ever approaching it).

    That's an increasingly fragile assumption, and ramdisk_writepage (the other
    source of AOP_WRITEPAGE_ACTIVATEs) is already careful to check
    wbc->for_reclaim before returning it. Make the same check in
    shmem_writepage, thereby sidestepping the page_mapped BUG also.

    Signed-off-by: Hugh Dickins <hugh@veritas.com>
    Cc: Erez Zadok <ezk@cs.sunysb.edu>
    Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    mm/shmem.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    --- a/mm/shmem.c
    +++ b/mm/shmem.c
    @@ -916,6 +916,21 @@ static int shmem_writepage(struct page *
    struct inode *inode;

    BUG_ON(!PageLocked(page));
    + /*
    + * shmem_backing_dev_info's capabilities prevent regular writeback or
    + * sync from ever calling shmem_writepage; but a stacking filesystem
    + * may use the ->writepage of its underlying filesystem, in which case
    + * we want to do nothing when that underlying filesystem is tmpfs
    + * (writing out to swap is useful as a response to memory pressure, but
    + * of no use to stabilize the data) - just redirty the page, unlock it
    + * and claim success in this case. AOP_WRITEPAGE_ACTIVATE, and the
    + * page_mapped check below, must be avoided unless we're in reclaim.
    + */
    + if (!wbc->for_reclaim) {
    + set_page_dirty(page);
    + unlock_page(page);
    + return 0;
    + }
    BUG_ON(page_mapped(page));

    mapping = page->mapping;
    -
    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/
    \
     
     \ /
      Last update: 2007-11-19 20:31    [W:4.151 / U:1.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site