1. 15 8月, 2006 9 次提交
    • J
      [PATCH] futex_handle_fault always fails · e579dcbf
      john stultz 提交于
      We found this issue last week w/ the -RT kernel, but it seems the same
      issue is in mainline as well.
      
      Basically it is possible for futex_unlock_pi to return without actually
      freeing the lock.  This is due to buggy logic in the use of
      futex_handle_fault() and its attempt argument in a failure case.
      
      Looking at futex.c the logic is as follows:
      
      1) In futex_unlock_pi() we start w/ ret=0 and we go down to the first
         futex_atomic_cmpxchg_inatomic(), where we find uval==-EFAULT.  We then
         jump to the pi_faulted label.
      
      2) From pi_faulted: We increment attempt, unlock the sem and hit the
         retry label.
      
      3) From the retry label, with ret still zero, we again hit EFAULT on the
         first futex_atomic_cmpxchg_inatomic(), and again goto the pi_faulted
         label.
      
      4) Again from pi_faulted: we increment attempt and enter the
         conditional, where we call futex_handle_fault.
      
      5) futex_handle_fault fails, and we goto the out_unlock_release_sem
         label.
      
      6) From out_unlock_release_sem we return, and since ret is still zero,
         we return without error, while never actually unlocking the lock.
      
      Issue #1: at the first futex_atomic_cmpxchg_inatomic() we should probably
      be setting ret=-EFAULT before jumping to pi_faulted: However in our case
      this doesn't really affect anything, as the glibc we're using ignores the
      error value from futex_unlock_pi().
      
      Issue #2: Look at futex_handle_fault(), its first conditional will return
      -EFAULT if attempt is >= 2.  However, from the "if(attempt++)
      futex_handle_fault(attempt)" logic above, we'll *never* call
      futex_handle_fault when attempt is less then two.  So we never get a chance
      to even try to fault the page in.
      
      The following patch addresses these two issues by 1) Always setting ret to
      -EFAULT if futex_handle_fault fails, and 2) Removing the = in
      futex_handle_fault's (attempt >= 2) check.
      
      I'm really not sure this is the right fix, but wanted to bring it up so
      folks knew the issue is alive and well in the current -git tree.  From
      looking at the git logs the logic was first introduced (then later copied
      to other places) in the following commit almost a year ago:
      
      http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4732efbeb997189d9f9b04708dc26bf8613ed721;hp=5b039e681b8c5f30aac9cc04385cc94be45d0823
      
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Ingo Molnar <mingo@elte.hu>
      Acked-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e579dcbf
    • K
      [PATCH] sys_getppid oopses on debug kernel · 6997a6fa
      Kirill Korotaev 提交于
      sys_getppid() optimization can access a freed memory.  On kernels with
      DEBUG_SLAB turned ON, this results in Oops.  As Dave Hansen noted, this
      optimization is also unsafe for memory hotplug.
      
      So this patch always takes the lock to be safe.
      
      [oleg@tv-sign.ru: simplifications]
      Signed-off-by: NKirill Korotaev <dev@openvz.org>
      Cc: <stable@kernel.org>
      Cc: Dave Hansen <haveblue@us.ibm.com>
      Signed-off-by: NOleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6997a6fa
    • H
      [PATCH] Change panic_on_oops message to "Fatal exception" · 012c437d
      Horms 提交于
      Previously the message was "Fatal exception: panic_on_oops", as introduced
      in a recent patch whith removed a somewhat dangerous call to ssleep() in
      the panic_on_oops path.  However, Paul Mackerras suggested that this was
      somewhat confusing, leadind people to believe that it was panic_on_oops
      that was the root cause of the fatal exception.  On his suggestion, this
      patch changes the message to simply "Fatal exception".  A suitable oops
      message should already have been displayed.
      Signed-off-by: NSimon Horman <horms@verge.net.au>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      012c437d
    • M
      [PATCH] dm: BUG/OOPS fix · 485311a2
      Michal Miroslaw 提交于
      Fix BUG I tripped on while testing failover and multipathing.
      
      BUG shows up on error path in multipath_ctr() when parse_priority_group()
      fails after returning at least once without error.  The fix is to
      initialize m->ti early - just after alloc()ing it.
      
      BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000
       printing eip:
      c027c3d2
      *pde = 00000000
      Oops: 0000 [#3]
      Modules linked in: qla2xxx ext3 jbd mbcache sg ide_cd cdrom floppy
      CPU:    0
      EIP:    0060:[<c027c3d2>]    Not tainted VLI
      EFLAGS: 00010202   (2.6.17.3 #1)
      EIP is at dm_put_device+0xf/0x3b
      eax: 00000001   ebx: ee4fcac0   ecx: 00000000   edx: ee4fcac0
      esi: ee4fc4e0   edi: ee4fc4e0   ebp: 00000000   esp: c5db3e78
      ds: 007b   es: 007b   ss: 0068
      Process multipathd (pid: 15912, threadinfo=c5db2000 task=ef485a90)
      Stack: ec4eda40 c02816bd ee4fc4c0 00000000 f7e89498 f883e0bc c02816f6 f7e89480
             f7e8948c c0281801 ffffffea f7e89480 f883e080 c0281ffe 00000001 00000000
             00000004 dfe9cab8 f7a693c0 f883e080 f883e0c0 ca4b99c0 c027c6ee 01400000
      Call Trace:
       <c02816bd> free_pgpaths+0x31/0x45  <c02816f6> free_priority_group+0x25/0x2e
       <c0281801> free_multipath+0x35/0x67  <c0281ffe> multipath_ctr+0x123/0x12d
       <c027c6ee> dm_table_add_target+0x11e/0x18b  <c027e5b4> populate_table+0x8a/0xaf
       <c027e62b> table_load+0x52/0xf9  <c027ec23> ctl_ioctl+0xca/0xfc
       <c027e5d9> table_load+0x0/0xf9  <c0152146> do_ioctl+0x3e/0x43
       <c0152360> vfs_ioctl+0x16c/0x178  <c01523b4> sys_ioctl+0x48/0x60
       <c01029b3> syscall_call+0x7/0xb
      Code: 97 f0 00 00 00 89 c1 83 c9 01 80 e2 01 0f 44 c1 88 43 14 8b 04 24 59 5b 5e 5f 5d c3 53 89 c1 89 d3 ff 4a 08 0f 94 c0 84 c0 74 2a <8b> 01 8b 10 89 d8 e8 f6 fb ff ff 8b 03 8b 53 04 89 50 04 89 02
      EIP: [<c027c3d2>] dm_put_device+0xf/0x3b SS:ESP 0068:c5db3e78
      Signed-off-by: NMichal Miroslaw <mirq-linux@rere.qmqm.pl>
      Acked-by: NAlasdair G Kergon <agk@redhat.com>
      Cc: <stable@kernel.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      485311a2
    • A
      [PATCH] panic.c build fix · 657b3010
      Andrew Morton 提交于
      kernel/panic.c: In function 'add_taint':
      kernel/panic.c:176: warning: implicit declaration of function 'debug_locks_off'
      
      Cc: Andi Kleen <ak@muc.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      657b3010
    • J
      [PATCH] fix hrtimer percpu usage typo · 3773dc92
      Jan Blunck 提交于
      The percpu variable is used incorrectly in switch_hrtimer_base().
      Signed-off-by: NJan Blunck <jblunck@suse.de>
      Acked-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3773dc92
    • D
      [PATCH] initialize parts of udf inode earlier in create · 95f8797f
      Dan Bastone 提交于
      Eric says:
      
      > I saw an oops down this path when trying to create a new file on a UDF
      > filesystem which was internally marked as readonly, but mounted rw:
      >
      > udf_create
      >         udf_new_inode
      >                 new_inode
      >                         alloc_inode
      >                         	udf_alloc_inode
      >                 udf_new_block
      >                         returns EIO due to readonlyness
      >                 iput (on error)
      
      I ran into the same issue today, but when listing a directory with
      invalid/corrupt entries:
      
      udf_lookup
              udf_iget
                      get_new_inode_fast
                              alloc_inode
                                      udf_alloc_inode
                      __udf_read_inode
                              fails for any reason
                      iput (on error)
                              ...
      
      The following patch to udf_alloc_inode() should take care of both (and
      other similar) cases, but I've only tested it with udf_lookup().
      Signed-off-by: NDan Bastone <dan@pwienterprises.com>
      Cc: Eric Sandeen <sandeen@sandeen.net>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      95f8797f
    • A
      [PATCH] adfs error message fix · 1725cd0a
      Andrew Morton 提交于
      Don't use NULL as a printf control string.  Fixes bug #6889.
      
      Cc: Ralph Corderoy <ralph@inputplus.co.uk>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      1725cd0a
    • E
      [PATCH] add imacfb documentation and detection · b64ef8af
      Edgar Hucek 提交于
      Add basic Machine detection to imacfb and some Ducumentation bits for
      imacfb.
      Signed-off-by: NEdgar Hucek <hostmaster@ed-soft.at>
      Cc: "Antonino A. Daplas" <adaplas@pol.net>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b64ef8af
  2. 14 8月, 2006 8 次提交
  3. 12 8月, 2006 11 次提交
  4. 11 8月, 2006 2 次提交
  5. 10 8月, 2006 8 次提交
  6. 09 8月, 2006 2 次提交
    • D
      [NET]: add_timer -> mod_timer() in dst_run_gc() · 7c91767a
      Dmitry Mishin 提交于
      Patch from Dmitry Mishin <dim@openvz.org>:
      
      Replace add_timer() by mod_timer() in dst_run_gc
      in order to avoid BUG message.
      
             CPU1                            CPU2
      dst_run_gc()  entered           dst_run_gc() entered
      spin_lock(&dst_lock)                   .....
      del_timer(&dst_gc_timer)         fail to get lock
             ....                         mod_timer() <--- puts 
                                                       timer back
                                                       to the list
      add_timer(&dst_gc_timer) <--- BUG because timer is in list already.
      
      Found during OpenVZ internal testing.
      
      At first we thought that it is OpenVZ specific as we
      added dst_run_gc(0) call in dst_dev_event(),
      but as Alexey pointed to me it is possible to trigger
      this condition in mainstream kernel.
      
      F.e. timer has fired on CPU2, but the handler was preeempted
      by an irq before dst_lock is tried.
      Meanwhile, someone on CPU1 adds an entry to gc list and
      starts the timer.
      If CPU2 was preempted long enough, this timer can expire
      simultaneously with resuming timer handler on CPU1, arriving
      exactly to the situation described.
      Signed-off-by: NDmitry Mishin <dim@openvz.org>
      Signed-off-by: NKirill Korotaev <dev@openvz.org>
      Signed-off-by: NAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7c91767a
    • T
      [PATCH] libata: clear sdev->locked on door lock failure · 22aac089
      Tejun Heo 提交于
      SCSI EH locks door if sdev->locked is set.  Sometimes door lock
      command fails continuously (e.g. when medium is not present) and as
      libata uses EH to acquire sense data, this easily creates a loop where
      a failed lock door invokes EH and EH issues lock door on completion.
      
      This patch clears sdev->locked on door lock failure to break this
      loop.  This problem has been spotted and diagnosed by Unicorn Chang
      <uchang@tw.ibm.com>.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      22aac089