From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751291AbdAVKD3 (ORCPT ); Sun, 22 Jan 2017 05:03:29 -0500 Received: from mail-eopbgr30116.outbound.protection.outlook.com ([40.107.3.116]:60769 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751148AbdAVKD1 (ORCPT ); Sun, 22 Jan 2017 05:03:27 -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: Date: Sun, 22 Jan 2017 13:00:52 +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: AM4PR0501CA0018.eurprd05.prod.outlook.com (10.167.83.156) To AM5PR0801MB1843.eurprd08.prod.outlook.com (10.169.247.148) X-MS-Office365-Filtering-Correlation-Id: df1ba80a-787f-4cbe-c322-08d442ade6af X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM5PR0801MB1843; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1843;3:qJJ7LZjBbY+U7rBpzdFEig5VYGQxkTCT9EGCmyAJpvCkbglscPN2DVRDrAtPSARoSq1USkO62aWU/XSHOxLllmkyDDwKS2j5Nq+j9S5LXcQqdbtFlAPw89pzG11xy6r8zKOIIHw9JtX9xFz3KSNY6/5IVgDR/HOi4Ry6BgdM3RQuveshm+hwMEFXp3txAjj8vHDdxF6RODHHTz2qbl/LhbiNNoxcp+hNsxpwlQJnt+cHi9oaH5M/TkZNkjEJWZdZzT5g3x2Xf9JrYzcZ/bUatQ==;25:j4rIeAN1Ikywi/lHFtu+ryVfgOnIebko2JbaUFbb5QvCPS5lWDkZEX2tMTi7KPK34+djIlfWinynkbSQRbc6oXLbfnZGCyC5zS2GBZTRcsLSCIrbJgifDgSvTiSzpgyuaSG/REgS0uCH/P1Nx6hCuOzz0l8kLNkllaai7ej2XOCVctJQdSmCubAHlKgay4PhGf+M8AL6RfFTWzGjaTAd/rz0BncPkZ+prA//m6SYLifZ2o2rbHIYb6/zEfNmSI2P947jiWU06fenj7MLaTYofJxKXOE2mJPwWgRFlpBEZPZlU0xZ2Wn5oqoSCMXhzt1LUuvrKS6I0zgrRuPhMaG0wiOpluM8/n6xCdS9uhYFZHMYeazXZqJa8KzRlAm7LiCgDVxX7nu2uNhSCpFr2kLtxNnOTNP+QPfLeSQfthkq7Ll1pXoaHrRc2ZhzYHRCmQ3pc/59wJJUdCXwGsGpHWrytw== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1843;31:W9Y3uoXAgvrqUarH3U2wnNNY9XoTrJyYMAgKXGtEdX8tsNlVRNf5V9413BxKALy2EOLNBhiluKQ6QVFJu8qgwvt7gu7oZ33Ms30FbRtQm96BAPtrBpVHE+RjX4MQIuAH6HXeG8INbAbZCAKv7bvTR5cAVfng+/Zdgqhqwh2Gc5c9MuVBDV919dDJuZMag9MnRKdRa0rFZsqFeLkM9r9WwobV8N9rBieRdGd0tssVRMCipFZ6wcZjHNTGZY+yK+MBa8v+GfP8QwcluOnrrqFmsw==;20:GvqshcS/BF4UknB/159uZsafG99QaL3vArW3+cKH+W4z/TaCGYQkCU8KKmCD6QYKtQ4XfmYAGJuxvS3dgb4zCrTpdgExxesoHuRQkv0jcP+LoTHMjAJZI89ubKyGjgUwDBf1/GxRgZr56hOKpABZ4l4kIrgew/EGRr+/jZ6Tf3xruuGhYlmyyF2/42xyPMEwhC/Z5FMloSDWCMsgeKj7wylCOqzdl40xQQm7ScQYQNx+apUWOjGfhXIyK2lps2QX 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:AM5PR0801MB1843;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1843; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1843;4:M7gs+sEZmt9jTYATPvGMFD2u/zfSHbPRQI3ZtejSRi/87rEGfMrdUzY0X8xvEcI4gKkVKNmp0DYZl/RnFueDhIipHL08Qd/uMLDk957GbAHY4E3yuF3WqNTThW3EMi+ax8sKDsqydyFrP7SYli40HBNX2SNx05bqo7IzfvAh9T7SlONor6Zhm2UbVgeXjp2+lJV9roAeqRZ0rpkXX0sm9noKl7d/F5hLaRJl0ZyG7Lmm3sV3AZijiO95o/8fyM2rjxDB4YR4O5jwCdSWoBjO+PoXcnrPiPPqhQ3dVRQL9Ld6vva7hotbG9x2tvN9r6id6hUzDbvWx4IzSd2/dU7HIaGhkSrMLPaFyLZ6H4EAGpJdZ3k25IpTzqAJYZ32lol4fei+gXnDHLtZHyE8jA1H0NqWmUBn8RwqYK6Nthvn6ZtNuSL2QzU+DbeZ0k9I+tABsxFNmNktAS2qBnqd7pFthYFldWOmA7LxkNs5yvo/6WOik/Ry4XJ9KYjXJZpwtyRMuZQSNrzbiiJYzT0e2z+aTV0JyJlOzWMPrAY44kTCNV6QSn4ALcOqT9+e/ppa6mM7yHFcXXNdXTGJ1r2zP/bSFr+MtlfBS4VAqz4VZW1aVjDNZKBw8EUJYul8XE+4coD+ X-Forefront-PRVS: 01952C6E96 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(39410400002)(39830400002)(39450400003)(189002)(199003)(24454002)(52314003)(377454003)(50986999)(110136003)(6666003)(54356999)(2950100002)(6916009)(76176999)(65826007)(5660300001)(92566002)(101416001)(50466002)(42186005)(64126003)(97736004)(31686004)(4001350100001)(105586002)(106356001)(53936002)(23746002)(189998001)(305945005)(68736007)(7736002)(107886002)(36756003)(33646002)(117156001)(7416002)(83506001)(54906002)(38730400001)(2906002)(25786008)(81156014)(4326007)(86362001)(65956001)(4001430100002)(65806001)(90366009)(77096006)(47776003)(66066001)(81166006)(6486002)(229853002)(3846002)(6116002)(8676002)(31696002)(230700001);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1843;H:[192.168.0.104];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM5PR0801MB1843;23:AfSwEOEjsZOY1iax8RihmADY0nYkWjRAzuP?= =?Windows-1252?Q?CDAHjH8U9hCUPFtjzJFL+lO6BGCcRRuyXkHUuTsEr+t1BIphO6J2bntC?= =?Windows-1252?Q?2nSB8GCYeE0YWtA0iDiJH6SiVP0JPAOY/xBPuzZzztq1U8Kplznp7PhU?= =?Windows-1252?Q?aMi3okQwxDLBfTJ8bZD3KwtBh1o/ewwrDGqBCGEKmGD9ex8+mE27Y7eo?= =?Windows-1252?Q?v1gTCwRe+wXefTC/aYHoNTXZ5l+blyvV9Diz06zC05hclafuL07rKFx8?= =?Windows-1252?Q?jeB80nfs4migzot1UAhp5NL9OHekZVfy16jFVhdd0J0PXocF3Tx/YPnk?= =?Windows-1252?Q?qmcoN8yfIdlyb5KvdMi132Q/0TAmxiFTeSpfnCATSxNcmmWa3FB5MmwA?= =?Windows-1252?Q?+Cq+Og53hS3jxsn15ZHKnGisn9mWmtvxuAsFxV1/DMJ3mdruZbSnkWhv?= =?Windows-1252?Q?sKoH2YTRiMa8jUdyjpJhTiLtCfYKKzs8fQpEbn+Udb+DXtQJc3/NYtcF?= =?Windows-1252?Q?uSXSgGsD88kGEJe878pyvo4GQ2emrXoMKtm32iUinvymyaxf+FEEvS8F?= =?Windows-1252?Q?wiiJGuDBlNolFo91FuF9Dz6txTNlfxdMzEaaX02DBkQjJEke2RM+NduH?= =?Windows-1252?Q?byuxgDOcaKBO98tnANuJ6fGOTQZiw88zX3yNfaIGqW2M++7R8Fck3Qnu?= =?Windows-1252?Q?3MhxEYmbp7KuylhFL6p7f2SVuCfx39MpmTC/6hRsAPTfRMrhfdID3dY1?= =?Windows-1252?Q?kp9sD0CF5GKK4N/MQcwmPDc40VNE8M5Cfg8NpqqAa2wBXvOXv7S7dIZQ?= =?Windows-1252?Q?u0raWuS8dS8OzNKQx18UhJWbJXx3oXhKFenTimA/e9EdXTjEnG/I/8hy?= =?Windows-1252?Q?+mRLKFMmen2zgr0e2TFYTl93Q70NFYRIt89NoOrsGOrm3gbq+NRswcNi?= =?Windows-1252?Q?UydYC02SlxrH8BHA/NJaWLYdV9iOUVPM+XizGSDm5pdwkwlc4FAYkmO6?= =?Windows-1252?Q?F2VtVxaEsYe7X6dR2bVavY/iLhHJ3MObz1SzHCcHStGI1azCuUFB/0QA?= =?Windows-1252?Q?7iELWPdQL3tzTaZFx7NR+n+A8TNMJoa4m7WUBDtSlPHK9fuA2++mP7ff?= =?Windows-1252?Q?lgD2rt8Qih2ZC7f6f/gjlDxJiVw99OOVo6ma/AN1/jdCLjHfhLQbjwwl?= =?Windows-1252?Q?F+jOiOW0WdJ24BCEmoGkzW0HwDoplvbLseR9LBvZ6jXoDjGQliv6H6NB?= =?Windows-1252?Q?oatV8ziZNMcDegCHA6uHDV8b73iku3Dmzt9rak7mcVvQk8zxabJF1zTw?= =?Windows-1252?Q?Y9yHHAnaJTO8NwmwLmPh5GelhmBlC3FvcuDpEdfd7YwQdxKrSCBQnJva?= =?Windows-1252?Q?o+OquwCOlSQRf1vATQrc91rPQk+cHT1vYO+joXougJnm+c4aJW07kZiy?= =?Windows-1252?Q?J9RKx5FZdcNo84ddl8GosBxCaAlckyIaJWgAzbCqftQAUD26qLa2ik7s?= =?Windows-1252?Q?cKs/sDwAUjbjh1Cwk1MfbcxCGv25Mg++sYohjd7dVavTqAI6jzKYhtdy?= =?Windows-1252?Q?4rzdqovGK7AX7/taeKC9Ydid8AXdeRlMg6NdRcDuBYcNc3HQ5xo3+gEF?= =?Windows-1252?Q?Dy1ujHFcI/fG6V4I+XGO1qH3Y8KBSnKfd9XQo7ReQSgjrdXeEh8wXJPY?= =?Windows-1252?Q?g4PwhBLYn7A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1843;6:YgJLrzoLhsa0H8AHFl3MqgsSltn3lmOLXrtLPxb+/ShUPAU7I5qd7auxBP4CCeULNuI/8cGbf4oSKHOtoCJhU2XlqCuX5zwrthBMYZUz2U/4deyh4XYhCGWsRHHF97AkdfBnOa5o95Rv5DDTEcN8XkyP3W7FBoGbDx3YAVN55fu78So3o97jn9R4Gj4tccQjCRDXzI2XNCelKtkZHLe77CG+XHM1W6ENtejwppOKkKWgoRt4ACqcH2XZ26aWjJ4tS0Kkc16pYvcYRpRQU0MDrnllGa820n0WDqNfd03ZBFByfNSInKWfVuldGnPGav6ijZ2buAhuQhodLR6yGzWYnY0PIE1vwwCPCiWYEZpPvHGm1yPiilkXcamE3w/UccOpG7luO8gEpuLybvgtRAQMIJ0vvlG/9J8B9EVpvDwO5bs=;5:p9cl/8bE9ls0s7VojEefQrPRnIsD/geIxDojD6Khct625z1ibsomzRe4PlRuJ/tKJw64Z2w7wuDj0McirL3+Supd9QPRpMJxCMcM46av0DNARucw6IljhKWUPoX+lGuJHKiNedAulb/ocDxLlr6jlg==;24:BkW0Ly+xnBQHrZHXVap64WIBlGHZN+Wq8GGCPGNONOrVA8fT2r1BGTc6lNrtastA4ZcPNwkTWecmty1lu9aN/Awt2WP9ebl6qtpnU1kc2oo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1843;7:ZuAn6axdhOPOdZXcT9CZKSWRBya6I2LoiIGjTdJDtw7ep/6ARDHVayqB9VYmN2C2ku2oZQtXL1Tcg0g/D7/4LLwhgzZZhWMHpgOcM749vSFO2P3LAE8Xh1DSULQW+RdWK8aVumHmaf6JudVe5uyBq2CF/6inKzEsUIOcHOdYbmZ8anLayI8KCJKiocs6fotpRpuCD37hmTX9uynxbE8pChriFUaRQA/m0kTIyMrXXsUhXquE7korii/W2BGaLRATsto2NTDUGLN83YxdT4n204XN/sa5WYGACZmj+m3BvEZR99GKp2+x4Fb+KSvjbGYxcygCKJUsNumBy03eQD+lO1zfc2H+FVwp+PwereB3QA7o0sZcUyMUTMdejblWUuP8G/7cjBzohMnkLPebfBqfOevJsJUKmlVbgE+zw0V1mYbvWq53MiNprx3ezflx8sNwxPNQAXg76JDpdqrvnZHAJA==;20:89ZN94WHzeXaaC0b+C6WkPiqGcs/bYQMc5EOqifD0WQ/9oxsUsenzlE5yMHs5W8iQB/2WXw8KNZ0BZt11Bz6P9hwuxrjodm7BjP8d03yHdPTDTXLfkvGtQgusfyvh8vQF8lDWD7YpyrrLni5Mek7ihNUKgJTYmzW036eHvJytos= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2017 10:03:22.2677 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1843 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.