linux/security/apparmor
John Johansen 1780f2d383 AppArmor: Fix sleep in invalid context from task_setrlimit
Affected kernels 2.6.36 - 3.0

AppArmor may do a GFP_KERNEL memory allocation with task_lock(tsk->group_leader);
held when called from security_task_setrlimit.  This will only occur when the
task's current policy has been replaced, and the task's creds have not been
updated before entering the LSM security_task_setrlimit() hook.

BUG: sleeping function called from invalid context at mm/slub.c:847
 in_atomic(): 1, irqs_disabled(): 0, pid: 1583, name: cupsd
 2 locks held by cupsd/1583:
  #0:  (tasklist_lock){.+.+.+}, at: [<ffffffff8104dafa>] do_prlimit+0x61/0x189
  #1:  (&(&p->alloc_lock)->rlock){+.+.+.}, at: [<ffffffff8104db2d>]
do_prlimit+0x94/0x189
 Pid: 1583, comm: cupsd Not tainted 3.0.0-rc2-git1 #7
 Call Trace:
  [<ffffffff8102ebf2>] __might_sleep+0x10d/0x112
  [<ffffffff810e6f46>] slab_pre_alloc_hook.isra.49+0x2d/0x33
  [<ffffffff810e7bc4>] kmem_cache_alloc+0x22/0x132
  [<ffffffff8105b6e6>] prepare_creds+0x35/0xe4
  [<ffffffff811c0675>] aa_replace_current_profile+0x35/0xb2
  [<ffffffff811c4d2d>] aa_current_profile+0x45/0x4c
  [<ffffffff811c4d4d>] apparmor_task_setrlimit+0x19/0x3a
  [<ffffffff811beaa5>] security_task_setrlimit+0x11/0x13
  [<ffffffff8104db6b>] do_prlimit+0xd2/0x189
  [<ffffffff8104dea9>] sys_setrlimit+0x3b/0x48
  [<ffffffff814062bb>] system_call_fastpath+0x16/0x1b

Signed-off-by: John Johansen <john.johansen@canonical.com>
Reported-by: Miles Lane <miles.lane@gmail.com>
Cc: stable@kernel.org
Signed-off-by: James Morris <jmorris@namei.org>
2011-06-09 11:46:53 +10:00
..
include Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-01-13 10:05:56 -08:00
.gitignore .gitignore: ignore apparmor/rlim_names.h 2010-10-21 10:12:35 +11:00
Kconfig apparmor: depends on NET 2010-08-05 07:36:51 -04:00
Makefile AppArmor: cleanup generated files correctly 2011-03-08 17:03:53 -08:00
apparmorfs.c Merge branch 'llseek' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl 2010-10-22 10:52:56 -07:00
audit.c AppArmor: basic auditing infrastructure. 2010-08-02 15:35:11 +10:00
capability.c AppArmor: mediation of non file objects 2010-08-02 15:38:35 +10:00
context.c AppArmor: contexts used in attaching policy to system objects 2010-08-02 15:35:12 +10:00
domain.c AppArmor: fix build warnings for non-const use of get_task_cred 2010-08-02 15:49:00 +10:00
file.c AppArmor: file enforcement routines 2010-08-02 15:35:14 +10:00
ipc.c AppArmor: fix build warnings for non-const use of get_task_cred 2010-08-02 15:49:00 +10:00
lib.c AppArmor: Fix splitting an fqname into separate namespace and profile names 2010-09-08 09:19:31 +10:00
lsm.c AppArmor: Fix sleep in invalid context from task_setrlimit 2011-06-09 11:46:53 +10:00
match.c Create Documentation/security/, 2011-05-19 15:59:38 -07:00
path.c fs: take dcache_lock inside __d_path 2010-10-25 21:26:12 -04:00
policy.c APPARMOR: Fix memory leak of alloc_namespace() 2010-11-11 07:36:18 +11:00
policy_unpack.c Create Documentation/security/, 2011-05-19 15:59:38 -07:00
procattr.c AppArmor: userspace interfaces 2010-08-02 15:35:13 +10:00
resource.c AppArmor: Fix security_task_setrlimit logic for 2.6.36 changes 2010-09-08 09:19:29 +10:00
sid.c AppArmor: core policy routines 2010-08-02 15:38:37 +10:00