<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lwn.git/kernel, branch v2.6.22.14</title>
<subtitle>Linux kernel documentation tree maintained by Jonathan Corbet</subtitle>
<id>http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v2.6.22.14</id>
<link rel='self' href='http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v2.6.22.14'/>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/'/>
<updated>2007-11-21T17:25:53+00:00</updated>
<entry>
<title>fix param_sysfs_builtin name length check</title>
<updated>2007-11-21T17:25:53+00:00</updated>
<author>
<name>Jan Kiszka</name>
<email>jan.kiszka@web.de</email>
</author>
<published>2007-11-15T01:00:08+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=79d84e19d774dd71757b9dff90179ae593eaf550'/>
<id>urn:sha1:79d84e19d774dd71757b9dff90179ae593eaf550</id>
<content type='text'>
patch 22800a2830ec07e7cc5c837999890ac47cc7f5de in mainline.

Commit faf8c714f4508207a9c81cc94dafc76ed6680b44 caused a regression:
parameter names longer than MAX_KBUILD_MODNAME will now be rejected,
although we just need to keep the module name part that short.  This patch
restores the old behaviour while still avoiding that memchr is called with
its length parameter larger than the total string length.

Signed-off-by: Jan Kiszka &lt;jan.kiszka@web.de&gt;
Cc: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Chuck Ebbert &lt;cebbert@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>Fix compat futex hangs.</title>
<updated>2007-11-21T17:25:52+00:00</updated>
<author>
<name>David Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2007-11-13T07:59:05+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=52c7418eff50d66116b94c6e0a3cb08651dc49c3'/>
<id>urn:sha1:52c7418eff50d66116b94c6e0a3cb08651dc49c3</id>
<content type='text'>
[FUTEX]: Fix address computation in compat code.

[ Upstream commit: 3c5fd9c77d609b51c0bab682c9d40cbb496ec6f1 ]

compat_exit_robust_list() computes a pointer to the
futex entry in userspace as follows:

	(void __user *)entry + futex_offset

'entry' is a 'struct robust_list __user *', and
'futex_offset' is a 'compat_long_t' (typically a 's32').

Things explode if the 32-bit sign bit is set in futex_offset.

Type promotion sign extends futex_offset to a 64-bit value before
adding it to 'entry'.

This triggered a problem on sparc64 running 32-bit applications which
would lock up a cpu looping forever in the fault handling for the
userspace load in handle_futex_death().

Compat userspace runs with address masking (wherein the cpu zeros out
the top 32-bits of every effective address given to a memory operation
instruction) so the sparc64 fault handler accounts for this by
zero'ing out the top 32-bits of the fault address too.

Since the kernel properly uses the compat_uptr interfaces, kernel side
accesses to compat userspace work too since they will only use
addresses with the top 32-bit clear.

Because of this compat futex layer bug we get into the following loop
when executing the get_user() load near the top of handle_futex_death():

1) load from address '0xfffffffff7f16bd8', FAULT
2) fault handler clears upper 32-bits, processes fault
   for address '0xf7f16bd8' which succeeds
3) goto #1

I want to thank Bernd Zeimetz, Josip Rodin, and Fabio Massimo Di Nitto
for their tireless efforts helping me track down this bug.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>wait_task_stopped: Check p-&gt;exit_state instead of TASK_TRACED (CVE-2007-5500)</title>
<updated>2007-11-16T18:26:41+00:00</updated>
<author>
<name>Roland McGrath</name>
<email>roland@redhat.com</email>
</author>
<published>2007-11-14T06:11:50+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=5ef016ad9ba96a77a7249a2bd8d3196af5bfd920'/>
<id>urn:sha1:5ef016ad9ba96a77a7249a2bd8d3196af5bfd920</id>
<content type='text'>
patch a3474224e6a01924be40a8255636ea5522c1023a in mainline

The original meaning of the old test (p-&gt;state &gt; TASK_STOPPED) was
"not dead", since it was before TASK_TRACED existed and before the
state/exit_state split.  It was a wrong correction in commit
14bf01bb0599c89fc7f426d20353b76e12555308 to make this test for
TASK_TRACED instead.  It should have been changed when TASK_TRACED
was introducted and again when exit_state was introduced.

Signed-off-by: Roland McGrath &lt;roland@redhat.com&gt;
Cc: Oleg Nesterov &lt;oleg@tv-sign.ru&gt;
Cc: Alexey Dobriyan &lt;adobriyan@sw.ru&gt;
Cc: Kees Cook &lt;kees@ubuntu.com&gt;
Acked-by: Scott James Remnant &lt;scott@ubuntu.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>param_sysfs_builtin memchr argument fix</title>
<updated>2007-11-05T17:56:07+00:00</updated>
<author>
<name>Dave Young</name>
<email>hidave.darkstar@gmail.com</email>
</author>
<published>2007-10-18T10:05:07+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=b5f591838db12ca39e25b70278beec499fa56751'/>
<id>urn:sha1:b5f591838db12ca39e25b70278beec499fa56751</id>
<content type='text'>
patch faf8c714f4508207a9c81cc94dafc76ed6680b44 in mainline.

If memchr argument is longer than strlen(kp-&gt;name), there will be some
weird result.

It will casuse duplicate filenames in sysfs for the "nousb".  kernel
warning messages are as bellow:

sysfs: duplicate filename 'usbcore' can not be created
WARNING: at fs/sysfs/dir.c:416 sysfs_add_one()
 [&lt;c01c4750&gt;] sysfs_add_one+0xa0/0xe0
 [&lt;c01c4ab8&gt;] create_dir+0x48/0xb0
 [&lt;c01c4b69&gt;] sysfs_create_dir+0x29/0x50
 [&lt;c024e0fb&gt;] create_dir+0x1b/0x50
 [&lt;c024e3b6&gt;] kobject_add+0x46/0x150
 [&lt;c024e2da&gt;] kobject_init+0x3a/0x80
 [&lt;c053b880&gt;] kernel_param_sysfs_setup+0x50/0xb0
 [&lt;c053b9ce&gt;] param_sysfs_builtin+0xee/0x130
 [&lt;c053ba33&gt;] param_sysfs_init+0x23/0x60
 [&lt;c024d062&gt;] __next_cpu+0x12/0x20
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052a856&gt;] do_initcalls+0x46/0x1e0
 [&lt;c01bdb12&gt;] create_proc_entry+0x52/0x90
 [&lt;c0158d4c&gt;] register_irq_proc+0x9c/0xc0
 [&lt;c01bda94&gt;] proc_mkdir_mode+0x34/0x50
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052aa92&gt;] kernel_init+0x62/0xb0
 [&lt;c0104f83&gt;] kernel_thread_helper+0x7/0x14
 =======================
kobject_add failed for usbcore with -EEXIST, don't try to register things with the same name in the same directory.
 [&lt;c024e466&gt;] kobject_add+0xf6/0x150
 [&lt;c053b880&gt;] kernel_param_sysfs_setup+0x50/0xb0
 [&lt;c053b9ce&gt;] param_sysfs_builtin+0xee/0x130
 [&lt;c053ba33&gt;] param_sysfs_init+0x23/0x60
 [&lt;c024d062&gt;] __next_cpu+0x12/0x20
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052a856&gt;] do_initcalls+0x46/0x1e0
 [&lt;c01bdb12&gt;] create_proc_entry+0x52/0x90
 [&lt;c0158d4c&gt;] register_irq_proc+0x9c/0xc0
 [&lt;c01bda94&gt;] proc_mkdir_mode+0x34/0x50
 [&lt;c052aa30&gt;] kernel_init+0x0/0xb0
 [&lt;c052aa92&gt;] kernel_init+0x62/0xb0
 [&lt;c0104f83&gt;] kernel_thread_helper+0x7/0x14
 =======================
Module 'usbcore' failed to be added to sysfs, error number -17
The system will be unstable now.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Cc: Greg KH &lt;greg@kroah.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Chuck Ebbert &lt;cebbert@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>genirq: suppress resend of level interrupts</title>
<updated>2007-11-05T17:56:06+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2007-08-12T15:46:35+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=2f21ad6334146d5dd5f4bcbbe3eb0f8d343498b7'/>
<id>urn:sha1:2f21ad6334146d5dd5f4bcbbe3eb0f8d343498b7</id>
<content type='text'>
patch 2464286ace55b3abddfb9cc30ab95e2dac1de9a6 in mainline.

Level type interrupts are resent by the interrupt hardware when they are
still active at irq_enable().

Suppress the resend mechanism for interrupts marked as level.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Chuck Ebbert &lt;cebbert@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>genirq: cleanup mismerge artifact</title>
<updated>2007-11-05T17:56:06+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2007-08-12T15:46:34+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=5399b80762e49a543ace1da109537e89e758cea7'/>
<id>urn:sha1:5399b80762e49a543ace1da109537e89e758cea7</id>
<content type='text'>
patch 496634217e5671ed876a0348e9f5b7165e830b20 in mainline.

Commit 5a43a066b11ac2fe84cf67307f20b83bea390f83: "genirq: Allow fasteoi
handler to retrigger disabled interrupts" was erroneously applied to
handle_level_irq().  This added the irq retrigger / resend functionality
to the level irq handler.

Revert the offending bits.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Chuck Ebbert &lt;cebbert@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>lockdep: fix mismatched lockdep_depth/curr_chain_hash</title>
<updated>2007-11-02T15:44:16+00:00</updated>
<author>
<name>Gregory Haskins</name>
<email>ghaskins@novell.com</email>
</author>
<published>2007-10-31T15:44:05+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=8aa78d8d9e98513a529f99f12cfd577531021f9b'/>
<id>urn:sha1:8aa78d8d9e98513a529f99f12cfd577531021f9b</id>
<content type='text'>
patch 3aa416b07f0adf01c090baab26fb70c35ec17623 in mainline.

lockdep: fix mismatched lockdep_depth/curr_chain_hash

It is possible for the current-&gt;curr_chain_key to become inconsistent with the
current index if the chain fails to validate.  The end result is that future
lock_acquire() operations may inadvertently fail to find a hit in the cache
resulting in a new node being added to the graph for every acquire.

[ peterz: this might explain some of the lockdep is so _slow_ complaints. ]
[ mingo: this does not impact the correctness of validation, but may slow
  down future operations significantly, if the chain gets very long. ]

Signed-off-by: Gregory Haskins &lt;ghaskins@novell.com&gt;
Signed-off-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>Fix timer_stats printout of events/sec</title>
<updated>2007-10-10T17:50:16+00:00</updated>
<author>
<name>Anton Blanchard</name>
<email>anton@samba.org</email>
</author>
<published>2007-10-07T07:24:31+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=ceda57cf82ec93444e7d86755e6d43ab11c1b50d'/>
<id>urn:sha1:ceda57cf82ec93444e7d86755e6d43ab11c1b50d</id>
<content type='text'>
commit 74922be1485818ed368c4cf4f0b100f70bf01e08 upstream.

When using /proc/timer_stats on ppc64 I noticed the events/sec field wasnt
accurate.  Sometimes the integer part was incorrect due to rounding (we
werent taking the fractional seconds into consideration).

The fraction part is also wrong, we need to pad the printf statement and
take the bottom three digits of 1000 times the value.

Signed-off-by: Anton Blanchard &lt;anton@samba.org&gt;
Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Fix SMP poweroff hangs</title>
<updated>2007-10-10T17:50:16+00:00</updated>
<author>
<name>Mark Lord</name>
<email>lkml@rtr.ca</email>
</author>
<published>2007-10-01T08:20:10+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=433d028c427f90a2ab38b6eab752e19cd1ac9981'/>
<id>urn:sha1:433d028c427f90a2ab38b6eab752e19cd1ac9981</id>
<content type='text'>
commit 4047727e5ae33f9b8d2b7766d1994ea6e5ec2991 from upstream

We need to disable all CPUs other than the boot CPU (usually 0) before
attempting to power-off modern SMP machines.  This fixes the
hang-on-poweroff issue on my MythTV SMP box, and also on Thomas Gleixner's
new toybox.

Signed-off-by: Mark Lord &lt;mlord@pobox.com&gt;
Acked-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: "Rafael J. Wysocki" &lt;rjw@sisk.pl&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>futex_compat: fix list traversal bugs</title>
<updated>2007-09-26T17:54:40+00:00</updated>
<author>
<name>Arnd Bergmann</name>
<email>arnd@arndb.de</email>
</author>
<published>2007-09-11T22:23:49+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=360a8cf493412bd03e5e24714f4d497d3f901926'/>
<id>urn:sha1:360a8cf493412bd03e5e24714f4d497d3f901926</id>
<content type='text'>
commit 179c85ea53bef807621f335767e41e23f86f01df in mainline.

The futex list traversal on the compat side appears to have
a bug.

It's loop termination condition compares:

        while (compat_ptr(uentry) != &amp;head-&gt;list)

But that can't be right because "uentry" has the special
"pi" indicator bit still potentially set at bit 0.  This
is cleared by fetch_robust_entry() into the "entry"
return value.

What this seems to mean is that the list won't terminate
when list iteration gets back to the the head.  And we'll
also process the list head like a normal entry, which could
cause all kinds of problems.

So we should check for equality with "entry".  That pointer
is of the non-compat type so we have to do a little casting
to keep the compiler and sparse happy.

The same problem can in theory occur with the 'pending'
variable, although that has not been reported from users
so far.

Based on the original patch from David Miller.

Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: David Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Arnd Bergmann &lt;arnd@arndb.de&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
</feed>
