Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754692Ab3ILPm2 (ORCPT ); Thu, 12 Sep 2013 11:42:28 -0400 Received: from b232-131.smtp-out.amazonses.com ([199.127.232.131]:24061 "EHLO b232-131.smtp-out.amazonses.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754657Ab3ILPmY (ORCPT ); Thu, 12 Sep 2013 11:42:24 -0400 Date: Thu, 12 Sep 2013 15:42:21 +0000 From: Christoph Lameter X-X-Sender: cl@gentwo.org To: Frederic Weisbecker cc: Andrew Morton , Gilad Ben-Yossef , Thomas Gleixner , Mike Frysinger , linux-kernel@vger.kernel.org, "Paul E. McKenney" Subject: Re: [RFC] Restrict kernel spawning of threads to a specified set of cpus. In-Reply-To: Message-ID: <0000014112d66287-d0abaeb1-71ff-48a0-8740-f984d47400a7-000000@email.amazonses.com> References: <00000140efbcb701-c26320b3-f434-4538-bc80-8e92fed6f303-000000@email.amazonses.com> <20130911220228.GB15367@somewhere> <000001411282afa6-fe9c0543-0447-492b-991e-dc8214884b88-000000@email.amazonses.com> <20130912141625.GA23357@somewhere> <00000141128d759a-44dcacb6-8f48-4f9b-8381-d14003bd6da1-000000@email.amazonses.com> <20130912143137.GA23839@somewhere> <0000014112a921ae-51d171bf-e8d4-4569-bd20-94dabda2d5ba-000000@email.amazonses.com> <20130912151102.GB23839@somewhere> User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SES-Outgoing: 199.127.232.131 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1380 Lines: 45 Let me just say that the user space approach does not work because the kernel sets the cpumask to all and then spawns a thread f.e. for usermodehelper. This mean we would have to run a daemon that keeps scanning for errand threads and then move them. But at that point the damage would already have been done. Short term threads would never be caught. So I think the kernel based approach is unavoidable. Look at this in kernel/kmod.c: static int ____call_usermodehelper(void *data) { struct subprocess_info *sub_info = data; struct cred *new; int retval; spin_lock_irq(¤t->sighand->siglock); flush_signal_handlers(current, 1); spin_unlock_irq(¤t->sighand->siglock); /* We can run anywhere, unlike our parent keventd(). */ set_cpus_allowed_ptr(current, cpu_all_mask); !!!!! No chance to catch this from user space. .... retval = do_execve(sub_info->path, (const char __user *const __user *)sub_info->argv, (const char __user *const __user *)sub_info->envp); if (!retval) .... -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/