1. 28 Feb, 2013 37 commits
  2. 27 Feb, 2013 3 commits
    • Linus Torvalds's avatar
      sysrq: don't depend on weak undefined arrays to have an address that compares as NULL · adf96e6f
      Linus Torvalds authored
      When taking an address of an extern array, gcc quite naturally should be
      able to say "an address of an object can never be NULL" and just
      optimize away the test entirely.
      
      However, the new alternate sysrq reset code (commit 154b7a48:
      "Input: sysrq - allow specifying alternate reset sequence") did exactly
      that, and declared platform_sysrq_reset_seq[] as a weak array, and
      expecting that testing the address of the array would show whether it
      actually got linked against something or not.
      
      And that doesn't work with all gcc versions.  Clearly it works with
      *some* versions of gcc, and maybe it's even supposed to work, but it
      really is a very fragile concept.
      
      So instead of testing the address of the weak variable, just create a
      weak instance of that array that is empty.  If some platform then has a
      real platform_sysrq_reset_seq[] that overrides our weak one, the linker
      will switch to that one, and it all works without any run-time
      conditionals at all.
      Reported-by: default avatarDave Airlie <airlied@gmail.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Russell King <rmk+kernel@arm.linux.org.uk>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Acked-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      adf96e6f
    • Linus Torvalds's avatar
      mm: do not grow the stack vma just because of an overrun on preceding vma · 09884964
      Linus Torvalds authored
      The stack vma is designed to grow automatically (marked with VM_GROWSUP
      or VM_GROWSDOWN depending on architecture) when an access is made beyond
      the existing boundary.  However, particularly if you have not limited
      your stack at all ("ulimit -s unlimited"), this can cause the stack to
      grow even if the access was really just one past *another* segment.
      
      And that's wrong, especially since we first grow the segment, but then
      immediately later enforce the stack guard page on the last page of the
      segment.  So _despite_ first growing the stack segment as a result of
      the access, the kernel will then make the access cause a SIGSEGV anyway!
      
      So do the same logic as the guard page check does, and consider an
      access to within one page of the next segment to be a bad access, rather
      than growing the stack to abut the next segment.
      Reported-and-tested-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      09884964
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · d895cb1a
      Linus Torvalds authored
      Pull vfs pile (part one) from Al Viro:
       "Assorted stuff - cleaning namei.c up a bit, fixing ->d_name/->d_parent
        locking violations, etc.
      
        The most visible changes here are death of FS_REVAL_DOT (replaced with
        "has ->d_weak_revalidate()") and a new helper getting from struct file
        to inode.  Some bits of preparation to xattr method interface changes.
      
        Misc patches by various people sent this cycle *and* ocfs2 fixes from
        several cycles ago that should've been upstream right then.
      
        PS: the next vfs pile will be xattr stuff."
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits)
        saner proc_get_inode() calling conventions
        proc: avoid extra pde_put() in proc_fill_super()
        fs: change return values from -EACCES to -EPERM
        fs/exec.c: make bprm_mm_init() static
        ocfs2/dlm: use GFP_ATOMIC inside a spin_lock
        ocfs2: fix possible use-after-free with AIO
        ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path
        get_empty_filp()/alloc_file() leave both ->f_pos and ->f_version zero
        target: writev() on single-element vector is pointless
        export kernel_write(), convert open-coded instances
        fs: encode_fh: return FILEID_INVALID if invalid fid_type
        kill f_vfsmnt
        vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op
        nfsd: handle vfs_getattr errors in acl protocol
        switch vfs_getattr() to struct path
        default SET_PERSONALITY() in linux/elf.h
        ceph: prepopulate inodes only when request is aborted
        d_hash_and_lookup(): export, switch open-coded instances
        9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate()
        9p: split dropping the acls from v9fs_set_create_acl()
        ...
      d895cb1a