28 Mar, 2011

40 commits

  • Greg Kroah-Hartman
     
  • commit d39195c33bb1b5fdcb0f416e8a0b34bfdb07a027 upstream.

    Orphan cleanup is currently executed even if the file system has some
    number of unknown ROCOMPAT features, which deletes inodes and frees
    blocks, which could be very bad for some RO_COMPAT features,
    especially the SNAPSHOT feature.

    This patch skips the orphan cleanup if it contains readonly compatible
    features not known by this ext4 implementation, which would prevent
    the fs from being mounted (or remounted) readwrite.

    Signed-off-by: Amir Goldstein
    Signed-off-by: "Theodore Ts'o"
    Signed-off-by: Greg Kroah-Hartman

    Amir Goldstein
     
  • commit dd65c736d1b5312c80c88a64bf521db4959eded5 upstream.

    The dcdbas driver can do an I/O write to cause a SMI to occur. The SMI handler
    looks at certain registers and memory locations, so the SMI needs to happen
    immediately. On some systems I/O writes are posted, though, causing the SMI to
    happen well after the "outb" occurred, which causes random failures. Following
    the "outb" with an "inb" forces the write to go through even if it is posted.

    Signed-off-by: Stuart Hayes
    Acked-by: Doug Warzecha
    Cc: Chuck Ebbert
    Signed-off-by: Jiri Kosina
    Signed-off-by: Greg Kroah-Hartman

    Stuart Hayes
     
  • commit 24ff6663ccfdaf088dfa7acae489cb11ed4f43c4 upstream.

    While trying to track down some NFS problems with BTRFS, I kept noticing I was
    getting -EACCESS for no apparent reason. Eric Paris and printk() helped me
    figure out that it was SELinux that was giving me grief, with the following
    denial

    type=AVC msg=audit(1290013638.413:95): avc: denied { 0x800000 } for pid=1772
    comm="nfsd" name="" dev=sda1 ino=256 scontext=system_u:system_r:kernel_t:s0
    tcontext=system_u:object_r:unlabeled_t:s0 tclass=file

    Turns out this is because in d_obtain_alias if we can't find an alias we create
    one and do all the normal instantiation stuff, but we don't do the
    security_d_instantiate.

    Usually we are protected from getting a hashed dentry that hasn't yet run
    security_d_instantiate() by the parent's i_mutex, but obviously this isn't an
    option there, so in order to deal with the case that a second thread comes in
    and finds our new dentry before we get to run security_d_instantiate(), we go
    ahead and call it if we find a dentry already. Eric assures me that this is ok
    as the code checks to see if the dentry has been initialized already so calling
    security_d_instantiate() against the same dentry multiple times is ok. With
    this patch I'm no longer getting errant -EACCESS values.

    Signed-off-by: Josef Bacik
    Signed-off-by: Al Viro
    Cc: Chuck Ebbert
    Signed-off-by: Greg Kroah-Hartman

    Josef Bacik
     
  • commit 246408dcd5dfeef2df437ccb0ef4d6ee87805f58 upstream.

    If we call xs_close(), we're in one of two situations:
    - Autoclose, which means we don't expect to resend a request
    - bind+connect failed, which probably means the port is in use

    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • commit b8413f98f997bb3ed7327e6d7117e7e91ce010c3 upstream.

    When one of the two waits in nfs_commit_inode() is interrupted, it
    returns a non-negative value, which causes nfs_wb_page() to think
    that the operation was successful causing it to busy-loop rather
    than exiting.
    It also causes nfs_file_fsync() to incorrectly report the file as
    being successfully committed to disk.

    This patch fixes both problems by ensuring that we return an error
    if the attempts to wait fail.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • commit 38b435b16c36b0d863efcf3f07b34a6fac9873fd upstream.

    When destroying inherited events, we need to destroy groups too,
    otherwise the event iteration in perf_event_exit_task_context() will
    miss group siblings and we leak events with all the consequences.

    Reported-and-tested-by: Vince Weaver
    Signed-off-by: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Peter Zijlstra
     
  • commit fafcf94e2b5732d1e13b440291c53115d2b172e9 upstream.

    On some servers there is a hardcoded EDID provided
    in the vbios so that the driver will always see a
    display connected even if something like a KVM
    prevents traditional means like DDC or load
    detection from working properly. Also most
    server boards with DVI are not actually DVI, but
    DVO connected to a virtual KVM service processor.
    If we fail to detect a monitor via DDC or load
    detection and a hardcoded EDID is available, use
    it.

    Additionally, when using the hardcoded EDID, use
    a copy of it rather than the actual one stored
    in the driver as the detect() and get_modes()
    functions may free it if DDC is successful.

    This fixes the virtual KVM on several internal
    servers.

    Signed-off-by: Alex Deucher
    Signed-off-by: Dave Airlie
    Signed-off-by: Greg Kroah-Hartman

    Alex Deucher
     
  • commit 64146f8b2af1ba77fe3c21d9d6d7213b9bb72b40 upstream.

    ntsc seems to work fine with either algo, some
    pal TVs seem pickier.

    Fixes:
    https://bugzilla.kernel.org/show_bug.cgi?id=30832

    Signed-off-by: Alex Deucher
    Signed-off-by: Dave Airlie
    Signed-off-by: Greg Kroah-Hartman

    Alex Deucher
     
  • commit b74ad5ae14def5e81ad0be3dddb96e485b861b1b upstream.

    As we may release the last reference, we need to store the device in a
    local variable in order to unlock afterwards.

    [ 60.140768] BUG: unable to handle kernel paging request at 6b6b6b9f
    [ 60.140973] IP: [] __mutex_unlock_slowpath+0x5a/0x111
    [ 60.141014] *pdpt = 0000000024a54001 *pde = 0000000000000000
    [ 60.141014] Oops: 0002 [#1] PREEMPT SMP
    [ 60.141014] last sysfs file: /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/PNP0C0A:00/power_supply/BAT0/voltage_now
    [ 60.141014] Modules linked in: uvcvideo ath9k pegasus ath9k_common ath9k_hw hid_egalax ath3k joydev asus_laptop sparse_keymap battery input_polldev
    [ 60.141014]
    [ 60.141014] Pid: 771, comm: meego-ux-daemon Not tainted 2.6.37.2-7.1 #1 EXOPC EXOPG06411/EXOPG06411
    [ 60.141014] EIP: 0060:[] EFLAGS: 00010046 CPU: 0
    [ 60.141014] EIP is at __mutex_unlock_slowpath+0x5a/0x111
    [ 60.141014] EAX: 00000100 EBX: 6b6b6b9b ECX: e9b4a1b0 EDX: e4a4e580
    [ 60.141014] ESI: db162558 EDI: 00000246 EBP: e480be50 ESP: e480be44
    [ 60.141014] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
    [ 60.141014] Process meego-ux-daemon (pid: 771, ti=e480a000 task=e9b4a1b0 task.ti=e480a000)
    [ 60.141014] Stack:
    [ 60.141014] e4a4e580 db162558 f5a2f838 e480be58 c1536dd0 e480be68 c125ab1b db162558
    [ 60.141014] db1624e0 e480be78 c10ba071 db162558 f760241c e480be94 c10bb0bc 000155fe
    [ 60.141014] f760241c f5a2f838 f5a2f8c8 00000000 e480bea4 c1037c24 00000000 f5a2f838
    [ 60.141014] Call Trace:
    [ 60.141014] [] ? mutex_unlock+0x8/0xa
    [ 60.141014] [] ? drm_gem_vm_close+0x39/0x3d
    [ 60.141014] [] ? remove_vma+0x2d/0x58
    [ 60.141014] [] ? exit_mmap+0x126/0x13f
    [ 60.141014] [] ? mmput+0x37/0x9a
    [ 60.141014] [] ? exec_mmap+0x178/0x19c
    [ 60.141014] [] ? _raw_spin_unlock+0x1d/0x36
    [ 60.141014] [] ? flush_old_exec+0x42/0x75
    [ 60.141014] [] ? load_elf_binary+0x32a/0x922
    [ 60.141014] [] ? search_binary_handler+0x200/0x2ea
    [ 60.141014] [] ? search_binary_handler+0x159/0x2ea
    [ 60.141014] [] ? load_elf_binary+0x0/0x922
    [ 60.141014] [] ? do_execve+0x1ff/0x2e6
    [ 60.141014] [] ? sys_execve+0x2d/0x55
    [ 60.141014] [] ? ptregs_execve+0x12/0x18
    [ 60.141014] [] ? sysenter_do_call+0x12/0x3c
    [ 60.141014] [] ? init_centaur+0x9c/0x1ba
    [ 60.141014] Code: c1 00 75 0f ba 38 01 00 00 b8 8c 3a 6c c1 e8 cc 2e b0 ff 9c 58 8d 74 26 00 89 c7 fa 90 8d 74 26 00 e8 d2 b4 b2 ff b8 00 01 00 00 66 0f c1 43 04 38 e0 74 07 f3 90 8a 43 04 eb f5 83 3d 64 ef
    [ 60.141014] EIP: [] __mutex_unlock_slowpath+0x5a/0x111 SS:ESP 0068:e480be44
    [ 60.141014] CR2: 000000006b6b6b9f

    Reported-by: Rusty Lynch
    Signed-off-by: Chris Wilson
    Signed-off-by: Dave Airlie
    Signed-off-by: Greg Kroah-Hartman

    Chris Wilson
     
  • commit 09bfa51773c1e90f13000dc2fc0c4b84047009bc upstream.

    When i915_gem_retire_requests_ring calls i915_gem_request_remove_from_client,
    the client_list for that request may already be removed in i915_gem_release.
    So we may call twice list_del(&request->client_list), resulting in an
    oops like this report:

    [126167.230394] BUG: unable to handle kernel paging request at 00100104
    [126167.230699] IP: [] i915_gem_retire_requests_ring+0xd4/0x240 [i915]
    [126167.231042] *pdpt = 00000000314c1001 *pde = 0000000000000000
    [126167.231314] Oops: 0002 [#1] SMP
    [126167.231471] last sysfs file: /sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT1/current_now
    [126167.231901] Modules linked in: snd_seq_dummy nls_utf8 isofs btrfs zlib_deflate libcrc32c ufs qnx4 hfsplus hfs minix ntfs vfat msdos fat jfs xfs exportfs reiserfs cryptd aes_i586 aes_generic binfmt_misc vboxnetadp vboxnetflt vboxdrv parport_pc ppdev snd_hda_codec_hdmi snd_hda_codec_conexant snd_hda_intel snd_hda_codec snd_hwdep arc4 snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq uvcvideo videodev snd_timer snd_seq_device joydev iwlagn iwlcore mac80211 snd cfg80211 soundcore i915 drm_kms_helper snd_page_alloc psmouse drm serio_raw i2c_algo_bit video lp parport usbhid hid sky2 sdhci_pci ahci sdhci libahci
    [126167.232018]
    [126167.232018] Pid: 1101, comm: Xorg Not tainted 2.6.38-6-generic-pae #34-Ubuntu Gateway MC7833U /
    [126167.232018] EIP: 0060:[] EFLAGS: 00213246 CPU: 0
    [126167.232018] EIP is at i915_gem_retire_requests_ring+0xd4/0x240 [i915]
    [126167.232018] EAX: 00200200 EBX: f1ac25b0 ECX: 00000040 EDX: 00100100
    [126167.232018] ESI: f1a2801c EDI: e87fc060 EBP: ef4d7dd8 ESP: ef4d7db0
    [126167.232018] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    [126167.232018] Process Xorg (pid: 1101, ti=ef4d6000 task=f1ba6500 task.ti=ef4d6000)
    [126167.232018] Stack:
    [126167.232018] f1a28000 f1a2809c f1a28094 0058bd97 f1aa2400 f1a2801c 0058bd7b 0058bd85
    [126167.232018] f1a2801c f1a28000 ef4d7e38 f8c2e995 ef4d7e30 ef4d7e60 c14d1ebc f6b3a040
    [126167.232018] f1522cc0 000000db 00000000 f1ba6500 ffffffa1 00000000 00000001 f1a29214
    [126167.232018] Call Trace:

    Unfortunately the call trace reported was cut, but looking at debug
    symbols the crash is at __list_del, when probably list_del is called
    twice on the same request->client_list, as the dereferenced value is
    LIST_POISON1 + 4, and by looking more at the debug symbols before
    list_del call it should have being called by
    i915_gem_request_remove_from_client

    And as I can see in the code, it seems we indeed have the possibility
    to remove a request->client_list twice, which would cause the above,
    because we do list_del(&request->client_list) on both
    i915_gem_request_remove_from_client and i915_gem_release

    As Chris Wilson pointed out, it's indeed the case:
    "(...) I had thought that the actual insertion/deletion was serialised
    under the struct mutex and the intention of the spinlock was to protect
    the unlocked list traversal during throttling. However, I missed that
    i915_gem_release() is also called without struct mutex and so we do need
    the double check for i915_gem_request_remove_from_client()."

    This change does the required check to avoid the duplicate remove of
    request->client_list.

    Bugzilla: http://bugs.launchpad.net/bugs/733780
    Signed-off-by: Herton Ronaldo Krzesinski
    Signed-off-by: Chris Wilson
    Signed-off-by: Greg Kroah-Hartman

    Herton Ronaldo Krzesinski
     
  • commit fb3b06c8a1fd1a80298f13b738ab38ef8c73baff upstream.

    Noticed this while working on some other things, helps if we check for modeset
    enabled on modesetting ioctls.

    Signed-off-by: Dave Airlie
    Signed-off-by: Greg Kroah-Hartman

    Dave Airlie
     
  • commit e5f15b45ddf3afa2bbbb10c7ea34fb32b6de0a0e upstream.

    Now cleanup_highmap actually is in two steps: one is early in head64.c
    and only clears above _end; a second one is in init_memory_mapping() and
    tries to clean from _brk_end to _end.
    It should check if those boundaries are PMD_SIZE aligned but currently
    does not.
    Also init_memory_mapping() is called several times for numa or memory
    hotplug, so we really should not handle initial kernel mappings there.

    This patch moves cleanup_highmap() down after _brk_end is settled so
    we can do everything in one step.
    Also we honor max_pfn_mapped in the implementation of cleanup_highmap.

    Signed-off-by: Yinghai Lu
    Signed-off-by: Stefano Stabellini
    LKML-Reference:
    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    Yinghai Lu
     
  • commit 8c3c283e6bf463ab498d6e7823aff6c4762314b6 upstream.

    A virtualized display device is usually viewed with the vncviewer
    application, either by 'xm vnc domU' or with vncviewer localhost:port.
    vncviewer and the RFB protocol provides absolute coordinates to the
    virtual display. These coordinates are either passed through to a PV
    guest or converted to relative coordinates for a HVM guest.

    A PV guest receives these coordinates and passes them to the kernels
    evdev driver. There it can be picked up by applications such as the
    xorg-input drivers. Using absolute coordinates avoids issues such as
    guest mouse pointer not tracking host mouse pointer due to wrong mouse
    acceleration settings in the guests X display.

    Advertise either absolute or relative coordinates to the input system
    and the evdev driver, depending on what dom0 provides. The xorg-input
    driver prefers relative coordinates even if a devices provides both.

    Signed-off-by: Olaf Hering
    Signed-off-by: Stefano Stabellini
    Signed-off-by: Dmitry Torokhov
    Signed-off-by: Greg Kroah-Hartman

    Olaf Hering
     
  • commit 95f28604a65b1c40b6c6cd95e58439cd7ded3add upstream.

    We don't have proper reference counting for this yet, so we run into
    cases where the device is pulled and we OOPS on flushing the fs data.
    This happens even though the dirty inodes have already been
    migrated to the default_backing_dev_info.

    Reported-by: Torsten Hilbrich
    Tested-by: Torsten Hilbrich
    Signed-off-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Jens Axboe
     
  • commit 7e7797e7f6f7bfab73fca02c65e40eaa5bb9000c upstream.

    Fix potential null-pointer exception on disconnect introduced by commit
    11ea859d64b69a747d6b060b9ed1520eab1161fe (USB: additional power savings
    for cdc-acm devices that support remote wakeup).

    Only access acm->dev after making sure it is non-null in control urb
    completion handler.

    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     
  • commit 15e5bee33ffc11d0e5c6f819a65e7881c5c407be upstream.

    Must check return value of tty_port_tty_get.

    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     
  • commit 23b80550e2aa61d0ba3af98b831b9195be0db9ee upstream.

    Prevent read urbs from being resubmitted from tasklet after port close.

    The receive tasklet was not disabled on port close, which could lead to
    corruption of receive lists on consecutive port open. In particular,
    read urbs could be re-submitted before port open, added to free list in
    open, and then added a second time to the free list in the completion
    handler.

    cdc-acm.c: Entering acm_tty_open.
    cdc-acm.c: acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
    cdc-acm.c: Entering acm_rx_tasklet
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da280, rcv 0xf57fbc24, buf 0xf57fbd64
    cdc-acm.c: set line: 115200 0 0 8
    cdc-acm.c: acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
    cdc-acm.c: acm_tty_close
    cdc-acm.c: acm_port_down
    cdc-acm.c: acm_control_msg: rq: 0x22 val: 0x0 len: 0x0 result: 0
    cdc-acm.c: acm_ctrl_irq - urb shutting down with status: -2
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da300, rcv 0xf57fbc10, buf 0xf57fbd50
    cdc-acm.c: Entering acm_read_bulk with status -2
    cdc_acm 4-1:1.1: Aborting, acm not ready
    cdc-acm.c: Entering acm_read_bulk with status -2
    cdc_acm 4-1:1.1: Aborting, acm not ready
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da380, rcv 0xf57fbbfc, buf 0xf57fbd3c
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da400, rcv 0xf57fbbe8, buf 0xf57fbd28
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da480, rcv 0xf57fbbd4, buf 0xf57fbd14
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da900, rcv 0xf57fbbc0, buf 0xf57fbd00
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da980, rcv 0xf57fbbac, buf 0xf57fbcec
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50daa00, rcv 0xf57fbb98, buf 0xf57fbcd8
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50daa80, rcv 0xf57fbb84, buf 0xf57fbcc4
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dab00, rcv 0xf57fbb70, buf 0xf57fbcb0
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dab80, rcv 0xf57fbb5c, buf 0xf57fbc9c
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dac00, rcv 0xf57fbb48, buf 0xf57fbc88
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dac80, rcv 0xf57fbb34, buf 0xf57fbc74
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dad00, rcv 0xf57fbb20, buf 0xf57fbc60
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50dad80, rcv 0xf57fbb0c, buf 0xf57fbc4c
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da880, rcv 0xf57fbaf8, buf 0xf57fbc38
    cdc-acm.c: Entering acm_tty_open.
    cdc-acm.c: acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
    cdc-acm.c: Entering acm_rx_tasklet
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da280, rcv 0xf57fbc24, buf 0xf57fbd64
    cdc-acm.c: Entering acm_tty_write to write 3 bytes,
    cdc-acm.c: Get 3 bytes...
    cdc-acm.c: acm_write_start susp_count: 0
    cdc-acm.c: Entering acm_read_bulk with status 0
    ------------[ cut here ]------------
    WARNING: at /home/johan/src/linux/linux-2.6/lib/list_debug.c:57 list_del+0x10c/0x120()
    Hardware name: Vostro 1520
    list_del corruption. next->prev should be f57fbc10, but was f57fbaf8
    Modules linked in: cdc_acm
    Pid: 3, comm: ksoftirqd/0 Not tainted 2.6.37+ #39
    Call Trace:
    [] warn_slowpath_common+0x72/0xa0
    [] ? list_del+0x10c/0x120
    [] ? list_del+0x10c/0x120
    [] warn_slowpath_fmt+0x33/0x40
    [] list_del+0x10c/0x120
    [] acm_rx_tasklet+0xef/0x3e0 [cdc_acm]
    [] ? net_rps_action_and_irq_enable+0x6d/0x80
    [] tasklet_action+0xe6/0x140
    [] __do_softirq+0xaf/0x210
    [] ? __do_softirq+0x0/0x210
    [] ? run_ksoftirqd+0x8a/0x1c0
    [] ? run_ksoftirqd+0x0/0x1c0
    [] ? kthread+0x74/0x80
    [] ? kthread+0x0/0x80
    [] ? kernel_thread_helper+0x6/0x10
    ---[ end trace efd9a11434f0082e ]---
    ------------[ cut here ]------------
    WARNING: at /home/johan/src/linux/linux-2.6/lib/list_debug.c:57 list_del+0x10c/0x120()
    Hardware name: Vostro 1520
    list_del corruption. next->prev should be f57fbd50, but was f57fbdb0
    Modules linked in: cdc_acm
    Pid: 3, comm: ksoftirqd/0 Tainted: G W 2.6.37+ #39
    Call Trace:
    [] warn_slowpath_common+0x72/0xa0
    [] ? list_del+0x10c/0x120
    [] ? list_del+0x10c/0x120
    [] warn_slowpath_fmt+0x33/0x40
    [] list_del+0x10c/0x120
    [] acm_rx_tasklet+0x106/0x3e0 [cdc_acm]
    [] ? net_rps_action_and_irq_enable+0x6d/0x80
    [] tasklet_action+0xe6/0x140
    [] __do_softirq+0xaf/0x210
    [] ? __do_softirq+0x0/0x210
    [] ? run_ksoftirqd+0x8a/0x1c0
    [] ? run_ksoftirqd+0x0/0x1c0
    [] ? kthread+0x74/0x80
    [] ? kthread+0x0/0x80
    [] ? kernel_thread_helper+0x6/0x10
    ---[ end trace efd9a11434f0082f ]---
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da300, rcv 0xf57fbc10, buf 0xf57fbd50
    cdc-acm.c: disconnected from network
    cdc-acm.c: acm_rx_tasklet: sending urb 0xf50da380, rcv 0xf57fbbfc, buf 0xf57fbd3c
    cdc-acm.c: Entering acm_rx_tasklet
    ------------[ cut here ]------------
    WARNING: at /home/johan/src/linux/linux-2.6/lib/list_debug.c:48 list_del+0xd5/0x120()
    Hardware name: Vostro 1520
    list_del corruption, next is LIST_POISON1 (00100100)
    Modules linked in: cdc_acm
    Pid: 3, comm: ksoftirqd/0 Tainted: G W 2.6.37+ #39
    Call Trace:
    [] warn_slowpath_common+0x72/0xa0
    [] ? list_del+0xd5/0x120
    [] ? list_del+0xd5/0x120
    [] warn_slowpath_fmt+0x33/0x40
    [] list_del+0xd5/0x120
    [] acm_rx_tasklet+0x2dc/0x3e0 [cdc_acm]
    [] ? trace_hardirqs_on+0xb/0x10
    [] ? tasklet_action+0x60/0x140
    [] tasklet_action+0xe6/0x140
    [] __do_softirq+0xaf/0x210
    [] ? __do_softirq+0x0/0x210
    [] ? run_ksoftirqd+0x8a/0x1c0
    [] ? run_ksoftirqd+0x0/0x1c0
    [] ? kthread+0x74/0x80
    [] ? kthread+0x0/0x80
    [] ? kernel_thread_helper+0x6/0x10
    ---[ end trace efd9a11434f00830 ]---
    BUG: unable to handle kernel paging request at 00200200
    IP: [] list_del+0x1d/0x120
    *pde = 00000000
    Oops: 0000 [#1] PREEMPT SMP
    last sysfs file: /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/tty/ttyACM0/uevent
    Modules linked in: cdc_acm
    Pid: 3, comm: ksoftirqd/0 Tainted: G W 2.6.37+ #39 0T816J/Vostro 1520
    EIP: 0060:[] EFLAGS: 00010046 CPU: 0
    EIP is at list_del+0x1d/0x120
    EAX: f57fbd3c EBX: f57fb800 ECX: ffff8000 EDX: 00200200
    ESI: f57fbe90 EDI: f57fbd3c EBP: f600bf54 ESP: f600bf3c
    DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
    Process ksoftirqd/0 (pid: 3, ti=f600a000 task=f60791c0 task.ti=f6082000)
    Stack:
    c1527e84 00000030 c1527e54 00100100 f57fb800 f57fbd3c f600bf98 f8051fac
    f8053104 f8052b94 f600bf6c c106dbab f600bf80 00000286 f60791c0 c1042b30
    f57fbda8 f57f5800 f57fbdb0 f57fbd80 f57fbe7c c1656b04 00000000 f600bfb0
    Call Trace:
    [] ? acm_rx_tasklet+0x2dc/0x3e0 [cdc_acm]
    [] ? trace_hardirqs_on+0xb/0x10
    [] ? tasklet_action+0x60/0x140
    [] ? tasklet_action+0xe6/0x140
    [] ? __do_softirq+0xaf/0x210
    [] ? __do_softirq+0x0/0x210

    [] ? run_ksoftirqd+0x8a/0x1c0
    [] ? run_ksoftirqd+0x0/0x1c0
    [] ? kthread+0x74/0x80
    [] ? kthread+0x0/0x80
    [] ? kernel_thread_helper+0x6/0x10
    Code: ff 48 14 e9 57 ff ff ff 90 90 90 90 90 90 55 89 e5 83 ec 18 81 38 00 01 10 00 0f 84 9c 00 00 00 8b 50 04 81 fa 00 02 20 00 74 33 12 39 d0 75 5c 8b 10 8b 4a 04 39 c8 0f 85 b5 00 00 00 8b 48
    EIP: [] list_del+0x1d/0x120 SS:ESP 0068:f600bf3c
    CR2: 0000000000200200
    ---[ end trace efd9a11434f00831 ]---
    Kernel panic - not syncing: Fatal exception in interrupt
    Pid: 3, comm: ksoftirqd/0 Tainted: G D W 2.6.37+ #39
    Call Trace:
    [] ? printk+0x1d/0x24
    [] panic+0x66/0x15c
    [] oops_end+0x8f/0x90
    [] no_context+0xc6/0x160
    [] __bad_area_nosemaphore+0x98/0x140
    [] ? release_console_sem+0x1d8/0x210
    [] bad_area_nosemaphore+0x17/0x20
    [] do_page_fault+0x279/0x420
    [] ? show_trace+0x1f/0x30
    [] ? printk+0x1d/0x24
    [] ? do_page_fault+0x0/0x420
    [] error_code+0x5f/0x64
    [] ? select_task_rq_fair+0x37b/0x6a0
    [] ? do_page_fault+0x0/0x420
    [] ? list_del+0x1d/0x120
    [] acm_rx_tasklet+0x2dc/0x3e0 [cdc_acm]
    [] ? trace_hardirqs_on+0xb/0x10
    [] ? tasklet_action+0x60/0x140
    [] tasklet_action+0xe6/0x140
    [] __do_softirq+0xaf/0x210
    [] ? __do_softirq+0x0/0x210
    [] ? run_ksoftirqd+0x8a/0x1c0
    [] ? run_ksoftirqd+0x0/0x1c0
    [] ? kthread+0x74/0x80
    [] ? kthread+0x0/0x80
    [] ? kernel_thread_helper+0x6/0x10
    panic occurred, switching back to text console
    ------------[ cut here ]------------

    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     
  • commit 878b753e32ca765cd346a5d3038d630178ec78ff upstream.

    In the WDM class driver a disconnect event leads to calls to
    usb_free_coherent to put back two USB DMA buffers allocated earlier.
    The call to usb_free_coherent uses a different size parameter
    (desc->wMaxCommand) than the corresponding call to usb_alloc_coherent
    (desc->bMaxPacketSize0).

    When a disconnect event occurs, this leads to 'bad dma' complaints
    from usb core because the USB DMA buffer is being pushed back to the
    'buffer-2048' pool from which it has not been allocated.

    This patch against the most recent linux-2.6 kernel ensures that the
    parameters used by usb_alloc_coherent & usb_free_coherent calls in
    cdc-wdm.c match.

    Signed-off-by: Robert Lukassen
    Signed-off-by: Greg Kroah-Hartman

    Robert Lukassen
     
  • commit adaa3c6342b249548ea830fe8e02aa5b45be8688 upstream.

    My testprog do a lot of bitbang - after hours i got following warning and my machine lockups:
    WARNING: at /build/buildd/linux-2.6.38/lib/kref.c:34
    After debugging uss720 driver i discovered that the completion callback was called before
    usb_submit_urb returns. The callback frees the request structure that is krefed on return by
    usb_submit_urb.

    Signed-off-by: Peter Holik
    Acked-by: Thomas Sailer
    Signed-off-by: Greg Kroah-Hartman

    Peter Holik
     
  • commit b5a3b3d985493c173925907adfebf3edab236fe7 upstream.

    This patch (as1453) fixes a long-standing bug in the ehci-hcd driver.

    There is no need to set the Halt bit in the overlay region for an
    unlinked or blocked QH. Contrary to what the comment says, setting
    the Halt bit does not cause the QH to be patched later; that decision
    (made in qh_refresh()) depends only on whether the QH is currently
    pointing to a valid qTD. Likewise, setting the Halt bit does not
    prevent completions from activating the QH while it is "stopped"; they
    are prevented by the fact that qh_completions() temporarily changes
    qh->qh_state to QH_STATE_COMPLETING.

    On the other hand, there are circumstances in which the QH will be
    reactivated _without_ being patched; this happens after an URB beyond
    the head of the queue is unlinked. Setting the Halt bit will then
    cause the hardware to see the QH with both the Active and Halt bits
    set, an invalid combination that will prevent the queue from
    advancing and may even crash some controllers.

    Apparently the only reason this hasn't been reported before is that
    unlinking URBs from the middle of a running queue is quite uncommon.
    However Test 17, recently added to the usbtest driver, does exactly
    this, and it confirms the presence of the bug.

    In short, there is no reason to set the Halt bit for an unlinked or
    blocked QH, and there is a very good reason not to set it. Therefore
    the code that sets it is removed.

    Signed-off-by: Alan Stern
    Tested-by: Andiry Xu
    CC: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit 9d02b42614149ebccf12c9c580601ed01bd83070 upstream.

    When `echo Y > /sys/module/usbcore/parameters/usbfs_snoop` and
    usb_control_msg() returns error, a lot of kernel memory is dumped to dmesg
    until unhandled kernel paging request occurs.

    Signed-off-by: Michal Sojka
    Signed-off-by: Greg Kroah-Hartman

    Michal Sojka
     
  • commit fb7f045ace0624f1e59a7db8497e460bd54b1cbc upstream.

    Since commit 34d0b5af50a063cded842716633501b38ff815fb it is no longer
    possible to debug an application using singlestep. The old commit
    converted singlestep handling via ptrace to hw_breakpoints. The
    hw_breakpoint is disabled when an event is triggered and not re-enabled
    again. This patch re-enables the existing hw_breakpoint before the
    existing breakpoint is reused.

    Signed-off-by: David Engraf
    Signed-off-by: Paul Mundt
    Signed-off-by: Greg Kroah-Hartman

    David Engraf
     
  • commit c49b6ecf0870e78fa40497cd8b142915c1d5c7c9 upstream.

    Commit 0ea820cf introduced the PTRACE_GETFPREGS/SETFPREGS cmds,
    but gdb-server still accesses the FPU state using the
    PTRACE_PEEKUSR/POKEUSR commands. In this case, xstate was not
    initialised.

    Signed-off-by: Phil Edworthy
    Signed-off-by: Paul Mundt
    Signed-off-by: Greg Kroah-Hartman

    Phil Edworthy
     
  • commit 4093a5c4a3f59cba1a085bbf87b6ffdddc5a443d upstream.

    Commit 4057ac6ca9a77c4275b34b5925ab5c99557913b1

    V4L/DVB (13505): uvcvideo: Refactor chain scan

    broke output terminals parsing. Fix it.

    Signed-off-by: Laurent Pinchart
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Greg Kroah-Hartman

    Laurent Pinchart
     
  • commit 38a66824d96de8aeeb915e6f46f0d3fe55828eb1 upstream.

    The scheme used to index format in uvc_fixup_video_ctrl() is not robust:
    format index is based on descriptor ordering, which does not necessarily
    match bFormatIndex ordering. Searching for first matching format will
    prevent uvc_fixup_video_ctrl() from using the wrong format/frame to make
    adjustments.

    Signed-off-by: Stephan Lachowsky
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Greg Kroah-Hartman

    Stephan Lachowsky
     
  • commit 5a02ab7c3c4580f94d13c683721039855b67cda6 upstream.

    We must not use dummy for index.
    After the first index, READ32(dummy) will change dummy!!!!

    Signed-off-by: Mi Jinlong
    [bfields@redhat.com: Trond points out READ_BUF alone is sufficient.]
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Greg Kroah-Hartman

    Mi Jinlong
     
  • commit 0997b173609b9229ece28941c118a2a9b278796e upstream.

    Make sure we properly reference count the struct files that a lock
    depends on, and release them when the lock stateid is released.

    This fixes a major leak of struct files when using locking over nfsv4.

    Reported-by: Rick Koshi
    Tested-by: Ivo Přikryl
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Greg Kroah-Hartman

    J. Bruce Fields
     
  • commit 529d7b2a7fa31e9f7d08bc790d232c3cbe64fa24 upstream.

    Minor cleanup in preparation for a bugfix--moving some code to avoid
    forward references, etc. No change in functionality.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Greg Kroah-Hartman

    J. Bruce Fields
     
  • commit 5ece3cafbd88d4da5c734e1810c4a2e6474b57b2 upstream.

    The members of nfsd4_op_flags, (ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS)
    equals to ALLOWED_AS_FIRST_OP, maybe that's not what we want.

    OP_PUTROOTFH with op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS,
    can't appears as the first operation with out SEQUENCE ops.

    This patch modify the wrong value of ALLOWED_WITHOUT_FH etc which
    was introduced by f9bb94c4.

    Reviewed-by: Benny Halevy
    Signed-off-by: Mi Jinlong
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Greg Kroah-Hartman

    Mi Jinlong
     
  • commit d6244bc0ed0c52a795e6f4dcab3886daf3e74fac upstream.

    Use mask 0x10 for "soft cursor" detection on in function tile_cursor.
    (Tile Blitting Operation in framebuffer console).

    The old mask 0x01 for vc_cursor_type detects CUR_NONE, CUR_LOWER_THIRD
    and every second mode value as "software cursor". This hides the cursor
    for these modes (cursor.mode = 0). But, only CUR_NONE or "software cursor"
    should hide the cursor.
    See also 0x10 in functions add_softcursor, bit_cursor and cw_cursor.

    Signed-off-by: Henry Nestler
    Signed-off-by: Paul Mundt
    Signed-off-by: Greg Kroah-Hartman

    Henry Nestler
     
  • commit 5883f57ca0008ffc93e09cbb9847a1928e50c6f3 upstream.

    While mm->start_stack was protected from cross-uid viewing (commit
    f83ce3e6b02d5 ("proc: avoid information leaks to non-privileged
    processes")), the start_code and end_code values were not. This would
    allow the text location of a PIE binary to leak, defeating ASLR.

    Note that the value "1" is used instead of "0" for a protected value since
    "ps", "killall", and likely other readers of /proc/pid/stat, take
    start_code of "0" to mean a kernel thread and will misbehave. Thanks to
    Brad Spengler for pointing this out.

    Addresses CVE-2011-0726

    Signed-off-by: Kees Cook
    Cc: Alexey Dobriyan
    Cc: David Howells
    Cc: Eugene Teo
    Cc: Martin Schwidefsky
    Cc: Brad Spengler
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     
  • commit 0db0c01b53a1a421513f91573241aabafb87802a upstream.

    The current code fails to print the "[heap]" marking if the heap is split
    into multiple mappings.

    Fix the check so that the marking is displayed in all possible cases:
    1. vma matches exactly the heap
    2. the heap vma is merged e.g. with bss
    3. the heap vma is splitted e.g. due to locked pages

    Test cases. In all cases, the process should have mapping(s) with
    [heap] marking:

    (1) vma matches exactly the heap

    #include
    #include
    #include

    int main (void)
    {
    if (sbrk(4096) != (void *)-1) {
    printf("check /proc/%d/maps\n", (int)getpid());
    while (1)
    sleep(1);
    }
    return 0;
    }

    # ./test1
    check /proc/553/maps
    [1] + Stopped ./test1
    # cat /proc/553/maps | head -4
    00008000-00009000 r-xp 00000000 01:00 3113640 /test1
    00010000-00011000 rw-p 00000000 01:00 3113640 /test1
    00011000-00012000 rw-p 00000000 00:00 0 [heap]
    4006f000-40070000 rw-p 00000000 00:00 0

    (2) the heap vma is merged

    #include
    #include
    #include

    char foo[4096] = "foo";
    char bar[4096];

    int main (void)
    {
    if (sbrk(4096) != (void *)-1) {
    printf("check /proc/%d/maps\n", (int)getpid());
    while (1)
    sleep(1);
    }
    return 0;
    }

    # ./test2
    check /proc/556/maps
    [2] + Stopped ./test2
    # cat /proc/556/maps | head -4
    00008000-00009000 r-xp 00000000 01:00 3116312 /test2
    00010000-00012000 rw-p 00000000 01:00 3116312 /test2
    00012000-00014000 rw-p 00000000 00:00 0 [heap]
    4004a000-4004b000 rw-p 00000000 00:00 0

    (3) the heap vma is splitted (this fails without the patch)

    #include
    #include
    #include
    #include

    int main (void)
    {
    if ((sbrk(4096) != (void *)-1) && !mlockall(MCL_FUTURE) &&
    (sbrk(4096) != (void *)-1)) {
    printf("check /proc/%d/maps\n", (int)getpid());
    while (1)
    sleep(1);
    }
    return 0;
    }

    # ./test3
    check /proc/559/maps
    [1] + Stopped ./test3
    # cat /proc/559/maps|head -4
    00008000-00009000 r-xp 00000000 01:00 3119108 /test3
    00010000-00011000 rw-p 00000000 01:00 3119108 /test3
    00011000-00012000 rw-p 00000000 00:00 0 [heap]
    00012000-00013000 rw-p 00000000 00:00 0 [heap]

    It looks like the bug has been there forever, and since it only results in
    some information missing from a procfile, it does not fulfil the -stable
    "critical issue" criteria.

    Signed-off-by: Aaro Koskinen
    Reviewed-by: KOSAKI Motohiro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Aaro Koskinen
     
  • commit bfdc0b497faa82a0ba2f9dddcf109231dd519fcc upstream.

    When dmesg_restrict is set to 1 CAP_SYS_ADMIN is needed to read the kernel
    ring buffer. But a root user without CAP_SYS_ADMIN is able to reset
    dmesg_restrict to 0.

    This is an issue when e.g. LXC (Linux Containers) are used and complete
    user space is running without CAP_SYS_ADMIN. A unprivileged and jailed
    root user can bypass the dmesg_restrict protection.

    With this patch writing to dmesg_restrict is only allowed when root has
    CAP_SYS_ADMIN.

    Signed-off-by: Richard Weinberger
    Acked-by: Dan Rosenberg
    Acked-by: Serge E. Hallyn
    Cc: Eric Paris
    Cc: Kees Cook
    Cc: James Morris
    Cc: Eugene Teo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Richard Weinberger
     
  • commit ce654b37f87980d95f339080e4c3bdb2370bdf22 upstream.

    Orphan cleanup is currently executed even if the file system has some
    number of unknown ROCOMPAT features, which deletes inodes and frees
    blocks, which could be very bad for some RO_COMPAT features.

    This patch skips the orphan cleanup if it contains readonly compatible
    features not known by this ext3 implementation, which would prevent
    the fs from being mounted (or remounted) readwrite.

    Signed-off-by: Amir Goldstein
    Signed-off-by: Jan Kara
    Signed-off-by: Greg Kroah-Hartman

    Amir Goldstein
     
  • This is a fixup for the 2.6.38 kernel, as the issue is being resolved
    by upstream commits 699d899560cd7e72da39231e584412e7ac8114a4 and
    094a42452abd5564429045e210281c6d22e67fca - which are too invasive
    to reach 2.6.38. Instead make pin fixes as a workaround.

    BugLink: http://bugs.launchpad.net/bugs/740055
    Tested-by: Kent Baxley
    Signed-off-by: David Henningsson
    Acked-by: Takashi Iwai

    David Henningsson
     
  • commit da48524eb20662618854bb3df2db01fc65f3070c upstream.

    Userland should be able to trust the pid and uid of the sender of a
    signal if the si_code is SI_TKILL.

    Unfortunately, the kernel has historically allowed sigqueueinfo() to
    send any si_code at all (as long as it was negative - to distinguish it
    from kernel-generated signals like SIGILL etc), so it could spoof a
    SI_TKILL with incorrect siginfo values.

    Happily, it looks like glibc has always set si_code to the appropriate
    SI_QUEUE, so there are probably no actual user code that ever uses
    anything but the appropriate SI_QUEUE flag.

    So just tighten the check for si_code (we used to allow any negative
    value), and add a (one-time) warning in case there are binaries out
    there that might depend on using other si_code values.

    Signed-off-by: Julien Tinnes
    Acked-by: Oleg Nesterov
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Julien Tinnes
     
  • commit bfb53ccf1c734b1907df7189eef4c08489827951 upstream.

    Just as we had to disable auto-demotion for NHM/WSM,
    we need to do the same for Atom (Lincroft version).

    In particular, auto-demotion will prevent Lincroft
    from entering the S0i3 idle power saving state.

    https://bugzilla.kernel.org/show_bug.cgi?id=25252

    Signed-off-by: Len Brown
    Signed-off-by: Greg Kroah-Hartman

    Len Brown
     
  • commit 14796fca2bd22acc73dd0887248d003b0f441d08 upstream.

    Hardware C-state auto-demotion is a mechanism where the HW overrides
    the OS C-state request, instead demoting to a shallower state,
    which is less expensive, but saves less power.

    Modern Linux should generally get exactly the states it requests.
    In particular, when a CPU is taken off-line, it must not be demoted, else
    it can prevent the entire package from reaching deep C-states.

    https://bugzilla.kernel.org/show_bug.cgi?id=25252

    Signed-off-by: Len Brown
    Signed-off-by: Greg Kroah-Hartman

    Len Brown
     
  • commit 14988a4d350ce3b41ecad4f63c4f44c56f5ae34d upstream.

    Do not set max_pfn_mapped to the end of the initial memory mappings,
    that also contain pages that don't belong in pfn space (like the mfn
    list).

    Set max_pfn_mapped to the last real pfn mapped in the initial memory
    mappings that is the pfn backing _end.

    Signed-off-by: Stefano Stabellini
    Acked-by: Konrad Rzeszutek Wilk
    LKML-Reference:
    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    Stefano Stabellini