Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754060AbbHXSpN (ORCPT ); Mon, 24 Aug 2015 14:45:13 -0400 Received: from mail-qk0-f176.google.com ([209.85.220.176]:35441 "EHLO mail-qk0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751115AbbHXSpL (ORCPT ); Mon, 24 Aug 2015 14:45:11 -0400 Date: Mon, 24 Aug 2015 14:45:07 -0400 From: Tejun Heo To: Aleksa Sarai Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org Subject: Re: [PATCH 1/2] cgroup: get a ref to source csses when migrating Message-ID: <20150824184507.GB28944@mtj.duckdns.org> References: <1440335432-4202-1-git-send-email-cyphar@cyphar.com> <1440335432-4202-2-git-send-email-cyphar@cyphar.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1440335432-4202-2-git-send-email-cyphar@cyphar.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1551 Lines: 43 On Sun, Aug 23, 2015 at 11:10:31PM +1000, Aleksa Sarai wrote: > Grab a ref to each source css being migrated from, otherwise it's > possible for the refcount to reach zero between ->can_attach() and > ->cancel_attach(). This means that operations on the task's old css > (such as container_of(...)) become unsafe, as we may be operating on a > different css. > > Signed-off-by: Aleksa Sarai > --- > kernel/cgroup.c | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index 4ec1b7ee5de8..6cbfbe36284d 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -2305,6 +2305,17 @@ static int cgroup_migrate(struct cgroup *cgrp, struct task_struct *leader, > if (list_empty(&tset.src_csets)) > return 0; > > + /* > + * Fetch a ref of each css, so that the old task's css doesn't get reaped > + * between ->can_attach() and ->cancel_attach(). > + */ > + down_read(&css_set_rwsem); > + list_for_each_entry(cset, &tset.src_csets, mg_node) { > + for_each_e_css(css, i, cgrp) > + css_get(cset->subsys[i]); > + } > + up_read(&css_set_rwsem); Have you verified that the scenario you're describing can actually happen? AFAICS, cgroup_migrate_add_src() already does the pinning. Thanks. -- tejun -- 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/