From patchwork Mon Jan 8 18:04:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 25273 Received: (qmail 130535 invoked by alias); 8 Jan 2018 18:05:15 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 130526 invoked by uid 89); 8 Jan 2018 18:05:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=H*r:203 X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com Message-ID: <5A53B2BA.1090500@arm.com> Date: Mon, 08 Jan 2018 18:04:42 +0000 From: Szabolcs Nagy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: GNU C Library CC: nd@arm.com, Carlos O'Donell , Florian Weimer Subject: [PATCH v2][BZ #22637] Fix stack guard size accounting X-ClientProxiedBy: HE1PR05CA0208.eurprd05.prod.outlook.com (2603:10a6:3:f9::32) To AM5PR0802MB2483.eurprd08.prod.outlook.com (2603:10a6:203:9b::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 56a67d96-fce6-461f-c6fe-08d556c24d72 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(49563074)(7193020); SRVR:AM5PR0802MB2483; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 3:2g4XgnR08tJ4OVd8743UUxtesLJMmzaZ0GDAurQX+fBTJmcnjXa2LuDDaNPOdnkEWeWpwC/KM1xAu0rvLr9ndoLpmkUI/+loVIwRZoNFHI1Eec2w7gc+1ptDiW7vSZXJThm9Dne6ACommWi3Iiws9yvsM4rCnIhGNTnKXt9kgy4ZR7mKHE0XymAlsgCJI5mW/hj/m9+VUYhFJpOGLnyrTqZ32L6TYAgMAfj52in+ZzF/PU3ngW9bejKZUBmkpPfF; 25:9RcgMa8uVMHEtsSg0n/cgnhdLNPZyY37LQWdhAnqUsxmaS9EKBQFuMC1tRYzpmQkgJB7RHXgDS8n3s74Xb73amMkhcde4uvtsDnIxXuJypDyD81553rIzMgFNNNEshLYw8uvh/fHZz4Wg+nJu3qK64UZ5L2NiRyHDSAm2tHZpRdRIh/meYJV/F68l7mSNvmBlcENRuV3xlqg3OaS2JekM5Ck3k+o0EN9S2V53nBfygA/1NFlrSUWwGi+d/i+Y2evGTxdQTEC47JF6ynrnkdOOWOkXR9mv5mrcG7wvTO6+P9tz/CXiX0lxbtquNo4//K3adZVMe71z6cEuSuYi+r2RQ==; 31:EIhx2qn/Z1Yrpw0H4kVsL4lKB/G7bubnRSbkisuHh/XOIKptsCjn6cvsgA7FzmtnY9zPWrMaMqaGdBQ2NeU2zV9+4gR2we6tJcAxxs0vKqr+k++OjSSGv8qxRmceNQUrXtONAU7o7bkPCwA/NrIFAtVzQfb6QbUikPLQoLU2tb88eRWRocTcoBsF5tTTd6M5QZa556DfN0C4C2IGmYfGukHvdupEO78nYp4OfIacbaE= X-MS-TrafficTypeDiagnostic: AM5PR0802MB2483: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 20:8Ru42xeF89yc3tZO9+/IuZZl1W5dHwxqa//ZbBUFo3ko9MqIMlH7VgT71bGWji3VWF39yEjm9T9PCJYdcEU/AYMmJ5OBou4xsFHLxsUMYW5M8Sr1M9fpW6oQUGhN060QG01VgND3FUFsUZTnEGOz2CVQFe9gUjtPwzpNeJyTkc8=; 4:s/1XvkQ+osOShz3ZXQlNd1LhHg2JOfXd6ksVtrr6ZhnhFo3PkOq9W2VyFrMdF//7MTzUgJFKztrZLDqesyg1JxkiX/JQZCJoHJgHm0wfnofuXV5hn+zQFgl1/PMIYBlqRW6Bwy/LnfpD5yWBgsdbK5UdaSGhwTiEuC/IooLouJ2NK7F8okxrwl3cUD9U1AuvhuE0eZM1GG09X9f7JLKYGJbfyLZmLRFChbe40M3e9dLANyjMOCYL9y7lhYhUZBUaYVkWZCCiX0KJAr+lqnwGjDquRiD1+tk/ChufD6jqUBL+t/H3yHG/NlhsErkfhM6F X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(211171220733660); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040470)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231023)(944501075)(3002001)(10201501046)(6055026)(6041268)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM5PR0802MB2483; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM5PR0802MB2483; X-Forefront-PRVS: 054642504A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6049001)(396003)(366004)(39860400002)(346002)(376002)(39380400002)(199004)(189003)(15650500001)(4610100001)(316002)(105586002)(25786009)(6666003)(83506002)(5890100001)(65956001)(4326008)(36756003)(68736007)(5660300001)(2906002)(16576012)(53936002)(65806001)(106356001)(77096006)(97736004)(5000100001)(6486002)(80316001)(7736002)(16526018)(64126003)(6916009)(33656002)(86362001)(270700001)(59896002)(33964004)(87266011)(65816011)(54906003)(568964002)(478600001)(386003)(21490400003)(8936002)(58126008)(81156014)(72206003)(52116002)(2476003)(3846002)(81166006)(66066001)(16586007)(8676002)(305945005)(6116002)(84326002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2483; H:[10.2.206.69]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:3; LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2483; 23:oj4++y6LaiglptNYHWr5qygXPSUiXQJS4uZcne2?= =?us-ascii?Q?/F2Uu5c2n6qPYJlpHx1lMnCyCuyvbR9fiKFRB0Suz+XrPYF//+BC7mXNbbXD?= =?us-ascii?Q?gL8Lau7Xfox394YZhG3j7wE4qHjH+bLuSgL3HQRCkUYPWVRlpBYrhGnu8dEC?= =?us-ascii?Q?lHXmktW7NVR4v9B2AkuWjMC7x1kTqiElRy5N9WZwNVQAyeI94wsLJ3psbkV8?= =?us-ascii?Q?bMyW8YOcA+djWkni/ieDmCuUR4FG7PvxVzB4u19mC409yKkFQ5IOQeDTNFvx?= =?us-ascii?Q?eKABH3ZODmASMN9CBxJ9TskapnprtWr2d5xfhNrI0HIDQCotD46SXYHYbGXJ?= =?us-ascii?Q?CXo5PCGhdBTHiLA4CAO+yQqC602DaNETLrjkFvTwsmGy5zq4QFTqBmW8gL/N?= =?us-ascii?Q?fzxNFuR3Slw5KdZebTB1apNB7zZHQUDPAgvmi4sI6iPq2s0bqWIzIFcCBtFj?= =?us-ascii?Q?h9l6yRCxVf7YdgAsaDCJkYFgmQGJM3UJbPjifvyr3NrIHSiK6BHzPFjKWB2B?= =?us-ascii?Q?uzn92dXdX2lOQ7wCdhu9PS1I2Pst2CqrV9+Zi+BKBtJMLXmIep9zhEnoVGAF?= =?us-ascii?Q?rfT0TBQwT3fTNqyKVJS7vQRaT6hJ1tZ413r60udJmQi34Ay9btrYfF30pMn1?= =?us-ascii?Q?4ACm5JA3R8wSkMldGsKP5ecjmDBaoQ35qsWSwcVgBjR5yvyko5YKjveG3jjD?= =?us-ascii?Q?2wEnb2MM4Q9XE9eM4Zff2pHCgnqmXRGlVvj3cuMSQ1tYRLUnJktAioXQgbXR?= =?us-ascii?Q?etPqVcAkKHdorkY5r0kH+4XVMdsiiPurGiXuMpWS6BjoMIxAv1XTe59Hhm+v?= =?us-ascii?Q?BdyxcVNeUVkzhBBaWCVDVKp8NiHwFZ2fLVh5wnFGWk4/zI9aNtEyZP+3zErp?= =?us-ascii?Q?0q8uvzWKomrV03OPwQawz3qA3F+Avf9bEQb/5HpRPgUwyXUc/2bFOr54+yK1?= =?us-ascii?Q?PeHCLAWjvRVNT8I5wf8MUkYNWr0s3/JygwIWfqG2Y2RKR6kHxoJAOAxsi9xS?= =?us-ascii?Q?A04QrKGYTDWlrA2yqjZFFiq9+FrU46BUUoSuXkm/v0uupMeEziy5I0O8ltpp?= =?us-ascii?Q?yVPDAuJ4eB59/9sIk/1u63yhE2OX+85dclhetC8AEgpXzZQpRP8g2JiTEz90?= =?us-ascii?Q?tGCccmf/txKt4tfAf8KdKWE773e4ICEmp8GOlMlUnLX7SnAHya6CDRiSVQW5?= =?us-ascii?Q?woJRn/6fdaMW3eqyQ3jpK9oj2zEV5R/2IHsaDlmV/taa+BnnYM+8oHehSacf?= =?us-ascii?Q?kePdyk4zdowsm8aEp3hWjQL7O2z60DhrHTa/AitzGOE4+SEULnfHX3ypNI0g?= =?us-ascii?Q?FgsmWvwryW2+p4LuzX4xIa5QY0vsRHLePvdRfX4qj3lpbtYHrycC0sUb31KO?= =?us-ascii?Q?atsAxmsXIdRon79c/iqmx/iLn7LZ5krqB/tNXoPVO5uVGGhGsm7exVtCVoKQ?= =?us-ascii?Q?rOVrOvAKR1a+PU2AhqaQxNqbLp7lRGsk=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2483; 6:9Di4U9F0lxGGuqSOCwjlwVYz5KfAL4sWv0LHSIQJzDiPV9H8EQCD5g7zv4nii/xZSpBcg9Sj0YJid57xinIBgM32pUG9jmobA/3BcgWEWjiNTlEEWGxWUsEODTgaAUPn3wiTp0R2Q5gyswYNOtvf7F5C1oSPn3jqI8qzxgl421J7pjtrBdWBcInQBFIIdQ3jhdEnHykWjL9XPVNclsj+dkr8xcNSNmZNF2BLv4Bf3LlZxcWAIvBz9qmQ+rUVCJRdBAT1jAh2HE13A3KCPG5e7otvc6RDpqJUASXAGppLVbydyhgqqv706mi0MIk5k+4aFMGDACn9eBybxxMA4Vm2Cbtcp/CpR5SOtZB56EtDBn8=; 5:pRyEyD92YyJbKeoSVvIOPLJ7P2l8B1BJlA3qNPiVc52bouPF1YfA50jUhXNN0Lbt9rTlpnesc4biqmTsiiexRHg77ksOudJAcaRji5/srsE6jmohz4IQxPu6mB3lEhEOlj1Diwqbk7Z7CcoWORpP4VoXb25wwoKcPL72h//70vA=; 24:ZeyQ4CzxhX5gwiGWT3lsInpS8Ql/qZtRPPeEZSBilhUfhnA+9vBLbaWBUQbgXTnW3ZHg5DdZGtTeHZuisoLm4wccjGTka8mzqrXh2hVNc4Y=; 7:zbgPyF8aFTaqhUCWlO0AOVENnsNXYnJ2IPxCf9mufWuL0JYmHuy5sz7sSvdbsl4CvOlBrB6chSxUUuMZ02Obdi+sCe18K+cAvSsIMb9PVHwLt2a/OVtc8Z4OCJRQ99b3fZWMYvkI8EfPU8aqNvHv53GGsBI/q0O+naWeQBcFGQFaVNMrzGOQbkmuf3IK8TDheYC4UcnpRNzrZmGGJRd2OZuq9a8fxsnD4lo1zmfClvXcpGRQ2koCajm2rFg4ZVcQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2018 18:04:45.8461 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 56a67d96-fce6-461f-c6fe-08d556c24d72 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2483 v2: - use separate bug number from the tls accounting issue. - check for arithmetic overflows. Previously if user requested S stack and G guard when creating a thread, the total mapping was S and the actual available stack was S - G - static_tls, which is not what the user requested. This patch fixes the guard size accounting by pretending the user requested S+G stack. This way all later logic works out except when reporting the user requested stack size (pthread_getattr_np) or when computing the minimal stack size (__pthread_get_minstack). Normally this will increase thread stack allocations by one page. TLS accounting is not affected, that will require a separate fix. [BZ #22637] * nptl/allocatestack.c (allocate_stack): Add guardsize to stacksize. * nptl/nptl-init.c (__pthread_get_minstack): Remove guardsize from stacksize. * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise. Reviewed-by: Carlos O'Donell diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 05b8ed331b..b374f4794d 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -532,6 +532,10 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* Make sure the size of the stack is enough for the guard and eventually the thread descriptor. */ guardsize = (attr->guardsize + pagesize_m1) & ~pagesize_m1; + if (guardsize < attr->guardsize || size + guardsize < guardsize) + /* Arithmetic overflow. */ + return EINVAL; + size += guardsize; if (__builtin_expect (size < ((guardsize + __static_tls_size + MINIMAL_REST_STACK + pagesize_m1) & ~pagesize_m1), diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index c237a3675a..5a4b52419f 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -472,8 +472,5 @@ strong_alias (__pthread_initialize_minimal_internal, size_t __pthread_get_minstack (const pthread_attr_t *attr) { - struct pthread_attr *iattr = (struct pthread_attr *) attr; - - return (GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN - + iattr->guardsize); + return GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN; } diff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c index 961d711fd2..c79fd7b4ec 100644 --- a/nptl/pthread_getattr_np.c +++ b/nptl/pthread_getattr_np.c @@ -57,9 +57,10 @@ pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr) /* The sizes are subject to alignment. */ if (__glibc_likely (thread->stackblock != NULL)) { - iattr->stacksize = thread->stackblock_size; + iattr->stacksize = thread->stackblock_size - thread->guardsize; #if _STACK_GROWS_DOWN - iattr->stackaddr = (char *) thread->stackblock + iattr->stacksize; + iattr->stackaddr = (char *) thread->stackblock + + thread->stackblock_size; #else iattr->stackaddr = (char *) thread->stackblock; #endif