From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934819AbeAKPws (ORCPT + 1 other); Thu, 11 Jan 2018 10:52:48 -0500 Received: from mail-db5eur01on0135.outbound.protection.outlook.com ([104.47.2.135]:52815 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932223AbeAKPwm (ORCPT ); Thu, 11 Jan 2018 10:52:42 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: [PATCH 1/4] exec: Pass unshared files_struct to load_binary() From: Kirill Tkhai To: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, jslaby@suse.com, viro@zeniv.linux.org.uk, keescook@chromium.org, serge@hallyn.com, james.l.morris@oracle.com, luto@kernel.org, john.johansen@canonical.com, oleg@redhat.com, mingo@kernel.org, akpm@linux-foundation.org, mhocko@suse.com, peterz@infradead.org, ktkhai@virtuozzo.com Date: Thu, 11 Jan 2018 18:50:03 +0300 Message-ID: <151568580337.6090.14497074685212327576.stgit@localhost.localdomain> In-Reply-To: <151568564127.6090.3546718160925256054.stgit@localhost.localdomain> References: <151568564127.6090.3546718160925256054.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1P192CA0017.EURP192.PROD.OUTLOOK.COM (2603:10a6:3:fe::27) To VI1PR0801MB1343.eurprd08.prod.outlook.com (2603:10a6:800:3b::7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0b29fdff-8f7d-4510-dea0-08d5590afd7a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:VI1PR0801MB1343; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;3:T9IwtpLaENewITWe5V5wbhr0zOjvlZ0UN1Z7cj1teixB5gIhffRMchaItpmyoIBs2O9Nr/fdY22R0BZf0IXBDCZpFN7v9eZY8ypWSIM65DhLkslyI/Bn4D21DwduOSFpNaYOdZAF719qD+U6mvr0l7hKj4fRmWx/plq8ZcFdC8JmpmM596M13T8lH8o40hCFNST7QiFSmjfYTKX0Qlk4okN+O0GwUml79qFaNX8A0CpI6hjBeEDMPGjELRR55Grc;25:RvhSt1zHPSJsGxxQvv9XOo7NFLNTAC30Jrka3QOf7MFqWTA9B2gKQxXQ537Ox01bzwbC/x5Uo7j7+BTejQL0NEib6n+QyVYYuC89Pusc+fzFwfFWkWlAv7AniWt5UiW4ujt8O936GL07tYEJE1l4hyEt9lCKs1tl1+J/V+wMkgvP5T1aipD0xBGojoXJcbzu98gVCg3ODktF2tgdRRY4anYvl7GzR73C5bauqc9xmy9kzxqkh5cZwJ9wjd0RJ5JWU2PEKcUe+XggWXNlanwcELHInWrf8aIkessKWPiQwp+QXncOe/7FCx/dQoHSqpNzNs56tplu390VxJ79pI9x6g==;31:QojWK2Is7Za3541sak79N0qZJtDF6cdCBQkoL5vKJ7dGMYSy5L1npQ9EnQS849pm1uFluvj4rG6M93KqUCUB6TUHcX+c2jGMhu5HCdLLFufjoZCwMOt9vq+Bsze5HeLWbybF10jo47lImP1ySvSbT4YFZCgxRQJAUiUU16Gxh76gli4jm76YvOnBq+aM/aJukqCMiDBvZ8SuyIsslRWNwn9Ayqb0fEaPBFmUnH/bWC8= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1343: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;20:ezAzWmEtvh76lyeOaHzuNf5osbt4wSV39NxBiuswAExOrzd1AR+n5TdAbTi3c8KeiYbidS7WelR4e/PQ3IPeRnRvi1aT9nbWv0OV4JWUgAIC+VPJoxZo4koFvdxxiXC5JSmjmG/oTIlWq6KPIHoPfG5fefVVUsnq7h8A17jpu4SJpTNvlYo8G+bcPTjvluLm7t/Un5HzHUH7MWohACst+qhkAElw1uEpvOlf5OAYStrE8LXqsDLbyrMGnkyIdV2QWcSgEp8XOvaQo/rsSnGob+thcR1mx+x0jVDVPGzq1662k6zCCNZSvM3Hn7lQ7oj1TfRBF5iKAbMgYmTRGzmeOMO4N63NjnsuN+a1RSA8wQ1u524ivWkeQ/FQzd28DVHacIWsz67Tu7sxIR3SJUjz5SFUefi2/2t8MHroT06ogG0=;4:YnqyKMoLA/UP12m1Q+xCG5nI4zr+OZ7YCssVu1kPzBXKblqmSfb1W7sRB5ffcO2IUp47eFM9JjruaooY/KTiQMRv71tOAVJjZ5+mCzmXpbUSx3OUDpU7cU7XnwckJI8+3lJPB1efF6amEwa8smNQtKakONPxttoZoeWkrHXgSnKeCETnkXcqX4X3l0KpA3+OJxWmQmW5UDA1g44Yxj1ygi0/L8qAslVeHhbazq+EdjAiyt6Kr2DPnNRp/pCjQ5euILtUncVp4ini0UsQbA0CRwjwz1YvvmpD9eTccJCylmUiSPJwFqfRWLW6+HCg5Kub X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(8121501046)(5005006)(3231023)(944501075)(3002001)(93006095)(93001095)(10201501046)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011);SRVR:VI1PR0801MB1343;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:VI1PR0801MB1343; X-Forefront-PRVS: 0549E6FD50 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(396003)(39850400004)(346002)(39380400002)(366004)(376002)(199004)(189003)(23676004)(9686003)(58126008)(230700001)(8936002)(7736002)(305945005)(8676002)(316002)(103116003)(3846002)(81156014)(81166006)(7416002)(6116002)(106356001)(105586002)(55016002)(53936002)(478600001)(61506002)(7696005)(6506007)(47776003)(2906002)(386003)(68736007)(55236004)(25786009)(52116002)(76176011)(5660300001)(2486003)(86362001)(59450400001)(66066001)(6666003)(83506002)(575784001)(2950100002)(16526018)(50466002)(97736004)(33896004)(921003)(1121003);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1343;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4MDFNQjEzNDM7MjM6bG1reFpCRGlUUmlVUmhNMUxxODYzd3Vq?= =?utf-8?B?eFRQWkJpUUVjRWxTZHBGWGtqWTE0WXBmazNaajltV01rbERuTDRrQ3pIWS8x?= =?utf-8?B?dGRiOTc3aUR0ckFLUUkrMTdWZXA4aWljdWlwQjZBVmN2RlkyTTFqSjhBdnFW?= =?utf-8?B?SGozN2pZV3JpQS9wdTRFdXdsWWZNVHRjQWxZcWZYOW9Oa3NicFVLY0xHSjlL?= =?utf-8?B?bmlrR2NqUHdkUjM2V1ZSK1drc0Y4ZGVtTFBoZFlPdE5KWHo1L0J1SkpzVXFu?= =?utf-8?B?amF4eUVOUC8wV2FZeFY0QVZtYkxzTUt0OXcxTUpGWlpoTVdkZXQyUGk2Qm9t?= =?utf-8?B?cmRVK1d3R1QxMzNjY2wvem4zSlBUSGhFVmpIaW94N0JPMUUxVmsweHlxWjAw?= =?utf-8?B?Ujh4TitKYVpJOVVJejUxUW40VjhDQ3RsZWx0YmU3NkFqUjVEK1RxRmZmNGlv?= =?utf-8?B?SVJrTUp2ZnFrSXRaL0pCYTRaYUwyYTd2dkNTZVV1bnNKZEVSMFFNTDhSd2lt?= =?utf-8?B?cER5VWVYOWM5THVNZGVidE1LYjhmL3pWOG9nRDZWWDJiT2d5bE0vVk9lQjMz?= =?utf-8?B?YzNwZ0tIQndCRlBpUUJNRlJaOEkzODhIMmJIeU10VzB4dmtzMUlQMVRrZmN5?= =?utf-8?B?a2JvcVNNbURwbWlqSFBCcXErakxEczlQOVNLSHVUWnA4c0J3VG96MjgycUxn?= =?utf-8?B?UDZMZWJEeTJpRDJGc0VwZHhTa0xwZnNRNi9HaUdncWNZU1RKVTNyQTMwczBh?= =?utf-8?B?T1kzazVWQkI0Yk8wV0RtYkp1MDh2VW0vLytJODVTd2c2cXRjMmNJbExsRnBV?= =?utf-8?B?ZnZHZlNhMXVYbFhJa0hEektuQko4N25KM0xSWUYyRVQ1T0F5NVVUenNLVTNO?= =?utf-8?B?TzgvSzVLSmRxZ2NOWUpvVHpETkFTT1YxUnpESlEzS2R6Y1htWlM4VXJoZHhK?= =?utf-8?B?TkJUQmpMSXZha05FK2lwMi9qMGdmK09SSndvTThqczhXMk42TkRPRDVRRjFO?= =?utf-8?B?Q3lYY3dPMGhlR3RXZ1doRzI1V3psSmFDTmlRY1VjUGZSQTc5dTNUYVk2RitE?= =?utf-8?B?dWhjOEVheENDaGI3Y2hqZnEvR0ZuOHd4dVRwN212QzRyQmRPN2MvczlQOG96?= =?utf-8?B?THlzSFhkMk42YU5Mdk11eEpZci9wR3o0eVg0OE5CWEl4WTdxVTJtdUZFM1Rl?= =?utf-8?B?ZHVEMTd1Nmt1L3FWOTFJV05VZ0E1aDl1Q3AwUGZkVHRmcUlvdHVRbW1tbnI2?= =?utf-8?B?SUpqNE9aNDcyVGU4Z2NZVnVuSW01ZWhBTzNlaEFQdGZiTHVmSWttNkM2ZFRk?= =?utf-8?B?cmhPY0VKSnczRmsxcitYYTUzMU5acVJia2I5THBZZU5odmFrSk9QVVBzbjdH?= =?utf-8?B?eEQwSE1CR2RZckFLWnI1VXhjdnd6ZW9WWlN6bDA1bFQ4SkVocUpMajVpYVlr?= =?utf-8?B?ei91Z2EzNWR6WUJiZTE1ckNaM2EyVlcxTlltNHFvR0l4WU9VNEVSTWowc21l?= =?utf-8?B?M0JWNXk4YTNuUzl4UjROckppQWQ0UEdFTE5sWm1TL1hEV25UWEV6enFJeEEy?= =?utf-8?B?VlJvN3o1cTAzaE9xRThEOXY1eDdjZ2thMlRjRi9xWHU1US8wOXgrRmFVZEpw?= =?utf-8?B?N3hsSGJ0QXkrRkcyeDJuNEJyRmlnRis3Qjk5SEhudTB0Zyt3L1dtSlhGUith?= =?utf-8?Q?bdCs3OtloNzkpYHLlSt6XQS54JbcjJdNkh4J3Bck3?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;6:YU2Bs+i038o76S/jXbEUu59PCal697yXTLhVroi0ZL9skStjRM7eJdMi7RzqoSQz70ZgpstDKiYE7WdDFAYafKnuPs7XEbDs6nknersh7oW/05v2LnwXjy51rBkUQhOmudyBN1CxXMy9Y4he/8tbHn6r3tRa3/taG9BMcq7heHIXLNed6IkLZkC33u9d6/loX8+S0+QIOHKI8hSiU1UBPDvYLk4h7yj9uAc7JuQYgUeHoHEhnlJSZHJ75KmvwdkmJehImfjgfS3KlnB/J8XJ9dVJ4vc2skrf1gWYeY/ao8NjARGZDk5WxtMF2Sv/0c95ophhOR/YWjzN/cNvDk50dbSJHCRvRkQKajHY8iAVLkI=;5:rA04HnInfgXxJ/sGi/tBi1Se0Hm7+OEYTpWuv3xUt0c5pZRWak/kM+hrd2++PFAGjVGkumxz720PNIlq8EkHXsOfeJ1cO1Ulx6jfLs51mh6Z9ak6mgH0QCpIgCtbta/3TMNG16btbHfRq3hvpS3cmXRZn2fgE+gqUDC28DdekK8=;24:blHaU1RZD/A8H03SmU8fHWZLn56phLH9hTl8Pn/O/eQ2XwuDGlxaUiSCM4C+XZ8wkccLLTLaeHEg0Mw5u7PewIh4suf32SUZs2oB9D5VLcE=;7:dp3buZJ6NX244N7F3qdil1BqPGiaigN4X27ke1qNvlaq8qRJDq5pXg1yDke50GUm7P1b9bCRaY4Ua+cLmYPy6kTHV6GhzYmSEPdgQLtQTmeq0AfGRDrSp2oinotvua4d7G0dujQIJBeoktcs+m+TZleHKzivHakZXZKUUms2jh8yYKx0yHvTazWw7YFxWjfRD8AE+g6kXdhzIgYHqP0pxDxSWkUgQeXwkBCy/Ak7CT4X+PUjOJOw29MMwrs/6Brs SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1343;20:2THKA6VfMQGWWmz90oKPnAYGusO5+2p/2sX4H3ST4qvHyjjlhBpNdqq2umyY81CYfvbUfLXG+JGBldLhPedC5+HL4+Rik4cDkoSb6drpqUWlzMVfaJSd9U0NefB0jiu8fhWJXJXHmrG9eUw2BkIMfwy1KwvwFq11kG5Jg1pUR3E= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2018 15:50:06.8150 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0b29fdff-8f7d-4510-dea0-08d5590afd7a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1343 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: This patch adds pointer to new unshared files_struct to struct linux_binprm and makes load_misc_binary() method to use __alloc_fd() and __fd_install(), instead of alloc_fd() and fd_install(), which are related to current task. It's a preparation for next patch, that stops assigning of current->files before load_binary call. Since bprm->new_files == current->files now, this patch is just a preparation, and it don't change functionality. The only difference is export of two functions, that I pointed above. load_misc_binary() is the only load_binary method modifying fd table, so other methods are not modified. Note, that I don't replace sys_close(fd_binary) with __close_fd() in load_misc_binary(), because of next patch will kill this close completely, while __close_fd() requires to be exported too. It's pointless to export it and then to unexport it, so we skip this. Signed-off-by: Kirill Tkhai --- fs/binfmt_misc.c | 6 ++++-- fs/exec.c | 1 + fs/file.c | 2 ++ include/linux/binfmts.h | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index a7c5a9861bef..13c1fae45717 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -164,12 +165,13 @@ static int load_misc_binary(struct linux_binprm *bprm) * interpreter than keep it open and assign descriptor * to it */ - fd_binary = get_unused_fd_flags(0); + fd_binary = __alloc_fd(bprm->new_files, 0, + rlimit(RLIMIT_NOFILE), 0); if (fd_binary < 0) { retval = fd_binary; goto ret; } - fd_install(fd_binary, bprm->file); + __fd_install(bprm->new_files, fd_binary, bprm->file); /* if the binary is not readable than enforce mm->dumpable=0 regardless of the interpreter's permissions */ diff --git a/fs/exec.c b/fs/exec.c index 7eb8d21bcab9..4c3b924ae103 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1729,6 +1729,7 @@ static int do_execveat_common(int fd, struct filename *filename, bprm = kzalloc(sizeof(*bprm), GFP_KERNEL); if (!bprm) goto out_files; + bprm->new_files = current->files; retval = prepare_bprm_creds(bprm); if (retval) diff --git a/fs/file.c b/fs/file.c index fc0eeb812e2c..e578e5537c32 100644 --- a/fs/file.c +++ b/fs/file.c @@ -538,6 +538,7 @@ int __alloc_fd(struct files_struct *files, spin_unlock(&files->file_lock); return error; } +EXPORT_SYMBOL_GPL(__alloc_fd); static int alloc_fd(unsigned start, unsigned flags) { @@ -611,6 +612,7 @@ void __fd_install(struct files_struct *files, unsigned int fd, rcu_assign_pointer(fdt->fd[fd], file); rcu_read_unlock_sched(); } +EXPORT_SYMBOL_GPL(__fd_install); void fd_install(unsigned int fd, struct file *file) { diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index b0abe21d6cc9..1470be496ad2 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h @@ -24,6 +24,7 @@ struct linux_binprm { struct page *page[MAX_ARG_PAGES]; #endif struct mm_struct *mm; + struct files_struct *new_files; unsigned long p; /* current top of mem */ unsigned int /*