1. 25 Oct, 2011 9 commits
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm · 1bc67188
      Linus Torvalds authored
      * 'for-linus' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm: (81 commits)
        ARM: 7133/1: SMP: fix per cpu timer setup before the cpu is marked online
        ARM: 7129/1: Add __arm_ioremap_exec for mapping external memory as MT_MEMORY
        ARM: 7136/1: pl330: Fix a race condition
        ARM: smp: fix clipping of number of CPUs
        ARM: 7137/1: Fix error upon adding LL debug
        ARM: Add a few machine types to mach-types
        ARM: 7130/1: dev_archdata: add private iommu extension
        ARM: 7125/1: Add unwinding annotations for 64bit division functions
        ARM: 7120/1: remove bashism in check for multiple zreladdrs
        ARM: 7118/1: rename temp variable in read*_relaxed()
        ARM: 6217/4: mach-realview: expose PB1176 ROM using physmap and map_rom
        ARM: 7098/1: kdump: copy kernel relocation code at the kexec prepare stage
        ARM: 7062/1: cache: detect PIPT I-cache using CTR
        ARM: platform fixups: remove mdesc argument to fixup function
        ARM: 7017/1: Use generic BUG() handler
        ARM: 7102/1: mach-integrator: update defconfig
        ARM: 7087/2: mach-integrator: get timer frequency from clock
        ARM: 7086/2: mach-integrator: modernize clock event registration
        ARM: 7085/2: mach-integrator: clockevent supports oneshot mode
        ARM: 7084/1: mach-integrator: retire some timer macros
        ...
      1bc67188
    • Linus Torvalds's avatar
      Merge branch 'next' of git://selinuxproject.org/~jmorris/linux-security · 36b8d186
      Linus Torvalds authored
      * 'next' of git://selinuxproject.org/~jmorris/linux-security: (95 commits)
        TOMOYO: Fix incomplete read after seek.
        Smack: allow to access /smack/access as normal user
        TOMOYO: Fix unused kernel config option.
        Smack: fix: invalid length set for the result of /smack/access
        Smack: compilation fix
        Smack: fix for /smack/access output, use string instead of byte
        Smack: domain transition protections (v3)
        Smack: Provide information for UDS getsockopt(SO_PEERCRED)
        Smack: Clean up comments
        Smack: Repair processing of fcntl
        Smack: Rule list lookup performance
        Smack: check permissions from user space (v2)
        TOMOYO: Fix quota and garbage collector.
        TOMOYO: Remove redundant tasklist_lock.
        TOMOYO: Fix domain transition failure warning.
        TOMOYO: Remove tomoyo_policy_memory_lock spinlock.
        TOMOYO: Simplify garbage collector.
        TOMOYO: Fix make namespacecheck warnings.
        target: check hex2bin result
        encrypted-keys: check hex2bin result
        ...
      36b8d186
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k · cd85b557
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
        m68k: Finally remove leftover markers sections
        m68k/mac: Fix mac_irq_pending() for PSC MACE and SCC
        m68k/mac: Fix compiler warning in via_read_time()
        zorro: Fix four checkpatch warnings
      cd85b557
    • Russell King's avatar
      Merge branch 'misc' into for-linus · bdf4e948
      Russell King authored
      Conflicts:
      	arch/arm/mach-integrator/integrator_ap.c
      bdf4e948
    • Linus Torvalds's avatar
      Merge branches 'stable/drivers-3.2', 'stable/drivers.bugfixes-3.2' and... · 04a87524
      Linus Torvalds authored
      Merge branches 'stable/drivers-3.2', 'stable/drivers.bugfixes-3.2' and 'stable/pci.fixes-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
      
      * 'stable/drivers-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xenbus: don't rely on xen_initial_domain to detect local xenstore
        xenbus: Fix loopback event channel assuming domain 0
        xen/pv-on-hvm:kexec: Fix implicit declaration of function 'xen_hvm_domain'
        xen/pv-on-hvm kexec: add xs_reset_watches to shutdown watches from old kernel
        xen/pv-on-hvm kexec: update xs_wire.h:xsd_sockmsg_type from xen-unstable
        xen/pv-on-hvm kexec+kdump: reset PV devices in kexec or crash kernel
        xen/pv-on-hvm kexec: rebind virqs to existing eventchannel ports
        xen/pv-on-hvm kexec: prevent crash in xenwatch_thread() when stale watch events arrive
      
      * 'stable/drivers.bugfixes-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen/pciback: Check if the device is found instead of blindly assuming so.
        xen/pciback: Do not dereference psdev during printk when it is NULL.
        xen: remove XEN_PLATFORM_PCI config option
        xen: XEN_PVHVM depends on PCI
        xen/pciback: double lock typo
        xen/pciback: use mutex rather than spinlock in vpci backend
        xen/pciback: Use mutexes when working with Xenbus state transitions.
        xen/pciback: miscellaneous adjustments
        xen/pciback: use mutex rather than spinlock in passthrough backend
        xen/pciback: use resource_size()
      
      * 'stable/pci.fixes-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen/pci: support multi-segment systems
        xen-swiotlb: When doing coherent alloc/dealloc check before swizzling the MFNs.
        xen/pci: make bus notifier handler return sane values
        xen-swiotlb: fix printk and panic args
        xen-swiotlb: Fix wrong panic.
        xen-swiotlb: Retry up three times to allocate Xen-SWIOTLB
        xen-pcifront: Update warning comment to use 'e820_host' option.
      04a87524
    • Russell King's avatar
      Merge branches 'arnd-randcfg-fixes', 'debug', 'io' (early part), 'l2x0',... · 06afb1a0
      Russell King authored
      Merge branches 'arnd-randcfg-fixes', 'debug', 'io' (early part), 'l2x0', 'p2v', 'pgt' (early part) and 'smp' into for-linus
      06afb1a0
    • Linus Torvalds's avatar
      Merge branches 'stable/bug.fixes-3.2' and 'stable/mmu.fixes' of... · 31018acd
      Linus Torvalds authored
      Merge branches 'stable/bug.fixes-3.2' and 'stable/mmu.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
      
      * 'stable/bug.fixes-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen/p2m/debugfs: Make type_name more obvious.
        xen/p2m/debugfs: Fix potential pointer exception.
        xen/enlighten: Fix compile warnings and set cx to known value.
        xen/xenbus: Remove the unnecessary check.
        xen/irq: If we fail during msi_capability_init return proper error code.
        xen/events: Don't check the info for NULL as it is already done.
        xen/events: BUG() when we can't allocate our event->irq array.
      
      * 'stable/mmu.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen: Fix selfballooning and ensure it doesn't go too far
        xen/gntdev: Fix sleep-inside-spinlock
        xen: modify kernel mappings corresponding to granted pages
        xen: add an "highmem" parameter to alloc_xenballooned_pages
        xen/p2m: Use SetPagePrivate and its friends for M2P overrides.
        xen/p2m: Make debug/xen/mmu/p2m visible again.
        Revert "xen/debug: WARN_ON when identity PFN has no _PAGE_IOMAP flag set."
      31018acd
    • Linus Torvalds's avatar
      Merge branch 'stable/e820-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen · 5eef150c
      Linus Torvalds authored
      * 'stable/e820-3.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen: release all pages within 1-1 p2m mappings
        xen: allow extra memory to be in multiple regions
        xen: allow balloon driver to use more than one memory region
        xen/balloon: simplify test for the end of usable RAM
        xen/balloon: account for pages released during memory setup
      5eef150c
    • Josh Stone's avatar
      x86: Fix compilation bug in kprobes' twobyte_is_boostable · 315eb8a2
      Josh Stone authored
      When compiling an i386_defconfig kernel with gcc-4.6.1-9.fc15.i686, I
      noticed a warning about the asm operand for test_bit in kprobes'
      can_boost.  I discovered that this caused only the first long of
      twobyte_is_boostable[] to be output.
      
      Jakub filed and fixed gcc PR50571 to correct the warning and this output
      issue.  But to solve it for less current gcc, we can make kprobes'
      twobyte_is_boostable[] non-const, and it won't be optimized out.
      
      Before:
      
          CC      arch/x86/kernel/kprobes.o
        In file included from include/linux/bitops.h:22:0,
                         from include/linux/kernel.h:17,
                         from [...]/arch/x86/include/asm/percpu.h:44,
                         from [...]/arch/x86/include/asm/current.h:5,
                         from [...]/arch/x86/include/asm/processor.h:15,
                         from [...]/arch/x86/include/asm/atomic.h:6,
                         from include/linux/atomic.h:4,
                         from include/linux/mutex.h:18,
                         from include/linux/notifier.h:13,
                         from include/linux/kprobes.h:34,
                         from arch/x86/kernel/kprobes.c:43:
        [...]/arch/x86/include/asm/bitops.h: In function ‘can_boost.part.1’:
        [...]/arch/x86/include/asm/bitops.h:319:2: warning: use of memory input
              without lvalue in asm operand 1 is deprecated [enabled by default]
      
        $ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt
             551:	0f a3 05 00 00 00 00 	bt     %eax,0x0
                                554: R_386_32	.rodata.cst4
      
        $ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o
      
        arch/x86/kernel/kprobes.o:     file format elf32-i386
      
        Contents of section .data:
         0000 48000000 00000000 00000000 00000000  H...............
        Contents of section .rodata.cst4:
         0000 4c030000                             L...
      
      Only a single long of twobyte_is_boostable[] is in the object file.
      
      After, without the const on twobyte_is_boostable:
      
        $ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt
             551:	0f a3 05 20 00 00 00 	bt     %eax,0x20
                                554: R_386_32	.data
      
        $ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o
      
        arch/x86/kernel/kprobes.o:     file format elf32-i386
      
        Contents of section .data:
         0000 48000000 00000000 00000000 00000000  H...............
         0010 00000000 00000000 00000000 00000000  ................
         0020 4c030000 0f000200 ffff0000 ffcff0c0  L...............
         0030 0000ffff 3bbbfff8 03ff2ebb 26bb2e77  ....;.......&..w
      
      Now all 32 bytes are output into .data instead.
      Signed-off-by: default avatarJosh Stone <jistone@redhat.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Jakub Jelinek <jakub@redhat.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      315eb8a2
  2. 24 Oct, 2011 8 commits
  3. 23 Oct, 2011 4 commits
  4. 22 Oct, 2011 4 commits
  5. 21 Oct, 2011 5 commits
    • Domenico Andreoli's avatar
      ARM: S3C24XX: Fix s3c24xx build errors if !CONFIG_PM · fb630b9f
      Domenico Andreoli authored
      v2:
      - register_syscore_ops(&s3c24xx_irq_syscore_ops) does not need to be
        conditionally compiled out, it is already optimized out on !CONFIG_PM
      - fix also s3c2412 and s3c2416 affected by the same build issue
      
      v1:
      s3c2440.c fails to build if !CONFIG_PM because in such case
      s3c2410_pm_syscore_ops is not defined. Same error should happen also
      in s3c2410.c and s3c2442.c
      Signed-off-by: default avatarDomenico Andreoli <cavokz@gmail.com>
      Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
      fb630b9f
    • Linus Torvalds's avatar
      Merge git://github.com/herbertx/crypto · 2efd7c0f
      Linus Torvalds authored
      * git://github.com/herbertx/crypto:
        crypto: ghash - Avoid null pointer dereference if no key is set
      2efd7c0f
    • Linus Torvalds's avatar
      Merge branch 'fix/hda' of git://github.com/tiwai/sound · 62ddc004
      Linus Torvalds authored
      * 'fix/hda' of git://github.com/tiwai/sound:
        ALSA: HDA: conexant support for Lenovo T520/W520
        ALSA: hda - Add position_fix quirk for Dell Inspiron 1010
      62ddc004
    • Nick Bowler's avatar
      crypto: ghash - Avoid null pointer dereference if no key is set · 7ed47b7d
      Nick Bowler authored
      The ghash_update function passes a pointer to gf128mul_4k_lle which will
      be NULL if ghash_setkey is not called or if the most recent call to
      ghash_setkey failed to allocate memory.  This causes an oops.  Fix this
      up by returning an error code in the null case.
      
      This is trivially triggered from unprivileged userspace through the
      AF_ALG interface by simply writing to the socket without setting a key.
      
      The ghash_final function has a similar issue, but triggering it requires
      a memory allocation failure in ghash_setkey _after_ at least one
      successful call to ghash_update.
      
        BUG: unable to handle kernel NULL pointer dereference at 00000670
        IP: [<d88c92d4>] gf128mul_4k_lle+0x23/0x60 [gf128mul]
        *pde = 00000000
        Oops: 0000 [#1] PREEMPT SMP
        Modules linked in: ghash_generic gf128mul algif_hash af_alg nfs lockd nfs_acl sunrpc bridge ipv6 stp llc
      
        Pid: 1502, comm: hashatron Tainted: G        W   3.1.0-rc9-00085-ge9308cfd #32 Bochs Bochs
        EIP: 0060:[<d88c92d4>] EFLAGS: 00000202 CPU: 0
        EIP is at gf128mul_4k_lle+0x23/0x60 [gf128mul]
        EAX: d69db1f0 EBX: d6b8ddac ECX: 00000004 EDX: 00000000
        ESI: 00000670 EDI: d6b8ddac EBP: d6b8ddc8 ESP: d6b8dda4
         DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
        Process hashatron (pid: 1502, ti=d6b8c000 task=d6810000 task.ti=d6b8c000)
        Stack:
         00000000 d69db1f0 00000163 00000000 d6b8ddc8 c101a520 d69db1f0 d52aa000
         00000ff0 d6b8dde8 d88d310f d6b8a3f8 d52aa000 00001000 d88d502c d6b8ddfc
         00001000 d6b8ddf4 c11676ed d69db1e8 d6b8de24 c11679ad d52aa000 00000000
        Call Trace:
         [<c101a520>] ? kmap_atomic_prot+0x37/0xa6
         [<d88d310f>] ghash_update+0x85/0xbe [ghash_generic]
         [<c11676ed>] crypto_shash_update+0x18/0x1b
         [<c11679ad>] shash_ahash_update+0x22/0x36
         [<c11679cc>] shash_async_update+0xb/0xd
         [<d88ce0ba>] hash_sendpage+0xba/0xf2 [algif_hash]
         [<c121b24c>] kernel_sendpage+0x39/0x4e
         [<d88ce000>] ? 0xd88cdfff
         [<c121b298>] sock_sendpage+0x37/0x3e
         [<c121b261>] ? kernel_sendpage+0x4e/0x4e
         [<c10b4dbc>] pipe_to_sendpage+0x56/0x61
         [<c10b4e1f>] splice_from_pipe_feed+0x58/0xcd
         [<c10b4d66>] ? splice_from_pipe_begin+0x10/0x10
         [<c10b51f5>] __splice_from_pipe+0x36/0x55
         [<c10b4d66>] ? splice_from_pipe_begin+0x10/0x10
         [<c10b6383>] splice_from_pipe+0x51/0x64
         [<c10b63c2>] ? default_file_splice_write+0x2c/0x2c
         [<c10b63d5>] generic_splice_sendpage+0x13/0x15
         [<c10b4d66>] ? splice_from_pipe_begin+0x10/0x10
         [<c10b527f>] do_splice_from+0x5d/0x67
         [<c10b6865>] sys_splice+0x2bf/0x363
         [<c129373b>] ? sysenter_exit+0xf/0x16
         [<c104dc1e>] ? trace_hardirqs_on_caller+0x10e/0x13f
         [<c129370c>] sysenter_do_call+0x12/0x32
        Code: 83 c4 0c 5b 5e 5f c9 c3 55 b9 04 00 00 00 89 e5 57 8d 7d e4 56 53 8d 5d e4 83 ec 18 89 45 e0 89 55 dc 0f b6 70 0f c1 e6 04 01 d6 <f3> a5 be 0f 00 00 00 4e 89 d8 e8 48 ff ff ff 8b 45 e0 89 da 0f
        EIP: [<d88c92d4>] gf128mul_4k_lle+0x23/0x60 [gf128mul] SS:ESP 0068:d6b8dda4
        CR2: 0000000000000670
        ---[ end trace 4eaa2a86a8e2da24 ]---
        note: hashatron[1502] exited with preempt_count 1
        BUG: scheduling while atomic: hashatron/1502/0x10000002
        INFO: lockdep is turned off.
        [...]
      Signed-off-by: default avatarNick Bowler <nbowler@elliptictech.com>
      Cc: stable@kernel.org [2.6.37+]
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      7ed47b7d
    • Marek Szyprowski's avatar
      ARM: S5P: fix offset calculation on gpio-interrupt · 1052cff3
      Marek Szyprowski authored
      Offsets of the irq controller registers were calculated
      correctly only for first GPIO bank. This patch fixes
      calculation of the register offsets for all GPIO banks.
      Reported-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
      Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
      Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
      1052cff3
  6. 20 Oct, 2011 7 commits
    • Jarkko Sakkinen's avatar
      Smack: allow to access /smack/access as normal user · 0e94ae17
      Jarkko Sakkinen authored
      Allow query access as a normal user removing the need
      for CAP_MAC_ADMIN. Give RW access to /smack/access
      for UGO. Do not import smack labels in access check.
      Signed-off-by: default avatarJarkko Sakkinen <jarkko.j.sakkinen@gmail.com>
      Signed-off-by: default avatarCasey Schaufler <cschaufler@cschaufler-intel.(none)>
      0e94ae17
    • Russell King's avatar
      ARM: smp: fix clipping of number of CPUs · a06f916b
      Russell King authored
      Rather than clipping the number of CPUs using the compile-time NR_CPUS
      constant, use the runtime nr_cpu_ids value instead.  This allows the
      nr_cpus command line option to work as expected.
      
      Cc: <stable@kernel.org>
      Reported-by: default avatarMark Salter <msalter@redhat.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      a06f916b
    • Afzal Mohammed's avatar
      ARM: 7137/1: Fix error upon adding LL debug · b55fa188
      Afzal Mohammed authored
      Upon adding new board LL debug support, if the resultant code
      addition would not cause PC relative offset of "hexbuf" from
      "adr r2, hexbuf" (+2) instruction to be representable in a
      shifted 8-bit value (hence indirectly putting higher aligment
      requirement on larger offsets), following error occurs,
      
      arch/arm/kernel/debug.S: Assembler messages:
      arch/arm/kernel/debug.S:138: Error: invalid constant (428) after fixup
      
      Fix it by bringing "hexbuf" closer so that "adr"
      can have the offset.
      Signed-off-by: default avatarAfzal Mohammed <afzal@ti.com>
      Acked-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      b55fa188
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc · fd11e153
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc:
        sparc: Add alignment flag to PCI expansion resources
        sparc: Avoid calling sigprocmask()
        sparc: Use set_current_blocked()
        sparc32,leon: SRMMU MMU Table probe fix
      fd11e153
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · 505f48b5
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
        fib_rules: fix unresolved_rules counting
        r8169: fix wrong eee setting for rlt8111evl
        r8169: fix driver shutdown WoL regression.
        ehea: Change maintainer to me
        pptp: pptp_rcv_core() misses pskb_may_pull() call
        tproxy: copy transparent flag when creating a time wait
        pptp: fix skb leak in pptp_xmit()
        bonding: use local function pointer of bond->recv_probe in bond_handle_frame
        smsc911x: Add support for SMSC LAN89218
        tg3: negate USE_PHYLIB flag check
        netconsole: enable netconsole can make net_device refcnt incorrent
        bluetooth: Properly clone LSM attributes to newly created child connections
        l2tp: fix a potential skb leak in l2tp_xmit_skb()
        bridge: fix hang on removal of bridge via netlink
        x25: Prevent skb overreads when checking call user data
        x25: Handle undersized/fragmented skbs
        x25: Validate incoming call user data lengths
        udplite: fast-path computation of checksum coverage
        IPVS netns shutdown/startup dead-lock
        netfilter: nf_conntrack: fix event flooding in GRE protocol tracker
      505f48b5
    • Jean Delvare's avatar
      hwmon: (w83627ehf) Fix negative 8-bit temperature values · 133d324d
      Jean Delvare authored
      Since 8-bit temperature values are now handled in 16-bit struct
      members, values have to be cast to s8 for negative temperatures to be
      properly handled. This is broken since kernel version 2.6.39
      (commit bce26c58.)
      Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
      Cc: Guenter Roeck <guenter.roeck@ericsson.com>
      Cc: stable@kernel.org	# 2.6.39+
      Signed-off-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
      133d324d
    • Hugh Dickins's avatar
      mm: fix race between mremap and removing migration entry · 486cf46f
      Hugh Dickins authored
      I don't usually pay much attention to the stale "? " addresses in
      stack backtraces, but this lucky report from Pawel Sikora hints that
      mremap's move_ptes() has inadequate locking against page migration.
      
       3.0 BUG_ON(!PageLocked(p)) in migration_entry_to_page():
       kernel BUG at include/linux/swapops.h:105!
       RIP: 0010:[<ffffffff81127b76>]  [<ffffffff81127b76>]
                             migration_entry_wait+0x156/0x160
        [<ffffffff811016a1>] handle_pte_fault+0xae1/0xaf0
        [<ffffffff810feee2>] ? __pte_alloc+0x42/0x120
        [<ffffffff8112c26b>] ? do_huge_pmd_anonymous_page+0xab/0x310
        [<ffffffff81102a31>] handle_mm_fault+0x181/0x310
        [<ffffffff81106097>] ? vma_adjust+0x537/0x570
        [<ffffffff81424bed>] do_page_fault+0x11d/0x4e0
        [<ffffffff81109a05>] ? do_mremap+0x2d5/0x570
        [<ffffffff81421d5f>] page_fault+0x1f/0x30
      
      mremap's down_write of mmap_sem, together with i_mmap_mutex or lock,
      and pagetable locks, were good enough before page migration (with its
      requirement that every migration entry be found) came in, and enough
      while migration always held mmap_sem; but not enough nowadays, when
      there's memory hotremove and compaction.
      
      The danger is that move_ptes() lets a migration entry dodge around
      behind remove_migration_pte()'s back, so it's in the old location when
      looking at the new, then in the new location when looking at the old.
      
      Either mremap's move_ptes() must additionally take anon_vma lock(), or
      migration's remove_migration_pte() must stop peeking for is_swap_entry()
      before it takes pagetable lock.
      
      Consensus chooses the latter: we prefer to add overhead to migration
      than to mremapping, which gets used by JVMs and by exec stack setup.
      Reported-and-tested-by: default avatarPaweł Sikora <pluto@agmk.net>
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Acked-by: default avatarAndrea Arcangeli <aarcange@redhat.com>
      Acked-by: default avatarMel Gorman <mgorman@suse.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      486cf46f
  7. 19 Oct, 2011 3 commits