From patchwork Thu Nov 10 21:18:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Gruenbacher X-Patchwork-Id: 9422079 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 02A2060484 for ; Thu, 10 Nov 2016 21:24:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E319A296C3 for ; Thu, 10 Nov 2016 21:24:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7B05296CA; Thu, 10 Nov 2016 21:24:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (emsm-gh1-uea10.nsa.gov [8.44.101.8]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 099B9296C3 for ; Thu, 10 Nov 2016 21:24:31 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,620,1473120000"; d="scan'208";a="843547" IronPort-PHdr: =?us-ascii?q?9a23=3AA1MXlx9VsWjoxv9uRHKM819IXTAuvvDOBiVQ1KB5?= =?us-ascii?q?1uoWIJqq85mqBkHD//Il1AaPBtSAraofwLOK7ujJYi8p2d65qncMcZhBBVcuqP?= =?us-ascii?q?49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6?= =?us-ascii?q?JvjvGo7Vks+7y/2+94fdbghMijexe69+IRu5oQnMucQbgZZpJ7osxBfOvnZGYf?= =?us-ascii?q?ldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2Yu5M32rhbD?= =?us-ascii?q?VheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RSiu4qF2QxLzli?= =?us-ascii?q?wJKyA2/33WisxojaJUvhShpwBkw4XJZI2ZLedycr/Bcd8fQ2dOUNxRVyhcCY2i?= =?us-ascii?q?aYUBAfcKMeJBo4Xgu1cCqB2zDhSuCuzy0D9Fnn/407Mn3eovEg/J3gIgH8oMvX?= =?us-ascii?q?jJotj6O7sdX++rw6nT1jjDc/Fb1C3h5ITUbhwtv/eBVq9wf8rLzkkvEhvIg0mW?= =?us-ascii?q?qYP4JTOayP4Cs3OG5ORhT+KvlnAoqwdqrTe12sgsipfGhpgIwV3D7yp5z5w1Jc?= =?us-ascii?q?CmR059etGrCoBdtzuEOIRrQsMtWX1otDwmxb0BvJ62ZS4Hw4kkyR7Hc/GLboeF?= =?us-ascii?q?7x35WOuRPDt0nmxpdb2hixqo7ESs0vPwWtWw3VpQsyZInMfAumoQ2xHQ5MWLUO?= =?us-ascii?q?Vx80Sn1D2SzQ7c8PtELloxlafDLp4hxaM/mYQLvETYGy/2hF32jKiLdkU44uSo?= =?us-ascii?q?6/roYrHhppKEK497kBv+MqUzmsykG+g4LggPUHSb+eS7zrHj+1H2QK5WgfEsl6?= =?us-ascii?q?nZsZTaKdwapq6/HQBVzp4u5wuwAjqpytgVnWQLIEhbdB+IkYTlIUzCLOj9Dfil?= =?us-ascii?q?glSslDlrx+rBPr3kGpjNNWbMkLPgfbZ79k5dxxM/wstY55JJDLEOPOz8WlTqud?= =?us-ascii?q?zEDh42Lwy0w+H9BNV7zYMRQ3iDAqCeMKPMqVOI/P4gI/GQZI8JvzbwM/gk5v/p?= =?us-ascii?q?jX8/glIdeK2p0YIWaHC+BPhmJV+WYWDvgtcAD2cFoBAyTOr0h12eSTRTfWq9X7?= =?us-ascii?q?og5jEnD4KrFYnCRoGpgLyEwii7BIZbZm5YBV+RFnfobZ+LW+8WaCKVIM9ujCAL?= =?us-ascii?q?VaS7R48mzxGuuxfwy6B7IerM5i0YqZXj2cB75+3Jjx4y8yB7D8WG02yWSmF0hm?= =?us-ascii?q?IISyYt3KFxukxx0FCD0bJ3g/ZAD9xc++tJUhsmNZ7b1+F6CMr9WgHGfteUU1um?= =?us-ascii?q?Qc+pATI2TtIs2dMOZFx9G9q6hBDZwyWqG6MVl6CMBJEs6K3TwmLxJ8djxHbcz6?= =?us-ascii?q?QulUUpQs5VOW2hnK5/+BDZB5TVnEWBi6aqaaMc0TbR+2iZyWqBolpYUBJwUKXC?= =?us-ascii?q?Rn0ffVfZrdXn6UPEU7+uCK4oPhFHycGcNqtAcsfpgkleRPf/JNTeZHq8m2euCh?= =?us-ascii?q?aMwrOMa5Hne2EA3CXBD0gElhoc8WyBNQgkCSeru3jeAyB2FVLzf0Ps9vFzqGi1?= =?us-ascii?q?Tk8uyAGKdFFh2qGu+h4TgvydRfYT0agCuCs7rTV7Akq91crMC9WcvwphYLlcYd?= =?us-ascii?q?Ql7VZJz23ZsxB9MYK6L6B5nVMebRp4v1n12BVqD4VMi88qrGklzABqM6KXzEtB?= =?us-ascii?q?dy+E3ZD3IrDXNnT98w2ua6HM3lHTy8qZ+qAK6PsksVrjpx2pGlAk83p5z9lfy2?= =?us-ascii?q?Gc6YnSDAoOTZLxVV469x57p7HeZiky+ZjU2GZ2PqaqqD/C3MglBOw/yhavZ91f?= =?us-ascii?q?Kr+LFBfuE80GAMijMPEllEK1bh0eIu9S+qE1Mti6ePuGwqGrJvpgkyy8jWhd5o?= =?us-ascii?q?ByzF6M/TJmSuHUx5YF3+2Y3gyfWjfijVeurtz3mYdeZT0IAmW/yS/kBIheZqBp?= =?us-ascii?q?eYYLCGGuLNetxtV5nZLtXGRY9FG7DVMcxMCpYQaSb0D63QBI0UQXoGenmTehwz?= =?us-ascii?q?xvjT4pqquf3CrTw+XtbxcHIXZLRGhkjVftPYe0lMoWXE62YAg1jBGl/1r1x7BH?= =?us-ascii?q?pKRjKGneWV1Ify/yL2FmTKSwrKaNY8lB6Z4zqiVXTfizYUuARr76uRsa3DvpH3?= =?us-ascii?q?FCyzAjazGqppL5kgRiiG2HMXZzqGDVdttqyRjE49zcQeJR3j0ARCRjjDnbGl68?= =?us-ascii?q?P9618tmOkZfMrPy+XXq7VpJPaSnr0Z+AtCyj6G1vBR2zhu68mtv8HAgkzyD709?= =?us-ascii?q?1qWjvSrBrmZInkybi6O/p9fkZ0HF/899Z6GoZmn4szmp4Q32Mai46W/XUZl2fz?= =?us-ascii?q?KtNb1rzibHYXQj4L2dHV6hD/2EJ/NnKJ2575VnKFz8t5fda6f2cW1Twl789QDq?= =?us-ascii?q?eU8KJLnTFur1qltgLef+J9niwHxfs1734anvsJtxYzwSWTBbASB0ZYMjL2mxSO?= =?us-ascii?q?8d++sL1dZHyzfrioyEp+gdehAamcogFaRXn0YYkiHSlt4cV/Kl7M1mP86p38ct?= =?us-ascii?q?nKcd0TrgGUkwvHj+VNMJI+jOcKhS58NG3hvH0l1+46gQVg3Z6guoiLMWJt/Li2?= =?us-ascii?q?AhRALD36e9sT+i3xjaZZhsuW3ICuHpF/FTgQWZvoSvyoEDwMuvT7KwaOEDo8qn?= =?us-ascii?q?KFFrbFGw+Q9ltmpWrVE5+3L3GXOGUZzdJ6SRmTPkNfhhwUXDI/npMiGACl2tHu?= =?us-ascii?q?cEBj5j8L/l74sBxMyuB2OBbjTmfTvgCoai07SJKHNhpZ8hlC51vJMcyZ9u9zEC?= =?us-ascii?q?FY8YG7rA2NMmybewNIAHoPWkOaG1DjJaWh6sPY8+eGHOa+KeXBYamWo+xES/iI?= =?us-ascii?q?3Y6v0pdh/zuUK8qPOGNtAuYm1UpFR391AcPZmy8ASyYPjSLCc9abpAug+i1wts?= =?us-ascii?q?2/6u7nWQz16YuKEbRSNdJv+hCtjKiZK+GQgTx1KTFC1pMD3XXI0qQQ3EYOiyFy?= =?us-ascii?q?cDmgCbIAtTTXQ6LIgq9aFBAbayJpNMtT86I80AhNOcjBhdPzyrF4j+Q6C1NfWV?= =?us-ascii?q?zmgMGpatQAI3uhO1PfGEaLKLOGKCXWzMHsf6yzU7JQjP9OuB2uojubCFXsPjee?= =?us-ascii?q?lznzTR+jK+VMjDydPBNEooGxawptCW/gTNPmbR23Ktl3giMqwbcsnHPFKXYcMS?= =?us-ascii?q?Rgc0NKtrCf9iJYgvp4G2xH9XdqMPeLlD2Y7+bCLJYaq/xrAj57l+hC+nQ116NV?= =?us-ascii?q?7D1YRPxygCbdtNFurEu4kuaR0TdnVwJOpShNhIKOp0piOKHZ+YJHWXfL5h4N6n?= =?us-ascii?q?+QCxsSrdt/FtLvo7xQysTIlK/rNDdC9NfU8dEGB8jTKcOILnwhPgHzGD7TEgQF?= =?us-ascii?q?TiWmOn3Yh0xYjP6d7GaVroQgppjqhpUOVqdRVEYpGfMCFkRlANsCLY93XjM4kb?= =?us-ascii?q?6bi8sI6mClrBTKQcVav4zHVuiMDvn1LzaZl7ZEbQMSwbzkNYQTKpH720t6Z1l8?= =?us-ascii?q?govFAU7QUMtOoi1mdQ80vF9C8H5lTm0w2kLpcAWt72EPFfSshB45lhN+Yfgx9D?= =?us-ascii?q?fr+1o3PETFpDAun0Yrg9XqnTCRfSXqI6exR4FZFi30t0YpMpPhXQl0bRe+nUp6?= =?us-ascii?q?OzfYX7hRladvdXh3iA/AvptCAeNTQrdaYB8R2P6XfO4l3k5GqiW9wk9G6/DFBo?= =?us-ascii?q?V+mws3a56srm5A2gJ5YN4zO6PQOLJDzkJMiaKWoi+oyucxzRcQJ0YX7mydZTUI?= =?us-ascii?q?t1YONrk6ICqo5fdh5haelDtGYmQMUOAqov1y/EMnJ+uA1z7g06JEKk2pM+yfKL?= =?us-ascii?q?mZtHbGlc+JRVM9zUwIl09Y/bRs1scjaUWUXVg1zLSNDxQJKdbCKQZNYspJ6nfT?= =?us-ascii?q?eSeOsePQwZN6JIiyCufoTeqSu6kOmUKkABwlH4IS4cQdBpOsyl3XLd/7LL4Zzh?= =?us-ascii?q?Ug/BnkK0mADPROfhKLjCoLrtqhzJBpx4ldJzAcAWJ7MSmt4LbYuBMqiuKZXNgq?= =?us-ascii?q?encaQpcENnUuVc25gS5Yv25PDD+r0uIZ0wWC4Dj8pjzMAzXmadpseuuUbwt2CN?= =?us-ascii?q?6q4TU/77S2iVnP/5XCJmH6MNNiusPP6eIavJuIFvJUTLlnvEjHgYVYQWKlU3LX?= =?us-ascii?q?G96vO5fwc5UsbcDzCnuiXVy/kSg6T8HtPNu2L6iIhg/pRYBIsImbwj8jNMm9Fi?= =?us-ascii?q?0AFBdqve0D4rxzZREbaZohfRHorxg+N7C4IAqAyNquR2etJidIQPZHyOW7Z7pX?= =?us-ascii?q?zy0qbuCg03YvVZA6wPOx8UIUSpEKkwvSxfC9aIlCSSLzAGBSex3TpSolkGhsLv?= =?us-ascii?q?09zfk5wB7Tq1YTLi6Le/JzaGxfpd48H1OTLW9xCmoiSF+WlZDD7RK037AO4ytd?= =?us-ascii?q?mM5Z0fdDsHj/opDfYDWsWKiwqZvNqiQucMIorrF2P4H4PsSGs5bekSDFQ5nLrg?= =?us-ascii?q?2JSii6GORGmtJIOiJXXOFImX05OcwBoYdO9UgxWd0iKLFUFKYsobSqaT5lDSEM?= =?us-ascii?q?1y8ZS52P0yACguum3LvajBiQeow4MBMYqJVCnscdUylubyMEvqCjTYLWmHSfR2?= =?us-ascii?q?gXOgcc9xpM6xwElo9xeODl747ITJ5Dyz5Wv/J0XDHEFoNt91fhTGGZn0T4Qu27?= =?us-ascii?q?k+O1xQJS0O7s0t4DVR9/E0dd3PxZlk4pKLFxMKQQv5LKvSWTdUzmpm3h0u2mK0?= =?us-ascii?q?dNycfMbV33EJLFtXbgUi0b4XAVS5VDx23fFZQTlgp5abwkpFZXLYCnZEnx+SIr?= =?us-ascii?q?y55uH7miWsCh30wlomoeRye2D9pBDPlrsErQWD1heZ+rspvkO5JWQm9e45Cdrl?= =?us-ascii?q?BZkEJ2MyGn1ZVcMcZN4iUXXDhOpzWds8G+SMpZ2c95F5UMOMtwu2/hGKNYP5ic?= =?us-ascii?q?u2c5uqbyyn/f4Tw8s0y3xDSyG6+5U+JW5HcSGgM3KGSCskMvFfcj8n/O8lDRtV?= =?us-ascii?q?B55/tbBr+KjUhqvDZxApVOCS1T2XCjMVtzUGFMs/9GJ6TNb8xcX/4yaAevOxMk?= =?us-ascii?q?D/4pxUiJ8lxvkHjkfSNyrhNa9D7ZXwYqTykZmLDtmScRqsu/Iz8VV4pIbSk9by?= =?us-ascii?q?fCMw+bmSdXswhRa050QZAUGddF9K8F0oRK5MbCTlysKS4dVhx4Kg04yeZflVJE?= =?us-ascii?q?sEiAeyDdChSneO3SvRJpZseestSpLOjn8whakI/ntv4397kbTX28hQKtWczer5?= =?us-ascii?q?P7ttCSrUSOerv3P/G+bHPcQjXBlgy/hbAhD5bW5SfTKxZbJ4N8yXU6fZjrEXTL?= =?us-ascii?q?MgheJ6IHO0pbUrh3ac9Yre9HZ89rYroJ9LRpBhKAWBPgBpKjo+VBLlnOWzvSNS?= =?us-ascii?q?OB/fKjoYjL97zSVfDgZtCQx3bAW693Jox66SXhFLj3zY9T4VH22vBw9kNgVVfJ?= =?us-ascii?q?LSaBrMj7JgwR4MmubEzivocmHTnOGpd/jGLtxl1cd8oQWyCq7I4Yx41H53ntUu?= =?us-ascii?q?94z0zzsPFI97Z+94k34rdpycOqKqfOM/hatlVnAheMDAVw6potGHR/R3xWYuIJ?= =?us-ascii?q?LffeZ6AZjcTwpODrC6wY8gea9vdfadTZO0HBgdWwBSuESRNahgsBryAVLheE3f?= =?us-ascii?q?6fh6B0UdqlpfT+2k814VixNAQGzLd25YeA4KWIuvTabx7MzbgARqjqR9/8rrU2?= =?us-ascii?q?tEOU/v0ojrkOenZ6Ywe/CugSStYdxnv8zaAt1S8sEdnMH7Tu+P5ZUHI2gyzvlo?= =?us-ascii?q?thH1oMHPMUBr2L8Z5Ynmgmh+zTLscWfbxammaTCR6kFacPyXG26yuWJGllhg/B?= =?us-ascii?q?0xTrTGyu8lD5ti54TjHKz9v5lUpVTLa3D19IXyW1IU94rC+PPA3wudrxvaQ490?= =?us-ascii?q?A2MmrhtN6XlWuhPr1XH9flK9yHPSk0vk8Xg4EtRtyyw4AUB8CxINAL8HFxdvHe?= =?us-ascii?q?8X+kkzddo6dbgIrT+sSV+vLRHXm8gK2Vta6AxDVZynciu1Ew9MygN//J592QQP?= =?us-ascii?q?SozHwdTyFhtAvdRxS1sKDUr0gIOUyX10fGgJYKMcxE0nQj2UHm4eciTMg19ApA?= =?us-ascii?q?CobKf+kCqizrODvo3VafZMo6Vi2F0ztSHl/4Cld4F7Yh12L3psLGj2/Q+0cvRo?= =?us-ascii?q?lyaUPomQB3A58/KUI351gd2jADHhQVaRCHELGoAlzoLY4AVUcdbBSH26a1eqMs?= =?us-ascii?q?0E183Lyv4/TTbfRmCKoRN/ZSlAqOnFldGpIKr6IeRLZ8e15S9KHJoAjtF5boU+?= =?us-ascii?q?LglXUuKf2/Wtpa/twBt3s+/ga/QAKt6YxZ4LYFkp+IebBLYYPXscBn9Uhn+yQA?= =?us-ascii?q?diNTjxhklR+5V/4TpPz76NjBrJWo8vquVLoqR+gP9Rg0BmF+goD1gF89odDYyf?= =?us-ascii?q?1cSozTiYTw6gxNJWCFuJrC2RlmNeUOM56rfKpn93gfJigfJmgBMsCKZPQn+C9i?= =?us-ascii?q?LinT6EJeDc8WYtMYJsXNkxhOikL1QLFT6tbbGliABohodsAo9GT2xyo38Zs9Tu?= =?us-ascii?q?bg8CW5JY3b71xWI/xDizhjm8zYq+gI2/rSDzIX7mODZxhy2COCxIGHC+zs8uWU?= =?us-ascii?q?1NHUS1QGEzYuU4hHODqN5QynR+SylJXzUQOY89Tzj4w6dEKRQHyxgasEv71UEe?= =?us-ascii?q?FaliX0wjheF47yh/KPsNqg8mhXuUNdEIZ18xLFHL9TPpJhORT3jsOrXFRzBjPj?= =?us-ascii?q?eMHIcRojoPaWxv0S7OV6LUT+Y5EULwkZxLL75npVTxduR6TtvlmDR+IRecFqSP?= =?us-ascii?q?XaoXBJ8YhgMbMAPECBpJz2qTdFsF82DxUzaLAusjxadlLDnAlUW6boprEAihET?= =?us-ascii?q?UcNiuUNWH2K/Jn4+7SLdVatJlKmRFOAV8jKLQ6wBTUpoND9+QxSy2JlpYLumg/?= =?us-ascii?q?RHsmJAniNgr/knyDhmSwWmuSzsva0BwzQg96+ktD8Zo3xKUv2ekzvUCVVE1PkK?= =?us-ascii?q?i6YcBGrl6Vy4enYDd5H+4LhgJcTn7okh+G8yYRAsciwJR+igDDvwj6yQCIyVrN?= =?us-ascii?q?1cnAKNuNnJbbKrIigdKq89yQn6S3Zg3QbQmhdo8G0WQjSv99IkK4C9NtwjxiW2?= =?us-ascii?q?A2Tbc0wM4qxRusvrqVELVPc2aU9mwGh70MiHQS0NRMrVF2kpjggkbXhEf49C6B?= =?us-ascii?q?8bEakomTWIvqhd8wEKYTfUDJ6q+o3NksfJw3U9S8llxn7OrK2fmpwqyGFlm89z?= =?us-ascii?q?7iOWuXQSafbXU8l3D3j3y4dQ1O3+Z/K2suwdT4tm0ruhWucYMsa/4Wu2xIlqWk?= =?us-ascii?q?i9y7QcAVW5PuEDxrPAXiarU2KYX/qEc3SWkzY/LEHy+QGiLkcrZ8dSs089LuzC?= =?us-ascii?q?i4ZTlw3lVrN1SDufpVvfzGE4KuMacAQ2uIa7dAAQSu4eefScL/A0wPIiEFsMc2?= =?us-ascii?q?PJHSxuBu+0sV6snJB7O3Jk4UX7feTi7BvrMN6TGhkYC47VsIR9+fugRmKOIXVg?= =?us-ascii?q?1gF9PFFo9+fDEFQ8rvNcc5eUndXLm9R70PIKd/RzPi05oNITnJxs6ZWM2seQbR?= =?us-ascii?q?7R1oryJc3SovWABv3fzkcqemJdUrcCYwP6/YY6Ptk/W7LNG7tVpxIcCrYmQJY5?= =?us-ascii?q?LWf+6Ll0LB9vcg7WfLm7mdflpuSXZpZPvH/W6lUwLDvAux0d1PO7UBZ3b5ewh3?= =?us-ascii?q?X9OJowXC5Or8VxCht6G4tCA80AoBSjA56VgKG0lcS8+kJ7u+8PtKr/FOrK1NCn?= =?us-ascii?q?0IlrWJha/0OLNi7LBKZ3mkRlkviygvDY35j/EcPiY9IEW/RlTWPeb7/GH5m/Ki?= =?us-ascii?q?iQNc7mfE5G6bGc2qpjUhqNfCD5Q7aGtCq8OfVj5UU01Jd1fPLXzDM39LHbxNry?= =?us-ascii?q?aH1Hpie5s3GGKoFT7FrUCuzCRxhUU+aK8H55Ha0Laov57OMOMd0kwNiB7Ah/9T?= =?us-ascii?q?BC0MqeI6i9tU/BwUN7eojdLEvuwSo5XpMKIBunO0s2nWDZsmjdAWhbLsW8Msli?= =?us-ascii?q?ntKVDh3r50lslmAhYWFPGnboRdiPI2gUxdq+axeR+QJIEdkDhei3dlA8tqKpVO?= =?us-ascii?q?loNY9JmeKwtLUIidxpMT3ARNBGPyHMK797Jj5RDuTUpFg0eRMFsqE1WoEvapSU?= =?us-ascii?q?JkMILluAwzvozQTeyU30a8Cs1KGRLSYT6HpI07LF0TlKpwm+ovuZnMzjULbHY5?= =?us-ascii?q?HyXf7SNjclVz6ASTQ1C0ap9k+uu+AYs/qAPWcfvlcUbzqQCAEJpaBvqsPfA3TO?= =?us-ascii?q?me1lYJ0KhPeaWz3/SC14iKo+HCBLul6QQ/AbDwnZc2fhgHZAuAylPvJD5mnqY7?= =?us-ascii?q?qcxqpUQOwWHpBMfueCQ9TGZf9SPSwomSsdOOa9ed3csrk430nUQmoZCanI6Uae?= =?us-ascii?q?QFSYQ/OG2zLrRoIVv44utiov4NLQkTd9E77UMLaHuz6u7om4gT6XueLETWYteU?= =?us-ascii?q?01j/wGAGSa3hlALHsLC8oUuEHwWKKAYVhD1G4xg+J0xxAMYBhzUmFp0nBOnva9?= =?us-ascii?q?H8pZSUQOjGOvW/0Ld1Z3Ayk1/UCU4w3+e9sAudrcR2VG7LsDVZIdLOU06InQIK?= =?us-ascii?q?Yf3vQp3DVmoCw8qCWdCFVdgxmK86rKAaJ82KNN5XMi8/FwQE6PXyvVcnLbxYq+?= =?us-ascii?q?F8JP2SBurGj/18rau+BiKLpXqoJiDVcUHy12PNHd/DFGUWHywgeyuQi0HCiGKj?= =?us-ascii?q?ID/DkLPTAFdvpyz+JjshbIcdDB6UeLuqIktkSkFAiLCr2u2JNXFM7lzwO4ZjdX?= =?us-ascii?q?cWbjK5cjkv9QkJ43ZqQ9aMDqG1ncKiDmBx+c/iUL8wLn5L+sCJwOil4Cn70sJd?= =?us-ascii?q?ehZIwDCd3UzXks2HpT7IYexm2WRNXEb9v27NIuQTkjLJi2AUHiepPSd2H/rPkZ?= =?us-ascii?q?04wGD0+Iaf4COGtQvtgxjGi8PH2y/oKl1ymBNKyxbnSWItwDNp6hgGlDmO6VP4?= =?us-ascii?q?z0+vFEA3Mv56Uwicrc83vZr2LPMp6MYnbiz0BxZVWXYsOJ9MQ4a8d0Yg=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2HXBAAV5SRY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgwU?= =?us-ascii?q?BAQEBAR+BV7RZhkYliCVTAQEBAQEBAQECAQJfKIIzGgGCFAIEAQIkExQgCwMDC?= =?us-ascii?q?QEBFykICAMBLRURBgEHCwUYBIg+slFSOAKLLgEBAQcBAQEBAQEhhj6IdBEBhV8?= =?us-ascii?q?eAQSIUJFnkFMCihCGCkmQelVYKByDHxyBXnGFLYItAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 10 Nov 2016 21:24:30 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus [192.168.25.40]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id uAALOUuw025925; Thu, 10 Nov 2016 16:24:30 -0500 Received: from tarius.tycho.ncsc.mil (tarius.infosec.tycho.ncsc.mil [144.51.242.1]) by prometheus.infosec.tycho.ncsc.mil (8.15.2/8.15.2) with ESMTP id uAALIiXR031926 for ; Thu, 10 Nov 2016 16:18:44 -0500 Received: from goalie.tycho.ncsc.mil (goalie [144.51.242.250]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id uAALIefP025085; Thu, 10 Nov 2016 16:18:43 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1BLAAAt4yRYhxy3hNFeGwEBAQMBAQEJAQEBgzABAQEBAYF2tFmCN4QWhiQCgh1TAQIBAQEBAQITAQEBCgsJCR2FEgIBAydSEFFXBgESiF+yWFKLaAEBAQcnhj6OZR4FiFCRZ5BTApAaSZB6gVWDOxELgV49NIdaAQEB X-IPAS-Result: A1BLAAAt4yRYhxy3hNFeGwEBAQMBAQEJAQEBgzABAQEBAYF2tFmCN4QWhiQCgh1TAQIBAQEBAQITAQEBCgsJCR2FEgIBAydSEFFXBgESiF+yWFKLaAEBAQcnhj6OZR4FiFCRZ5BTApAaSZB6gVWDOxELgV49NIdaAQEB X-IronPort-AV: E=Sophos;i="5.31,620,1473134400"; d="scan'208";a="5816987" Received: from emsm-gh1-uea11.corp.nsa.gov (HELO emsm-gh1-uea11.nsa.gov) ([10.208.41.37]) by goalie.tycho.ncsc.mil with ESMTP; 10 Nov 2016 16:18:43 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3Aug9ftxWqACDO0ihtbq8RH28pCf/V8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYbBOPt8tkgFKBZ4jH8fUM07OQ6PG7HzRbqs/d7TgrS99lb1c9k8?= =?us-ascii?q?IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBo?= =?us-ascii?q?KevrB4Xck9q41/yo+53Ufg5EmCexbal8IRiyowjdrNUajIVtJqosxRbEomZDdv?= =?us-ascii?q?hLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfM?= =?us-ascii?q?TQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklD?= =?us-ascii?q?sLOjgk+2zMlMd+kLxUrw6gpxxnwo7bfoeVNOZlfqjAed8WXHdNUtpNWyBEBI63?= =?us-ascii?q?cokBAPcbPetAr4fzuUYAoxW9CwauCuPi0SNEimPs0KEmz+gtDR3K0Qo9FNwOqn?= =?us-ascii?q?TUq9D1Ob8OXOCz0abI1yvMYOlN2Tzg6YbIaA0hru+KXb1ra8Xe1UkvGB3fjl6N?= =?us-ascii?q?roHqJTyV1v4Qs2eF6epvTvighnU9qw5vvzevxt0jipXTio0JzVDE8Dx0zYAoLt?= =?us-ascii?q?O7UE52ecCoHIdUui2AKod7TN0uT3t1tCs5xLAKo4C3cSsMxZ863RDQceaHfJKN?= =?us-ascii?q?4h/7VOaePzN4hHV9dbK6iBe+7FKsyvfiWcap0FZFtDZFnsPQuXAK0hzf8smHSv?= =?us-ascii?q?1j8Ue9wTuDyRzf5+VeLUwpm6fXNYQtzqMzm5cdq0jPACz7lF3zjKCMd0Uk/uao?= =?us-ascii?q?6/7gYrXjvpKTLYB0ihvjMqswnMywGv43PxMUX2eF5Ou81Kfs/VHjTLpWif02l7?= =?us-ascii?q?HVsIrGKsQDuq65HwhV35446xmiFDery8gYnHkbI1JFfxKLlY7pO0rUL/ziAve/?= =?us-ascii?q?hEqsmi9xx//aJr3hHonNLn/bnbf6Y7l9709cyAwuzdFQ/J9UFrEAL+7zWk/2rt?= =?us-ascii?q?DYCAQ5PBauz+boD9V9yNBWZWXaOqaENOv3tliS66p7O+CRYKcNsSv5bv0i4OTj?= =?us-ascii?q?y3Q+nAlZNZK10IMXZXbwJfFvJ0GUcDK4mdsaOXsbtQo5CurxgRuNViAFIz6fRa?= =?us-ascii?q?M3rgkyEoO9RdPOXom3gaepxC6hH4ZOYmlNBxaLC3i+JKueXPJZQSSeOMJoiXQr?= =?us-ascii?q?T6WsTYUo3hGjrkeuwrV9M+fS8CQwr5/v1NFpoebUkEdhpnRPE82B3jTVHClPlW?= =?us-ascii?q?QSSmpzhfgnrA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0HPAAD+4yRYhxy3hNFeGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwUBAQEBAYF2tFmCN4QWhiQCgh1TAQEBAQEBAQECAQI?= =?us-ascii?q?QAQEBCgsJCR0wgjMaAYIUAgEDJ1IQUVcGARKIX7JYUotnAQEBBwIBJIY+jmUeB?= =?us-ascii?q?YhQkWeQUwKQGkmQeoFVgzsRC4FePTSHWgEBAQ?= X-IPAS-Result: =?us-ascii?q?A0HPAAD+4yRYhxy3hNFeGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwUBAQEBAYF2tFmCN4QWhiQCgh1TAQEBAQEBAQECAQIQAQEBCgsJCR0wg?= =?us-ascii?q?jMaAYIUAgEDJ1IQUVcGARKIX7JYUotnAQEBBwIBJIY+jmUeBYhQkWeQUwKQGkm?= =?us-ascii?q?QeoFVgzsRC4FePTSHWgEBAQ?= X-IronPort-AV: E=Sophos;i="5.31,620,1473120000"; d="scan'208";a="683588" Received: from mx1.redhat.com ([209.132.183.28]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Nov 2016 21:18:37 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 53E5A81241; Thu, 10 Nov 2016 21:18:36 +0000 (UTC) Received: from nux.redhat.com (vpn1-6-6.ams2.redhat.com [10.36.6.6]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uAALIVmQ022357; Thu, 10 Nov 2016 16:18:35 -0500 From: Andreas Gruenbacher To: Paul Moore , Stephen Smalley , Eric Paris Subject: [PATCH 2/4] proc: Pass file mode to proc_pid_make_inode Date: Thu, 10 Nov 2016 22:18:28 +0100 Message-Id: <1478812710-17190-3-git-send-email-agruenba@redhat.com> In-Reply-To: <1478812710-17190-1-git-send-email-agruenba@redhat.com> References: <1478812710-17190-1-git-send-email-agruenba@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 10 Nov 2016 21:18:36 +0000 (UTC) X-Mailman-Approved-At: Thu, 10 Nov 2016 16:21:36 -0500 X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Security-Enhanced Linux \(SELinux\) mailing list" List-Post: List-Help: Cc: Andreas Gruenbacher , selinux@tycho.nsa.gov MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Pass the file mode of the proc inode to be created to proc_pid_make_inode. In proc_pid_make_inode, initialize inode->i_mode before calling security_task_to_inode. This allows selinux to set isec->sclass right away without introducing "half-initialized" inode security structs. Signed-off-by: Andreas Gruenbacher --- fs/proc/base.c | 23 +++++++++-------------- fs/proc/fd.c | 6 ++---- fs/proc/internal.h | 2 +- fs/proc/namespaces.c | 3 +-- security/selinux/hooks.c | 1 + 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index ca651ac..6eae4d0 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -1664,7 +1664,8 @@ const struct inode_operations proc_pid_link_inode_operations = { /* building an inode */ -struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *task) +struct inode *proc_pid_make_inode(struct super_block * sb, + struct task_struct *task, umode_t mode) { struct inode * inode; struct proc_inode *ei; @@ -1678,6 +1679,7 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t /* Common stuff */ ei = PROC_I(inode); + inode->i_mode = mode; inode->i_ino = get_next_ino(); inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode); inode->i_op = &proc_def_inode_operations; @@ -2004,7 +2006,9 @@ proc_map_files_instantiate(struct inode *dir, struct dentry *dentry, struct proc_inode *ei; struct inode *inode; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK | + ((mode & FMODE_READ ) ? S_IRUSR : 0) | + ((mode & FMODE_WRITE) ? S_IWUSR : 0)); if (!inode) return -ENOENT; @@ -2013,12 +2017,6 @@ proc_map_files_instantiate(struct inode *dir, struct dentry *dentry, inode->i_op = &proc_map_files_link_inode_operations; inode->i_size = 64; - inode->i_mode = S_IFLNK; - - if (mode & FMODE_READ) - inode->i_mode |= S_IRUSR; - if (mode & FMODE_WRITE) - inode->i_mode |= S_IWUSR; d_set_d_op(dentry, &tid_map_files_dentry_operations); d_add(dentry, inode); @@ -2372,12 +2370,11 @@ static int proc_pident_instantiate(struct inode *dir, struct inode *inode; struct proc_inode *ei; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, p->mode); if (!inode) goto out; ei = PROC_I(inode); - inode->i_mode = p->mode; if (S_ISDIR(inode->i_mode)) set_nlink(inode, 2); /* Use getattr to fix if necessary */ if (p->iop) @@ -3059,11 +3056,10 @@ static int proc_pid_instantiate(struct inode *dir, { struct inode *inode; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFDIR | S_IRUGO | S_IXUGO); if (!inode) goto out; - inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO; inode->i_op = &proc_tgid_base_inode_operations; inode->i_fop = &proc_tgid_base_operations; inode->i_flags|=S_IMMUTABLE; @@ -3352,11 +3348,10 @@ static int proc_task_instantiate(struct inode *dir, struct dentry *dentry, struct task_struct *task, const void *ptr) { struct inode *inode; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFDIR | S_IRUGO | S_IXUGO); if (!inode) goto out; - inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO; inode->i_op = &proc_tid_base_inode_operations; inode->i_fop = &proc_tid_base_operations; inode->i_flags|=S_IMMUTABLE; diff --git a/fs/proc/fd.c b/fs/proc/fd.c index d21dafe..4274f83 100644 --- a/fs/proc/fd.c +++ b/fs/proc/fd.c @@ -183,14 +183,13 @@ proc_fd_instantiate(struct inode *dir, struct dentry *dentry, struct proc_inode *ei; struct inode *inode; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK); if (!inode) goto out; ei = PROC_I(inode); ei->fd = fd; - inode->i_mode = S_IFLNK; inode->i_op = &proc_pid_link_inode_operations; inode->i_size = 64; @@ -322,14 +321,13 @@ proc_fdinfo_instantiate(struct inode *dir, struct dentry *dentry, struct proc_inode *ei; struct inode *inode; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFREG | S_IRUSR); if (!inode) goto out; ei = PROC_I(inode); ei->fd = fd; - inode->i_mode = S_IFREG | S_IRUSR; inode->i_fop = &proc_fdinfo_file_operations; d_set_d_op(dentry, &tid_fd_dentry_operations); diff --git a/fs/proc/internal.h b/fs/proc/internal.h index 5378441..f4494dc 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -162,7 +162,7 @@ extern int proc_pid_statm(struct seq_file *, struct pid_namespace *, extern const struct dentry_operations pid_dentry_operations; extern int pid_getattr(struct vfsmount *, struct dentry *, struct kstat *); extern int proc_setattr(struct dentry *, struct iattr *); -extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *); +extern struct inode *proc_pid_make_inode(struct super_block *, struct task_struct *, umode_t); extern int pid_revalidate(struct dentry *, unsigned int); extern int pid_delete_dentry(const struct dentry *); extern int proc_pid_readdir(struct file *, struct dir_context *); diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c index 51b8b0a..766f0c6 100644 --- a/fs/proc/namespaces.c +++ b/fs/proc/namespaces.c @@ -92,12 +92,11 @@ static int proc_ns_instantiate(struct inode *dir, struct inode *inode; struct proc_inode *ei; - inode = proc_pid_make_inode(dir->i_sb, task); + inode = proc_pid_make_inode(dir->i_sb, task, S_IFLNK | S_IRWXUGO); if (!inode) goto out; ei = PROC_I(inode); - inode->i_mode = S_IFLNK|S_IRWXUGO; inode->i_op = &proc_ns_link_inode_operations; ei->ns_ops = ns_ops; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index b98ab2a..e4527d9 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3954,6 +3954,7 @@ static void selinux_task_to_inode(struct task_struct *p, struct inode_security_struct *isec = inode->i_security; u32 sid = task_sid(p); + isec->sclass = inode_mode_to_security_class(inode->i_mode); isec->sid = sid; isec->initialized = LABEL_INITIALIZED; }