<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/fs, branch v2.6.35.8</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/fs?h=v2.6.35.8</id>
<link rel='self' href='https://git.amat.us/linux/atom/fs?h=v2.6.35.8'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2010-10-29T04:51:47Z</updated>
<entry>
<title>mm: Move vma_stack_continue into mm.h</title>
<updated>2010-10-29T04:51:47Z</updated>
<author>
<name>Stefan Bader</name>
<email>stefan.bader@canonical.com</email>
</author>
<published>2010-08-31T13:52:27Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=5daf133f0fb96925541cb5bf82317793a75c19f9'/>
<id>urn:sha1:5daf133f0fb96925541cb5bf82317793a75c19f9</id>
<content type='text'>
commit 39aa3cb3e8250db9188a6f1e3fb62ffa1a717678 upstream.

So it can be used by all that need to check for that.

Signed-off-by: Stefan Bader &lt;stefan.bader@canonical.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>execve: make responsive to SIGKILL with large arguments</title>
<updated>2010-10-29T04:51:47Z</updated>
<author>
<name>Roland McGrath</name>
<email>roland@redhat.com</email>
</author>
<published>2010-09-08T02:37:06Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=e4037861387fe89ac082e8cf092b6a7bada09cb5'/>
<id>urn:sha1:e4037861387fe89ac082e8cf092b6a7bada09cb5</id>
<content type='text'>
commit 9aea5a65aa7a1af9a4236dfaeb0088f1624f9919 upstream.

An execve with a very large total of argument/environment strings
can take a really long time in the execve system call.  It runs
uninterruptibly to count and copy all the strings.  This change
makes it abort the exec quickly if sent a SIGKILL.

Note that this is the conservative change, to interrupt only for
SIGKILL, by using fatal_signal_pending().  It would be perfectly
correct semantics to let any signal interrupt the string-copying in
execve, i.e. use signal_pending() instead of fatal_signal_pending().
We'll save that change for later, since it could have user-visible
consequences, such as having a timer set too quickly make it so that
an execve can never complete, though it always happened to work before.

Signed-off-by: Roland McGrath &lt;roland@redhat.com&gt;
Reviewed-by: KOSAKI Motohiro &lt;kosaki.motohiro@jp.fujitsu.com&gt;
Cc: Chuck Ebbert &lt;cebbert@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;

</content>
</entry>
<entry>
<title>execve: improve interactivity with large arguments</title>
<updated>2010-10-29T04:51:46Z</updated>
<author>
<name>Roland McGrath</name>
<email>roland@redhat.com</email>
</author>
<published>2010-09-08T02:36:28Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=c7d3b6415c472deae3fab07d06239abba9070c93'/>
<id>urn:sha1:c7d3b6415c472deae3fab07d06239abba9070c93</id>
<content type='text'>
commit 7993bc1f4663c0db67bb8f0d98e6678145b387cd upstream.

This adds a preemption point during the copying of the argument and
environment strings for execve, in copy_strings().  There is already
a preemption point in the count() loop, so this doesn't add any new
points in the abstract sense.

When the total argument+environment strings are very large, the time
spent copying them can be much more than a normal user time slice.
So this change improves the interactivity of the rest of the system
when one process is doing an execve with very large arguments.

Signed-off-by: Roland McGrath &lt;roland@redhat.com&gt;
Reviewed-by: KOSAKI Motohiro &lt;kosaki.motohiro@jp.fujitsu.com&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>setup_arg_pages: diagnose excessive argument size</title>
<updated>2010-10-29T04:51:46Z</updated>
<author>
<name>Roland McGrath</name>
<email>roland@redhat.com</email>
</author>
<published>2010-09-08T02:35:49Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=a376eaa89e3931a4088deb6ef5d94569688efec0'/>
<id>urn:sha1:a376eaa89e3931a4088deb6ef5d94569688efec0</id>
<content type='text'>
commit 1b528181b2ffa14721fb28ad1bd539fe1732c583 upstream.

The CONFIG_STACK_GROWSDOWN variant of setup_arg_pages() does not
check the size of the argument/environment area on the stack.
When it is unworkably large, shift_arg_pages() hits its BUG_ON.
This is exploitable with a very large RLIMIT_STACK limit, to
create a crash pretty easily.

Check that the initial stack is not too large to make it possible
to map in any executable.  We're not checking that the actual
executable (or intepreter, for binfmt_elf) will fit.  So those
mappings might clobber part of the initial stack mapping.  But
that is just userland lossage that userland made happen, not a
kernel problem.

Signed-off-by: Roland McGrath &lt;roland@redhat.com&gt;
Reviewed-by: KOSAKI Motohiro &lt;kosaki.motohiro@jp.fujitsu.com&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>xfs: properly account for reclaimed inodes</title>
<updated>2010-10-29T04:51:35Z</updated>
<author>
<name>Johannes Weiner</name>
<email>hannes@cmpxchg.org</email>
</author>
<published>2010-10-01T07:43:54Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4d4e307ad05e8ba402c385d780e2c03ea3c7c495'/>
<id>urn:sha1:4d4e307ad05e8ba402c385d780e2c03ea3c7c495</id>
<content type='text'>
commit 081003fff467ea0e727f66d5d435b4f473a789b3 upstream.

When marking an inode reclaimable, a per-AG counter is increased, the
inode is tagged reclaimable in its per-AG tree, and, when this is the
first reclaimable inode in the AG, the AG entry in the per-mount tree
is also tagged.

When an inode is finally reclaimed, however, it is only deleted from
the per-AG tree.  Neither the counter is decreased, nor is the parent
tree's AG entry untagged properly.

Since the tags in the per-mount tree are not cleared, the inode
shrinker iterates over all AGs that have had reclaimable inodes at one
point in time.

The counters on the other hand signal an increasing amount of slab
objects to reclaim.  Since "70e60ce xfs: convert inode shrinker to
per-filesystem context" this is not a real issue anymore because the
shrinker bails out after one iteration.

But the problem was observable on a machine running v2.6.34, where the
reclaimable work increased and each process going into direct reclaim
eventually got stuck on the xfs inode shrinking path, trying to scan
several million objects.

Fix this by properly unwinding the reclaimable-state tracking of an
inode when it is reclaimed.

Signed-off-by: Johannes Weiner &lt;hannes@cmpxchg.org&gt;
Reviewed-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>ocfs2: Don't walk off the end of fast symlinks.</title>
<updated>2010-10-29T04:51:26Z</updated>
<author>
<name>Joel Becker</name>
<email>joel.becker@oracle.com</email>
</author>
<published>2010-09-30T00:33:05Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=f4604440d6512452e75675272364f14af3521af0'/>
<id>urn:sha1:f4604440d6512452e75675272364f14af3521af0</id>
<content type='text'>
commit 1fc8a117865b54590acd773a55fbac9221b018f0 upstream.

ocfs2 fast symlinks are NUL terminated strings stored inline in the
inode data area.  However, disk corruption or a local attacker could, in
theory, remove that NUL.  Because we're using strlen() (my fault,
introduced in a731d1 when removing vfs_follow_link()), we could walk off
the end of that string.

Signed-off-by: Joel Becker &lt;joel.becker@oracle.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>reiserfs: fix unwanted reiserfs lock recursion</title>
<updated>2010-10-29T04:51:25Z</updated>
<author>
<name>Frederic Weisbecker</name>
<email>fweisbec@gmail.com</email>
</author>
<published>2010-09-30T22:15:38Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=5ecce9b3a94f2faa4ee0528662960ae9308aff37'/>
<id>urn:sha1:5ecce9b3a94f2faa4ee0528662960ae9308aff37</id>
<content type='text'>
commit 9d8117e72bf453dd9d85e0cd322ce4a0f8bccbc0 upstream.

Prevent from recursively locking the reiserfs lock in reiserfs_unpack()
because we may call journal_begin() that requires the lock to be taken
only once, otherwise it won't be able to release the lock while taking
other mutexes, ending up in inverted dependencies between the journal
mutex and the reiserfs lock for example.

This fixes:

  =======================================================
  [ INFO: possible circular locking dependency detected ]
  2.6.35.4.4a #3
  -------------------------------------------------------
  lilo/1620 is trying to acquire lock:
   (&amp;journal-&gt;j_mutex){+.+...}, at: [&lt;d0325bff&gt;] do_journal_begin_r+0x7f/0x340 [reiserfs]

  but task is already holding lock:
   (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}, at: [&lt;d032a278&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]

  which lock already depends on the new lock.

  the existing dependency chain (in reverse order) is:

  -&gt; #1 (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}:
         [&lt;c10562b7&gt;] lock_acquire+0x67/0x80
         [&lt;c12facad&gt;] __mutex_lock_common+0x4d/0x410
         [&lt;c12fb0c8&gt;] mutex_lock_nested+0x18/0x20
         [&lt;d032a278&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]
         [&lt;d0325c06&gt;] do_journal_begin_r+0x86/0x340 [reiserfs]
         [&lt;d0325f77&gt;] journal_begin+0x77/0x140 [reiserfs]
         [&lt;d0315be4&gt;] reiserfs_remount+0x224/0x530 [reiserfs]
         [&lt;c10b6a20&gt;] do_remount_sb+0x60/0x110
         [&lt;c10cee25&gt;] do_mount+0x625/0x790
         [&lt;c10cf014&gt;] sys_mount+0x84/0xb0
         [&lt;c12fca3d&gt;] syscall_call+0x7/0xb

  -&gt; #0 (&amp;journal-&gt;j_mutex){+.+...}:
         [&lt;c10560f6&gt;] __lock_acquire+0x1026/0x1180
         [&lt;c10562b7&gt;] lock_acquire+0x67/0x80
         [&lt;c12facad&gt;] __mutex_lock_common+0x4d/0x410
         [&lt;c12fb0c8&gt;] mutex_lock_nested+0x18/0x20
         [&lt;d0325bff&gt;] do_journal_begin_r+0x7f/0x340 [reiserfs]
         [&lt;d0325f77&gt;] journal_begin+0x77/0x140 [reiserfs]
         [&lt;d0326271&gt;] reiserfs_persistent_transaction+0x41/0x90 [reiserfs]
         [&lt;d030d06c&gt;] reiserfs_get_block+0x22c/0x1530 [reiserfs]
         [&lt;c10db9db&gt;] __block_prepare_write+0x1bb/0x3a0
         [&lt;c10dbbe6&gt;] block_prepare_write+0x26/0x40
         [&lt;d030b738&gt;] reiserfs_prepare_write+0x88/0x170 [reiserfs]
         [&lt;d03294d6&gt;] reiserfs_unpack+0xe6/0x120 [reiserfs]
         [&lt;d0329782&gt;] reiserfs_ioctl+0x272/0x320 [reiserfs]
         [&lt;c10c3188&gt;] vfs_ioctl+0x28/0xa0
         [&lt;c10c3bbd&gt;] do_vfs_ioctl+0x32d/0x5c0
         [&lt;c10c3eb3&gt;] sys_ioctl+0x63/0x70
         [&lt;c12fca3d&gt;] syscall_call+0x7/0xb

  other info that might help us debug this:

  2 locks held by lilo/1620:
   #0:  (&amp;sb-&gt;s_type-&gt;i_mutex_key#8){+.+.+.}, at: [&lt;d032945a&gt;] reiserfs_unpack+0x6a/0x120 [reiserfs]
   #1:  (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}, at: [&lt;d032a278&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]

  stack backtrace:
  Pid: 1620, comm: lilo Not tainted 2.6.35.4.4a #3
  Call Trace:
   [&lt;c10560f6&gt;] __lock_acquire+0x1026/0x1180
   [&lt;c10562b7&gt;] lock_acquire+0x67/0x80
   [&lt;c12facad&gt;] __mutex_lock_common+0x4d/0x410
   [&lt;c12fb0c8&gt;] mutex_lock_nested+0x18/0x20
   [&lt;d0325bff&gt;] do_journal_begin_r+0x7f/0x340 [reiserfs]
   [&lt;d0325f77&gt;] journal_begin+0x77/0x140 [reiserfs]
   [&lt;d0326271&gt;] reiserfs_persistent_transaction+0x41/0x90 [reiserfs]
   [&lt;d030d06c&gt;] reiserfs_get_block+0x22c/0x1530 [reiserfs]
   [&lt;c10db9db&gt;] __block_prepare_write+0x1bb/0x3a0
   [&lt;c10dbbe6&gt;] block_prepare_write+0x26/0x40
   [&lt;d030b738&gt;] reiserfs_prepare_write+0x88/0x170 [reiserfs]
   [&lt;d03294d6&gt;] reiserfs_unpack+0xe6/0x120 [reiserfs]
   [&lt;d0329782&gt;] reiserfs_ioctl+0x272/0x320 [reiserfs]
   [&lt;c10c3188&gt;] vfs_ioctl+0x28/0xa0
   [&lt;c10c3bbd&gt;] do_vfs_ioctl+0x32d/0x5c0
   [&lt;c10c3eb3&gt;] sys_ioctl+0x63/0x70
   [&lt;c12fca3d&gt;] syscall_call+0x7/0xb

Reported-by: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
Tested-by: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
Signed-off-by: Frederic Weisbecker &lt;fweisbec@gmail.com&gt;
Cc: Jeff Mahoney &lt;jeffm@suse.com&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>reiserfs: fix dependency inversion between inode and reiserfs mutexes</title>
<updated>2010-10-29T04:51:25Z</updated>
<author>
<name>Frederic Weisbecker</name>
<email>fweisbec@gmail.com</email>
</author>
<published>2010-09-30T22:15:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=cd1bbdfed8ff5047d96ed27a3ee7b881069daf03'/>
<id>urn:sha1:cd1bbdfed8ff5047d96ed27a3ee7b881069daf03</id>
<content type='text'>
commit 3f259d092c7a2fdf217823e8f1838530adb0cdb0 upstream.

The reiserfs mutex already depends on the inode mutex, so we can't lock
the inode mutex in reiserfs_unpack() without using the safe locking API,
because reiserfs_unpack() is always called with the reiserfs mutex locked.

This fixes:

  =======================================================
  [ INFO: possible circular locking dependency detected ]
  2.6.35c #13
  -------------------------------------------------------
  lilo/1606 is trying to acquire lock:
   (&amp;sb-&gt;s_type-&gt;i_mutex_key#8){+.+.+.}, at: [&lt;d0329450&gt;] reiserfs_unpack+0x60/0x110 [reiserfs]

  but task is already holding lock:
   (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}, at: [&lt;d032a268&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]

  which lock already depends on the new lock.

  the existing dependency chain (in reverse order) is:

  -&gt; #1 (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}:
         [&lt;c1056347&gt;] lock_acquire+0x67/0x80
         [&lt;c12f083d&gt;] __mutex_lock_common+0x4d/0x410
         [&lt;c12f0c58&gt;] mutex_lock_nested+0x18/0x20
         [&lt;d032a268&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]
         [&lt;d0329e9a&gt;] reiserfs_lookup_privroot+0x2a/0x90 [reiserfs]
         [&lt;d0316b81&gt;] reiserfs_fill_super+0x941/0xe60 [reiserfs]
         [&lt;c10b7d17&gt;] get_sb_bdev+0x117/0x170
         [&lt;d0313e21&gt;] get_super_block+0x21/0x30 [reiserfs]
         [&lt;c10b74ba&gt;] vfs_kern_mount+0x6a/0x1b0
         [&lt;c10b7659&gt;] do_kern_mount+0x39/0xe0
         [&lt;c10cebe0&gt;] do_mount+0x340/0x790
         [&lt;c10cf0b4&gt;] sys_mount+0x84/0xb0
         [&lt;c12f25cd&gt;] syscall_call+0x7/0xb

  -&gt; #0 (&amp;sb-&gt;s_type-&gt;i_mutex_key#8){+.+.+.}:
         [&lt;c1056186&gt;] __lock_acquire+0x1026/0x1180
         [&lt;c1056347&gt;] lock_acquire+0x67/0x80
         [&lt;c12f083d&gt;] __mutex_lock_common+0x4d/0x410
         [&lt;c12f0c58&gt;] mutex_lock_nested+0x18/0x20
         [&lt;d0329450&gt;] reiserfs_unpack+0x60/0x110 [reiserfs]
         [&lt;d0329772&gt;] reiserfs_ioctl+0x272/0x320 [reiserfs]
         [&lt;c10c3228&gt;] vfs_ioctl+0x28/0xa0
         [&lt;c10c3c5d&gt;] do_vfs_ioctl+0x32d/0x5c0
         [&lt;c10c3f53&gt;] sys_ioctl+0x63/0x70
         [&lt;c12f25cd&gt;] syscall_call+0x7/0xb

  other info that might help us debug this:

  1 lock held by lilo/1606:
   #0:  (&amp;REISERFS_SB(s)-&gt;lock){+.+.+.}, at: [&lt;d032a268&gt;] reiserfs_write_lock+0x28/0x40 [reiserfs]

  stack backtrace:
  Pid: 1606, comm: lilo Not tainted 2.6.35c #13
  Call Trace:
   [&lt;c1056186&gt;] __lock_acquire+0x1026/0x1180
   [&lt;c1056347&gt;] lock_acquire+0x67/0x80
   [&lt;c12f083d&gt;] __mutex_lock_common+0x4d/0x410
   [&lt;c12f0c58&gt;] mutex_lock_nested+0x18/0x20
   [&lt;d0329450&gt;] reiserfs_unpack+0x60/0x110 [reiserfs]
   [&lt;d0329772&gt;] reiserfs_ioctl+0x272/0x320 [reiserfs]
   [&lt;c10c3228&gt;] vfs_ioctl+0x28/0xa0
   [&lt;c10c3c5d&gt;] do_vfs_ioctl+0x32d/0x5c0
   [&lt;c10c3f53&gt;] sys_ioctl+0x63/0x70
   [&lt;c12f25cd&gt;] syscall_call+0x7/0xb

Reported-by: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
Tested-by: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
Signed-off-by: Frederic Weisbecker &lt;fweisbec@gmail.com&gt;
Cc: Jeff Mahoney &lt;jeffm@suse.com&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>xfs: prevent reading uninitialized stack memory</title>
<updated>2010-09-27T00:18:36Z</updated>
<author>
<name>Dan Rosenberg</name>
<email>dan.j.rosenberg@gmail.com</email>
</author>
<published>2010-09-06T22:24:57Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=0d1f22d21f4ca1fe9943667b712beb4d80611236'/>
<id>urn:sha1:0d1f22d21f4ca1fe9943667b712beb4d80611236</id>
<content type='text'>
commit a122eb2fdfd78b58c6dd992d6f4b1aaef667eef9 upstream.

The XFS_IOC_FSGETXATTR ioctl allows unprivileged users to read 12
bytes of uninitialized stack memory, because the fsxattr struct
declared on the stack in xfs_ioc_fsgetxattr() does not alter (or zero)
the 12-byte fsx_pad member before copying it back to the user.  This
patch takes care of it.

Signed-off-by: Dan Rosenberg &lt;dan.j.rosenberg@gmail.com&gt;
Reviewed-by: Eric Sandeen &lt;sandeen@redhat.com&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
Cc: dann frazier &lt;dannf@debian.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>inotify: send IN_UNMOUNT events</title>
<updated>2010-09-27T00:18:31Z</updated>
<author>
<name>Eric Paris</name>
<email>eparis@redhat.com</email>
</author>
<published>2010-07-28T14:18:37Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=f4254199838237a0b7df93474cf6b4f46c0b0a4a'/>
<id>urn:sha1:f4254199838237a0b7df93474cf6b4f46c0b0a4a</id>
<content type='text'>
commit 611da04f7a31b2208e838be55a42c7a1310ae321 upstream.

Since the .31 or so notify rewrite inotify has not sent events about
inodes which are unmounted.  This patch restores those events.

Signed-off-by: Eric Paris &lt;eparis@redhat.com&gt;
Cc: Ben Hutchings &lt;ben@decadent.org.uk&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

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