09 Jan, 2015

6 commits

  • commit 4e2024624e678f0ebb916e6192bd23c1f9fdf696 upstream.

    We didn't check length of rock ridge ER records before printing them.
    Thus corrupted isofs image can cause us to access and print some memory
    behind the buffer with obvious consequences.

    Reported-and-tested-by: Carl Henrik Lunde
    Signed-off-by: Jan Kara
    Signed-off-by: Greg Kroah-Hartman

    Jan Kara
     
  • commit 08d4f7722268755ee34ed1c9e8afee7dfff022bb upstream.

    This patch fixes kmemcheck warning in switch_names. The function
    switch_names swaps inline names of two dentries. It swaps full arrays
    d_iname, no matter how many bytes are really used by the strings. Reading
    data beyond string ends results in kmemcheck warning.

    We fix the bug by marking both arrays as fully initialized.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 4bd5a980de87d2b5af417485bde97b8eb3d6cf6a upstream.

    nfs4_layoutget_release() drops layout hdr refcnt. Grab the refcnt
    early so that it is safe to call .release in case nfs4_alloc_pages
    fails.

    Signed-off-by: Peng Tao
    Fixes: a47970ff78147 ("NFSv4.1: Hold reference to layout hdr in layoutget")
    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Peng Tao
     
  • commit 9234f3190bf8b25b11b105191d408ac50a107948 upstream.

    f2fs_write_begin() doesn't initialize the 'dn' variable if the inode has
    inline data. However it uses its contents to decide whether it should
    just zero out the page or load data to it. Thus if we are unlucky we can
    zero out page contents instead of loading inline data into a page.

    CC: Changman Lee
    Signed-off-by: Jan Kara
    Signed-off-by: Jaegeuk Kim
    Signed-off-by: Greg Kroah-Hartman

    Jan Kara
     
  • commit 9bd27ae4aafc9bfee6c8791f7d801ea16cc5622b upstream.

    If user specifies too low end sector for trimming, f2fs_trim_fs() will
    use uninitialized value as a number of trimmed blocks and returns it to
    userspace. Initialize number of trimmed blocks early to avoid the
    problem.

    Coverity-id: 1248809
    Signed-off-by: Jan Kara
    Signed-off-by: Jaegeuk Kim
    Signed-off-by: Greg Kroah-Hartman

    Jan Kara
     
  • commit f54e18f1b831c92f6512d2eedb224cd63d607d3d upstream.

    Rock Ridge extensions define so called Continuation Entries (CE) which
    define where is further space with Rock Ridge data. Corrupted isofs
    image can contain arbitrarily long chain of these, including a one
    containing loop and thus causing kernel to end in an infinite loop when
    traversing these entries.

    Limit the traversal to 32 entries which should be more than enough space
    to store all the Rock Ridge data.

    Reported-by: P J P
    Signed-off-by: Jan Kara
    Signed-off-by: Greg Kroah-Hartman

    Jan Kara
     

17 Dec, 2014

2 commits

  • commit ca5358ef75fc69fee5322a38a340f5739d997c10 upstream.

    ... by not hitting rename_retry for reasons other than rename having
    happened. In other words, do _not_ restart when finding that
    between unlocking the child and locking the parent the former got
    into __dentry_kill(). Skip the killed siblings instead...

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit 946e51f2bf37f1656916eb75bd0742ba33983c28 upstream.

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     

04 Dec, 2014

1 commit

  • a) don't bother with ->d_time for positives - we only check it for
    negatives anyway.

    b) make sure to set it at unlink and rmdir time - at *that* point
    soon-to-be negative dentry matches then-current directory contents

    c) don't go into renaming of old alias in vfat_lookup() unless it
    has the same parent (which it will, unless we are seeing corrupted
    image)

    [hirofumi@mail.parknet.co.jp: make change minimum, don't call d_move() for dir]
    Signed-off-by: Al Viro
    Signed-off-by: OGAWA Hirofumi
    Cc: [3.17.x]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     

02 Dec, 2014

2 commits

  • Pull ext4 bugfix from Ted Ts'o:
    "Fix an ext4 metadata checksum regression introduced in v3.18-rc3"

    * tag 'ext4_for_linus_urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
    jbd2: fix regression where we fail to initialize checksum seed when loading

    Linus Torvalds
     
  • When we're enabling journal features, we cannot use the predicate
    jbd2_journal_has_csum_v2or3() because we haven't yet set the sb
    feature flag fields! Moreover, we just finished loading the shash
    driver, so the test is unnecessary; calculate the seed always.

    Without this patch, we fail to initialize the checksum seed the first
    time we turn on journal_checksum, which means that all journal blocks
    written during that first mount are corrupt. Transactions written
    after the second mount will be fine, since the feature flag will be
    set in the journal superblock. xfstests generic/{034,321,322} are the
    regression tests.

    (This is important for 3.18.)

    Signed-off-by: Darrick J. Wong
    Reported-by: Eric Whitney
    Signed-off-by: Theodore Ts'o

    Darrick J. Wong
     

01 Dec, 2014

1 commit

  • Don Bailey noticed that our page zeroing for compression at end-io time
    isn't complete. This reworks a patch from Linus to push the zeroing
    into the zlib and lzo specific functions instead of trying to handle the
    corners inside btrfs_decompress_buf2page

    Signed-off-by: Chris Mason
    Reviewed-by: Josef Bacik
    Reported-by: Don A. Bailey
    cc: stable@vger.kernel.org
    Signed-off-by: Linus Torvalds

    Chris Mason
     

26 Nov, 2014

2 commits


24 Nov, 2014

1 commit


22 Nov, 2014

1 commit


20 Nov, 2014

12 commits

  • Check against !OVL_PATH_LOWER instead of OVL_PATH_MERGE. For a copied up
    directory the two are currently equivalent.

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • Pass dentry into ovl_dir_read_merged() insted of upperpath and lowerpath.
    This cleans up callers and paves the way for multi-layer directory reads.

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • Don't open code lockless_dereference() in ovl_upperdentry_dereference().

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • Allow option separator (comma) to be escaped with backslash.

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • Xattr operations can race with copy up. This does not matter as long as
    we consistently fiter out "trunsted.overlay.opaque" attribute on upper
    directories.

    Previously we checked parent against OVL_PATH_MERGE. This is too general,
    and prone to race with copy-up. I.e. we found the parent to be on the
    lower layer but ovl_dentry_real() would return the copied-up dentry,
    possibly with the "opaque" attribute.

    So instead use ovl_path_real() and decide to filter the attributes based on
    the actual type of the dentry we'll use.

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • ovl_remove_and_whiteout() needs to check if upper dentry exists or not
    after having locked upper parent directory.

    Previously we used a "type" value computed before locking the upper parent
    directory, which is susceptible to racing with copy-up.

    There's a similar check in ovl_check_empty_and_clear(). This one is not
    actually racy, since copy-up doesn't change the "emptyness" property of a
    directory. Add a comment to this effect, and check the existence of upper
    dentry locally to make the code cleaner.

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • Some distributions carry an "old" format of overlayfs while mainline has a
    "new" format.

    The distros will possibly want to keep the old overlayfs alongside the new
    for compatibility reasons.

    To make it possible to differentiate the two versions change the name of
    the new one from "overlayfs" to "overlay".

    Signed-off-by: Miklos Szeredi
    Reported-by: Serge Hallyn
    Cc: Andy Whitcroft

    Miklos Szeredi
     
  • The currect code for nfsd41_cb_get_slot() and nfsd4_cb_done() has no
    locking in order to guarantee atomicity, and so allows for races of
    the form.

    Task 1 Task 2
    ====== ======
    if (test_and_set_bit(0) != 0) {
    clear_bit(0)
    rpc_wake_up_next(queue)
    rpc_sleep_on(queue)
    return false;
    }

    This patch breaks the race condition by adding a retest of the bit
    after the call to rpc_sleep_on().

    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org
    Signed-off-by: J. Bruce Fields

    Trond Myklebust
     
  • The fair reader/writer locks mean that btrfs_clear_path_blocking needs
    to strictly follow lock ordering rules even when we already have
    blocking locks on a given path.

    Before we can clear a blocking lock on the path, we need to make sure
    all of the locks have been converted to blocking. This will remove lock
    inversions against anyone spinning in write_lock() against the buffers
    we're trying to get read locks on. These inversions didn't exist before
    the fair read/writer locks, but now we need to be more careful.

    We papered over this deadlock in the past by changing
    btrfs_try_read_lock() to be a true trylock against both the spinlock and
    the blocking lock. This was slower, and not sufficient to fix all the
    deadlocks. This patch adds a btrfs_tree_read_lock_atomic(), which
    basically means get the spinlock but trylock on the blocking lock.

    Signed-off-by: Chris Mason
    Signed-off-by: Josef Bacik
    Reported-by: Patrick Schmid
    cc: stable@vger.kernel.org #v3.15+

    Chris Mason
     
  • With the isofs_hash() function removed, isofs_hash_ms() is the only user
    of isofs_hash_common(), but it's defined inside of an #ifdef, which triggers
    this gcc warning in ARM axm55xx_defconfig starting with v3.18-rc3:

    fs/isofs/inode.c:177:1: warning: 'isofs_hash_common' defined but not used [-Wunused-function]

    This patch moves the function inside of the same #ifdef section to avoid that
    warning, which seems the best compromise of a relatively harmless patch for
    a late -rc.

    Signed-off-by: Arnd Bergmann
    Fixes: b0afd8e5db7b ("isofs: don't bother with ->d_op for normal case")
    Signed-off-by: Al Viro

    Arnd Bergmann
     
  • In "d_prune_alias(): just lock the parent and call __dentry_kill()" the old
    dget + d_drop + dput has been replaced with lock_parent + __dentry_kill;
    unfortunately, dput() does more than just killing dentry - it also drops the
    reference to parent. New variant leaks that reference and needs dput(parent)
    after killing the child off.

    Signed-off-by: Yan, Zheng
    Signed-off-by: Al Viro

    Yan, Zheng
     
  • Even when security labels are disabled we support at least the same
    attributes as v4.1.

    Signed-off-by: Christoph Hellwig
    Cc: stable@kernel.org
    Signed-off-by: J. Bruce Fields

    Christoph Hellwig
     

16 Nov, 2014

1 commit

  • Pull NFS client bugfixes from Trond Myklebust:
    "Highlights include:

    - stable patches to fix NFSv4.x delegation reclaim error paths
    - fix a bug whereby we were advertising NFSv4.1 but using NFSv4.2
    features
    - fix a use-after-free problem with pNFS block layouts
    - fix a memory leak in the pNFS files O_DIRECT code
    - replace an intrusive and Oops-prone performance fix in the NFSv4
    atomic open code with a safer one-line version and revert the two
    original patches"

    * tag 'nfs-for-3.18-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
    sunrpc: fix sleeping under rcu_read_lock in gss_stringify_acceptor
    NFS: Don't try to reclaim delegation open state if recovery failed
    NFSv4: Ensure that we call FREE_STATEID when NFSv4.x stateids are revoked
    NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return
    NFSv4.1: nfs41_clear_delegation_stateid shouldn't trust NFS_DELEGATED_STATE
    NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired
    NFS: SEEK is an NFS v4.2 feature
    nfs: Fix use of uninitialized variable in nfs_getattr()
    nfs: Remove bogus assignment
    nfs: remove spurious WARN_ON_ONCE in write path
    pnfs/blocklayout: serialize GETDEVICEINFO calls
    nfs: fix pnfs direct write memory leak
    Revert "NFS: nfs4_do_open should add negative results to the dcache."
    Revert "NFS: remove BUG possibility in nfs4_open_and_get_state"
    NFSv4: Ensure nfs_atomic_open set the dentry verifier on ENOENT

    Linus Torvalds
     

14 Nov, 2014

3 commits

  • Merge misc fixes from Andrew Morton:
    "15 fixes"

    * emailed patches from Andrew Morton :
    MAINTAINERS: add IIO include files
    kernel/panic.c: update comments for print_tainted
    mem-hotplug: reset node present pages when hot-adding a new pgdat
    mem-hotplug: reset node managed pages when hot-adding a new pgdat
    mm/debug-pagealloc: correct freepage accounting and order resetting
    fanotify: fix notification of groups with inode & mount marks
    mm, compaction: prevent infinite loop in compact_zone
    mm: alloc_contig_range: demote pages busy message from warn to info
    mm/slab: fix unalignment problem on Malta with EVA due to slab merge
    mm/page_alloc: restrict max order of merging on isolated pageblock
    mm/page_alloc: move freepage counting logic to __free_one_page()
    mm/page_alloc: add freepage on isolate pageblock to correct buddy list
    mm/page_alloc: fix incorrect isolation behavior by rechecking migratetype
    mm/compaction: skip the range until proper target pageblock is met
    zram: avoid kunmap_atomic() of a NULL pointer

    Linus Torvalds
     
  • fsnotify() needs to merge inode and mount marks lists when notifying
    groups about events so that ignore masks from inode marks are reflected
    in mount mark notifications and groups are notified in proper order
    (according to priorities).

    Currently the sorting of the lists done by fsnotify_add_inode_mark() /
    fsnotify_add_vfsmount_mark() and fsnotify() differed which resulted
    ignore masks not being used in some cases.

    Fix the problem by always using the same comparison function when
    sorting / merging the mark lists.

    Thanks to Heinrich Schuchardt for improvements of my patch.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=87721
    Signed-off-by: Jan Kara
    Reported-by: Heinrich Schuchardt
    Tested-by: Heinrich Schuchardt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kara
     
  • TID of cap flush ack is 64 bits, but ceph_inode_info::flushing_cap_tid
    is only 16 bits. 16 bits should be plenty to let the cap flush updates
    pipeline appropriately, but we need to cast in the proper direction when
    comparing these differently-sized versions. So downcast the 64-bits one
    to 16 bits.

    Reflects ceph.git commit a5184cf46a6e867287e24aeb731634828467cd98.

    Signed-off-by: Yan, Zheng
    Reviewed-by: Ilya Dryomov

    Yan, Zheng
     

13 Nov, 2014

8 commits

  • If state recovery failed, then we should not attempt to reclaim delegated
    state.

    http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • NFSv4.x (x>0) requires us to call TEST_STATEID+FREE_STATEID if a stateid is
    revoked. We will currently fail to do this if the stateid is a delegation.

    http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • Any attempt to call nfs_remove_bad_delegation() while a delegation is being
    returned is currently a no-op. This means that we can end up looping
    forever in nfs_end_delegation_return() if something causes the delegation
    to be revoked.
    This patch adds a mechanism whereby the state recovery code can communicate
    to the delegation return code that the delegation is no longer valid and
    that it should not be used when reclaiming state.
    It also changes the return value for nfs4_handle_delegation_recall_error()
    to ensure that nfs_end_delegation_return() does not reattempt the lock
    reclaim before state recovery is done.

    http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • This patch removes the assumption made previously, that we only need to
    check the delegation stateid when it matches the stateid on a cached
    open.

    If we believe that we hold a delegation for this file, then we must assume
    that its stateid may have been revoked or expired too. If we don't test it
    then our state recovery process may end up caching open/lock state in a
    situation where it should not.
    We therefore rename the function nfs41_clear_delegation_stateid as
    nfs41_check_delegation_stateid, and change it to always run through the
    delegation stateid test and recovery process as outlined in RFC5661.

    http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • NFSv4.0 does not have TEST_STATEID/FREE_STATEID functionality, so
    unlike NFSv4.1, the recovery procedure when stateids have expired or
    have been revoked requires us to just forget the delegation.

    http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • Somehow the nfs_v4_1_minor_ops had the NFS_CAP_SEEK flag set, enabling
    SEEK over v4.1. This is wrong, and can make servers crash.

    Signed-off-by: Anna Schumaker
    Tested-by: J. Bruce Fields
    Signed-off-by: Trond Myklebust

    Anna Schumaker
     
  • Variable 'err' needn't be initialized when nfs_getattr() uses it to
    check whether it should call generic_fillattr() or not. That can result
    in spurious error returns. Initialize 'err' properly.

    Signed-off-by: Jan Kara
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust

    Jan Kara
     
  • Commit 3a6fd1f004fc (pnfs/blocklayout: remove read-modify-write handling
    in bl_write_pagelist) introduced a bogus assignment pg_index = pg_index
    in variable initialization. AFAICS it's just a typo so remove it.
    Spotted by Coverity (id 1248711).

    CC: Christoph Hellwig
    Signed-off-by: Jan Kara
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Trond Myklebust

    Jan Kara