From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751392AbdAVKMA (ORCPT ); Sun, 22 Jan 2017 05:12:00 -0500 Received: from mail-db5eur01on0110.outbound.protection.outlook.com ([104.47.2.110]:52907 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751000AbdAVKL4 (ORCPT ); Sun, 22 Jan 2017 05:11:56 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ptikhomirov@virtuozzo.com; From: Pavel Tikhomirov Subject: Re: [PATCH] prctl: propagate has_child_subreaper flag to every descendant To: Oleg Nesterov References: <20170119164346.4214-1-ptikhomirov@virtuozzo.com> <20170120181359.GA17205@redhat.com> CC: Ingo Molnar , Peter Zijlstra , Andrew Morton , Cyrill Gorcunov , John Stultz , Thomas Gleixner , Nicolas Pitre , Michal Hocko , Stanislav Kinsburskiy , Mateusz Guzik , , Pavel Emelyanov , Konstantin Khorenko Message-ID: <4908be49-d3c3-366d-0fd1-05249ef4ecef@virtuozzo.com> Date: Sun, 22 Jan 2017 13:11:46 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <20170120181359.GA17205@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [46.39.230.37] X-ClientProxiedBy: HE1PR02CA0043.eurprd02.prod.outlook.com (10.163.170.11) To AM5PR0801MB1841.eurprd08.prod.outlook.com (10.169.247.146) X-MS-Office365-Filtering-Correlation-Id: 30cdd517-b292-45b8-e6f4-08d442af16a3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM5PR0801MB1841; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1841;3:/QIa2dpe6759OBD4mUd2mg1YLYxv4u+01yqfpgiSjqqqdzyuMTK2uEliAJEOiNBiMMh5h4Q8v3Bxp669NS+zML7RvXjzjx6QOrcoyDxCAFqijcMYO44PNy9kARxEdzhAfw6Rcjo+zVFB9bSewiIGeVNH2NYfMxTB7VAfT5DvrJGP1Cyc40+34KlxX4BSgUBiNNVlzxFo2GUnMN9CaPmGNjmZhDS9quHNjweJDCFfr6T/eKVYgGqiZ9CSXIkkO4gPoxTaqd4dw5YLhukcHvHpOg==;25:KGGH96AvNY0a4rdHy8jmspByNi+N1mRI1f/P3HM2Tc13mtSVq2UEiOLTFifMCMUiajw/YqyHwozBuSL0HMdgFt3xj/JGJyKspmLf/n71aJEFy9HIieDJrs19Q6uTlxol/Oeauz6/g6q3zBZ0cEa7g7+WZ9WKjFC5amqD/Y984Xb335J47Tnga7AEPr5l2bjbQ32UDIVmndNthQWloU2HtFNqNJNt7mKu+0D2u8AZ99p483mJxyW1YpIHzcjBZERfOpFu/KoQCDFzKzrOw2HQfshSS1wCntChpZgfkqJfcgwUE4OcJas0pK6De9Ex8tMsB21U0JPybJt6Pq0HHPGDatcI05A8K+xzWfYXkFwwY3woLR2bXxcEwANiz3KSrqArrhG2U/X72uBYxzWPcRuOo3iUCWIGBZml0czhARF0rIaZCvRnfj3dXUJjB+41le2esJfRynMTztbjFrJsvK3D2g== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1841;31:rWJYIIR3RADU0CBWtm1aZXiU+lfM3NWwcVIcy2ZG/gdf2QIaVU6DMoolA4aDtfu7FCXK7qzakbTBvtNfD9k+k78pCTlxPUxkvUJV3Zfq3k00xmw0u/Vt38EUuJInfRaNK7Za/Fprpr/1bUjJCzSK8lCZMPG5D7aWZyXPFc19MtWZlvq/6OsEv49aFovamvnV85d2QkTm/az62ofVy8v946Dyxmc01NLdDwdAh3TCWf+XJ+GyTx0teghUMsGwfqJyyjhmAiskSCk/IU77pk0g8A==;20:A5Gp4iV0qApMberygaR3dZrSUWC5+MbP6RTw4UvJi83ZO3oRRfESv6lgS3atSmeYAp0I6DO+RDpzSaB1DXGg6lLgXiPk8k3KlpjomPY5h2mBnJa786l0tTTp/FlzDXN2w64fWTm6txRqAY6sSR+IyH0Ja9XlQ7+WDTZIRX0CPQ1Go0Ww4N9s4t1fd4lWWfocnf1H4QcrUHontGNFIuG6fOZWnClAo7O8zU/moudYN8qpYNcJ5enXBjCedenOZ1us X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192374486261705); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6072148);SRVR:AM5PR0801MB1841;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1841; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1841;4:ZKPdPfu8ADVS4d743xm7aYrxruM9DRwTjIbtxapaoc/R8d1zdl1uaztIU7eA4nQxQ/ML33REM1Mle4sEjNln3xKopekVQpcluCoFITU/lHfXmsnZ0cqUzA6HCmDRLJAsYFNsVQLvYwLuAdKVZwaH9m4DaqmzxL5uyCkuq7ROfqCfV4TEj76Vaxjc8fVSZsX3pSOigzYeCd7LwSrk8F//Kt1Bs0lP46r2YxZ86na1S2KUFU6uj72/GL5pPn2bAqwqtXvh/LO7r/VTM5h1gcgZwdPJyvf2r70Q3ZjLqcyAA6QoVlwmNleCzLmgp9hENnI8xoHgyjWb25s/hwy+0DMFPphHfa/BGqsXoKsA50jIaw4ELbogl1SkUNuAParht58vhHy3lyc44SmsbQuSPfBSNhYzBiIAjcZnvIuuPftiTSCiqHed42SxjocxJhy1fY/EXQo5iboZLB7Aj1XywVsfTrxr/S2zwsVCxqZO0ij/NUJM2k+fi7hT5NnqUnVqIAbSHjl7RlQZ5q6Jb2Vw3OCcW9blXfdUp38rMlDxt7brQcu1B2W2bdKJWupxuev7SQO5+9tvWmGfiSKMOcyvUDsVJFUcWueI7Ap4jzIwd/FRpWL4I7hlWPSd46AuxqFKs9LH X-Forefront-PRVS: 01952C6E96 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(39410400002)(39450400003)(39830400002)(24454002)(377454003)(199003)(189002)(52314003)(47776003)(65806001)(66066001)(4326007)(65956001)(64126003)(230700001)(50466002)(81156014)(81166006)(106356001)(110136003)(305945005)(92566002)(2950100002)(53936002)(65826007)(6666003)(6916009)(68736007)(4001350100001)(97736004)(7416002)(3846002)(6116002)(36756003)(7736002)(42186005)(31696002)(86362001)(5660300001)(107886002)(54906002)(25786008)(189998001)(31686004)(50986999)(76176999)(54356999)(101416001)(33646002)(117156001)(2906002)(23746002)(77096006)(38730400001)(90366009)(6486002)(4001430100002)(8676002)(83506001)(229853002)(105586002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1841;H:[192.168.0.104];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM5PR0801MB1841;23:SoO/TGm2BEHFZ+5HjUj8LCpEo+b0bY8nTCc?= =?Windows-1252?Q?MgfMwJoAwdMl/KLuTTSAXkODKjrnQ7PidYoeDjFy526bmLZXTi7BivX8?= =?Windows-1252?Q?0tviLKrITc1u4jpc6JssCjB8g/p7eql2As4w3oGrhJiM0rN1DFXKU2kL?= =?Windows-1252?Q?xnuy2jVykICWYsYEpcBw1NDXN00kX9vQf9kcbs2YXaB5a3ONngZKlZqK?= =?Windows-1252?Q?m/GRYgnFJsnXjrgseQaph0SImCM/kutf7Z58u+5RVYIHYR4bGHKlw6sK?= =?Windows-1252?Q?z10ViPN5vfHlk8xXpSYc7PpZsTGJT4cpI3JUeAbhZCX1nhPwKQXLkRu/?= =?Windows-1252?Q?+6jihTXBtIQw1pdx5qFZVE6QEUY1/Q4GtMyJFjQ50B/0nMydnYi+1pgj?= =?Windows-1252?Q?HB8wFNvOfsJS0umzmk62i1ifjr6lzQrBgWioy9yRfi+C3Vz0uBa+EvpG?= =?Windows-1252?Q?/Iogk/ypJY7hjJYAxPHBjdKkTqtJdyAUtLQcjq+g+YNBPoPxPzEtgV2k?= =?Windows-1252?Q?0UXVMW9QXpHc3afqn9kK81n3YpcXnQqfhoDzamY+R9/IjrIJetnxtr0D?= =?Windows-1252?Q?B0hwNZUKAafXh3kZU2kw3CwmeLfp5kUZyCzVwUp0yADu9W6tBmAVQLzX?= =?Windows-1252?Q?KVG88SkgltsAwZ48xawuNL1vs2Cmnn7gGh6sizREeqrkIBxpO56VB0Wx?= =?Windows-1252?Q?Dt7PEGmmBad/74c1vAzd2AxcQu00DQRcZcFED0QhgqCeMxz6TruSRU+q?= =?Windows-1252?Q?iBIwvA7v7EFSbVQsTzEbQyhrXEmMXGTn1wDwEgaZJR+w+8Kp/L501vHO?= =?Windows-1252?Q?766vYjSP3/ZkoNXFs+DqqAA01hESCY/R9CSfMDpTOaszDNy9XxqItjmv?= =?Windows-1252?Q?s8lnQl8B0tmLVcviXmxMKEpMjCwneNb0n1UhPdr5FSj+evENIT2Yql8L?= =?Windows-1252?Q?d+x6M2FT+f2ckU5+22bf3vHqFQD+OCm+Wgv7LXx5wX2G51rCvmj2sw9p?= =?Windows-1252?Q?PYxEiIdpUi/hkbrJUNcmZG/qkNnU+9SB5MJtHrHjW239iJ5BuMSQpbWB?= =?Windows-1252?Q?H3dtgZ1uN+lsjSDsa/HO5Kmii7vnHtbh1bfe/03RBTjwo4o3YPZ+GNHR?= =?Windows-1252?Q?qROT7OVIpPS6v8WCOSNtrgtdTqJpjU8OtUPkoeNcYrks3pLtrY3wGyc1?= =?Windows-1252?Q?fea/zniCK5Dg0DbLeWYGSiet2asRePBJ8mkxdLMB8by/8C0EAqmO8U3S?= =?Windows-1252?Q?7opXgRKrS7wJaGg/G0oTuaPNVJkliUmIGxKLFtKitI6tJGzq4E5k00DS?= =?Windows-1252?Q?4rb96cIc4/dg6oxzI3hMlcZtj1y+2Z5B26fq2P88UkkV6D6YJAC+z09a?= =?Windows-1252?Q?uwZuyfSB1s5zptx3+dnMDsUvzxk8+vaj+NjumuJOwJsbaMa6ZY0LklOG?= =?Windows-1252?Q?CXE8SPg4vOZLXbUnd2q+IBTSYm3zUHDWzMR7Hf6gIhnP9SoW/nbJpqsG?= =?Windows-1252?Q?3OpoWFB0cP1J6beTvl0iTwow2nt4+KRows8CG8wtLXCgDqiRrCT4hilq?= =?Windows-1252?Q?RGGC8At5Bn639JtHRS89kD/FBBIehRRulQvldYvCzE2rAiwITFWnaO5q?= =?Windows-1252?Q?jd7sXLvyNzQC7mBhzGTL9xwRYfbZmgry7gGK9byKIrE10mR+uUvXYv/G?= =?Windows-1252?Q?qACI6OYPQAg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1841;6:nrx7PUPAEtkpW53tfQG+rTiH+ARFOzu3aq9c0hVgmS26agwVOevyG18mISPtS/x008gQI249Du2mnJagIq77qKcwgXdwWmavYWdc3uwpx14DYxuGshDHqrvzK+sVBiu0bx/QYJ/1ISlHZPBNoWJbaAg/gxhqlgDJpBcfTWGpi1vQFsLv/WM3qN+BjBOJVd/oHVj41alsns5V9VEVetizt8DyVnvXjyb9talmSPZIVkt1j6ZONPWO4LK0lQo23Ziy3372yHdk7HhpAbLPFL8iX00yH1tT7dMQtlSVAncpMoRoV762HZVRdgZynd3qZgGySD18ZCcdH4WEItG4pcJBf4GsnTN4lJGGpZjJ9kf3H8zGgeNZucrnuUavSo+i8cwbKc0/O1XYIYOmInKZpAeCYDREwMrhLym362DF5+2+IO0=;5:S46VzEnjJpUHceoPRRwyhaPu0HCN/luDnSlSW8SoDRXn8UsVVZKkgV/UyR8X0C6vtaIkeb4P3udtTHSMW0dQEclvQTdIR/xf3Fu0dR8d0xacDyp8pH8bnPedgL5CrREItNoWoiWnsguEI7tbqkK9Mw==;24:WCt1Ciyfi1hz3gG9zkmGnG7X+lxrpRhjZuZpfAJYEgfUBUGGV+YeHEFzjDKYiPqBj52XKoC11VPj5fAKrbMecR47CE8/sG/36dOYuTM4TsY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1841;7:wDP/hIKfQttDmWp4yzZHCi/2HucgmYNsSE1I01jAppjJZDetFRmwKjqgU4BK2wxUzpC7gyR1MBnRhgq9BGioOgrcGNjOZXcZ/zZuUwI963OPYsLlwy3TbB1Rx6D46u8K+uJQwrKVJMiHypGid1TbA3cYDpEKdAtltkIbInbbouq14I1jEYqJeLPW/l6/1vwMYRsUuhVUBk4dTOcveOZ1UIsVa95EARVbRxTiRZqcLi7xYGZVELLfGDpSZ7lBbujBY1HYcH8lrhoamc60Ion4TdmCgEIm/FUM+TymTBOftC0AGDPJv6LOfj9X9kzxS6q0gaMJZRr5fvEPLccTsTshtJmoOK2DwOn2bnBcH4kBNuBRwlyDOOMdLrM+PXAGAj0RdHkJY7htlmdrOJLYuAZTi4n0efUz65FUPwyfz42EifleXiZcLuiTvP5Ng7iW1WQUDRQ3zEIIc/nRj2rUHYllFg==;20:coDTcF72oQK+s/Dan9wDBxup6GgG7W0Y43ggVjp700f6rdrWJlKkw6XMMgpydOWK8SFBYLdsmcyhS8/UF9FbS2I+QAInvg27QIP9gXO1yS6GviKvbXpKtmQQ1wuAlGsCgtY0olhAqlkmNFt7Gp+3m/XRmU9S58lPi3lfXEkeBT4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2017 10:11:50.4759 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1841 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sorry I had some problem with mail-agent, resend to be on the safe side. On 01/20/2017 09:14 PM, Oleg Nesterov wrote: > On 01/19, Pavel Tikhomirov wrote: >> >> Having these two >> differently behaving groups can lead to confusion. Also it is >> a problem for CRIU, as when we restore process tree we need to >> somehow determine which descendants belong to which group and >> much harder - to put them exactly to these group. > > Hmm. could you explain how this change helps CRIU? I mean, why > restorer can't do prctl(CHILD_SUBREAPER) before the first fork? Imagine we have these tree in pidns: 1: has_child_subreaper == 0 && is_child_subreaper == 0 |-2: has_child_subreaper == 0 && is_child_subreaper == 1 | |-3: has_child_subreaper == 0 && is_child_subreaper == 0 | | |-5: has_child_subreaper == 0 && is_child_subreaper == 0 | |-4: has_child_subreaper == 1 && is_child_subreaper == 0 | | |-6: has_child_subreaper == 1 && is_child_subreaper == 0 before c/r: If 4 dies 6 will reparent to 2, if 3 dies 5 will reparent to 1. after c/r: (where restorer had is_child_subreaper == 1, everybody in the tree will have has_child_subreaper == 1) Everybody will reparent to 2. > > Anyway, afaics the patch is sub-optimal and not correct... > >> --- a/include/linux/sched.h >> +++ b/include/linux/sched.h >> @@ -1715,6 +1715,8 @@ struct task_struct { >> struct signal_struct *signal; >> struct sighand_struct *sighand; >> >> + struct list_head csr_descendant; >> + > > You don't need this new member and descendants_lock. task_struct has > the ->real_parent pointer so you can work the tree without recursion. Sorry I don't get how I can walk down the tree of all descendants with help of ->real_parent pointer, can you please point on some example or explain a bit more? (I see task_is_descendant() in security/yama/yama_lsm.c but we will need to check it for every process, not only descendants, the latter can be a lot faster.) > >> +static void prctl_set_child_subreaper(struct task_struct *reaper, bool arg2) >> +{ >> + LIST_HEAD(descendants); >> + >> + reaper->signal->is_child_subreaper = arg2; >> + if (!arg2) >> + return; >> + >> + spin_lock(&descendants_lock); >> + read_lock(&tasklist_lock); >> + >> + list_add(&reaper->csr_descendant, &descendants); >> + >> + while (!list_empty(&descendants)) { >> + struct task_struct *tsk; >> + struct task_struct *p; >> + >> + tsk = list_first_entry(&descendants, struct task_struct, >> + csr_descendant); >> + >> + list_for_each_entry(p, &tsk->children, sibling) { > > This is not enough. Every thread has its own ->children list, you need > to walk the sub-threads as well. Will do. > >> + * If we've found child_reaper - skip descendants in >> + * it's subtree as they will never get out pidns >> + */ >> + if (is_child_reaper(task_pid(p))) >> + continue; > > Again, a child reaper can be multi-threaded, this check can be false > negative. > > Probably is_child_reaper() should be renamed somehow and a new helper > makes sense... something like Will do. > > bool task_is_child_reaper(struct task_struct *p) > { > return same_thread_group(p, task_active_pid_ns(p)->child_reaper); > } > > Oleg. > -- Best regards, Tikhomirov Pavel Software Developer, Virtuozzo.