From patchwork Tue Jan 31 19:43:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9548307 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 AE9A360425 for ; Tue, 31 Jan 2017 19:44:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A063127F81 for ; Tue, 31 Jan 2017 19:44:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9505F28338; Tue, 31 Jan 2017 19:44:23 +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=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from emsm-gh1-uea11.nsa.gov (emsm-gh1-uea11.nsa.gov [8.44.101.9]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DF63227F81 for ; Tue, 31 Jan 2017 19:44:22 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,315,1477958400"; d="scan'208";a="2769937" IronPort-PHdr: =?us-ascii?q?9a23=3AUSbk+xdclMfd2Xk2v/nRXkrLlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcq4YBaN2/xhgRfzUJnB7Loc0qyN4vymBzFLuMzf+Fk5M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFRrwLxd6?= =?us-ascii?q?KfroEYDOkcu3y/qy+5rOaAlUmTaxe71/IRG5oAnLt8QbgYRuJrsvxhbIv3BFZ/?= =?us-ascii?q?lYyWR0KFyJgh3y/N2w/Jlt8yRRv/Iu6ctNWrjkcqo7ULJVEi0oP3g668P3uxbD?= =?us-ascii?q?SxCP5mYHXWUNjhVIGQnF4wrkUZr3ryD3q/By2CiePc3xULA0RTGv5LplRRP0lC?= =?us-ascii?q?sKMSMy/2/Nisx0kalVvhSvqRJiyILQeY2ZKuZycqbbcNgHR2ROQ9xRWjRBDI2i?= =?us-ascii?q?coUBAekPM+FAr4T/ulcDoxSxChWjCuzx0T9FnWP20K8g3ug9CwzKwBIsEtQTu3?= =?us-ascii?q?rUttX1M6ISXPixwqbSyDXMcehW0irj5YfSaBAhve+DXahtesfWy0kuGR/KgU+K?= =?us-ascii?q?qYz5IT+YzfgNsmiH4OpgUuKjkWgnqxprrTS1yccsjZfJi5sTx1vZ9it52J44Kc?= =?us-ascii?q?C3RUN0e9KpEIZcuzuEO4Z5XM8uWXxktSAnwbMco5G7ZjIFyJE/yh7abPyIbpaH?= =?us-ascii?q?7wr4VOaUPTd4nHVleK+jhxqq8Uiv1On8Vs6s3VZWtCVFiNjMtm0W1xDJ9siGSu?= =?us-ascii?q?dy/kem2TqV0QDc9vpELlwumareKp4hxqY8lpsVsUvdAi/7gFj6gaCZe0k++uWk?= =?us-ascii?q?9v7rbqvpq5OCLYN4lxnyMqE0lcy+BeQ4PBIOX2+e+emkz73s40n5QLRMjv0rna?= =?us-ascii?q?jVqYvVJcMGpq6/HwBazJ0j5g2jDzamzNsYnX4HIEhDeBKclYflIV7OIPfmDfun?= =?us-ascii?q?mVSjjC9rx+zaPr3mGpjNLH/DkLH7crZh605T0gwzwMtd55JTDLEBJej8WlTttN?= =?us-ascii?q?PGFB85KBa4w+H9CNVyzokeQ36AAreFMKPOtl+F/uAvI+uWa4AJuzb9MP8l5/jv?= =?us-ascii?q?jX8nglIdc62p3YYYaX+jA/RmJVmZYWf2jtcGC2cKsRI0TPb2h12aTT5Te3GyUr?= =?us-ascii?q?oy5zE6DIKmCJnMRpq2jbyPwii0A5pWZnpcBVCUC3focIeEVOkQZyKOOMNhlSYE?= =?us-ascii?q?Vbe5QY87yR6urBP6y6ZgLufM5yIXqZfj1N9z5+3PiB0/7iJ0ANqH02GMTmB0mW?= =?us-ascii?q?UISyUw3K9hvUx30k2D3rRgg/xECdxT4OtEXRomNZHG1ex3EMz9WgXEftiVUlmm?= =?us-ascii?q?WcmmDSs3Tt0v398Ee1x9FMm6jhDfwyqqBKcYlryKBZwz9KLRxH3xJ8Jkx3bH0q?= =?us-ascii?q?ktlV8mTdFVNW2lh65/6RbcC5TPk0qHi6agbb4c0zLV9Gef0WqOu1lVXxBoUarf?= =?us-ascii?q?R3AfZ1DWoM/h5kzYVb+uCK8nMhNFycGYNqRFdMfljVJcRPfsIN7eeX6+m3+sBR?= =?us-ascii?q?aUwbOBdITqe38H0yXbFEcEkhsT8G2DNQgmByetunneDTJ1FV71ZEPs6+Z+omuh?= =?us-ascii?q?TkAo1wGKc1Fh172t9x4Wn/OcSPQT3q8ftScisTp0H1G938/MB9qHvQphc71WYc?= =?us-ascii?q?kh71dfyWLZqwt9M4S6IK9/nF4echp4v1n12hptFopAlNImrHQwzAp9MaiYyk9O?= =?us-ascii?q?dyuE3ZDsPb3aMmny8w6ra67S3VHTy9KW+roT6PQ/rlXsphulFk0483Voy9NVyW?= =?us-ascii?q?eT5o3WDAoOVpL8Sl039xZgp7HdeSk9+5jZ1WZqMamzvD7C3sgmBO0/xhamYdhf?= =?us-ascii?q?LLuOFBXuHM0CG8iuNOsqlkCnbx0eOOBS6LA7P9m9d/adxq6kIvxgkym7jWRC+o?= =?us-ascii?q?x91ViM9yVkQO7Sw5kF2+2Y3heAVzrkkFeur934mYFeajEWBWew1S/kBItNaaJo?= =?us-ascii?q?ZoYLFX2iI8upydVin5TtQWJX9Ea/B1Ma38+kYRySb1353Q1Uy0sXumeqljGmwD?= =?us-ascii?q?xulDEltK2f3DbBw+76bhoIJnZLRHV+jVfrOYW0kdEaU1S0bwgujhup/1r1x6hc?= =?us-ascii?q?pKR5IGneWkNIfynwL254SKuwsaCOY8lV6JMnqS9XSvizYUiGSr7hpBsXyyfjH2?= =?us-ascii?q?pFxDAnbj2qoYv2nxh7iGKbMXZyo2HUedpoxRfe4tzcROJe3iEcSCl+lzbXGkC2?= =?us-ascii?q?P8O18tWMi5fDrue+Wnq7Vp1UdSnryZ2PtDGn6m1tDxyyhOuzmsD7HgghyyP70M?= =?us-ascii?q?NqVSrQphbmfobrz7i6Mf5gfkRwHF/z8dd6GoVknoQqnp0fwn8ahpGJ/XoAl2f+?= =?us-ascii?q?KtBb1b74bHoKWTEH2djV7xb52Ed7NHKG25r5VmmBwstmf9S6YX0Z2iQm781RC6?= =?us-ascii?q?eb8rpEnTBzolWmsQLde/99ni0SyfE28n4Vn/kJuBYxziWaGr0SA09YMjH3mhSW?= =?us-ascii?q?6dCxsaVXaHypcbeuyEp0hcqhA62aogFARHb5fY8vHTdq4cViNFLBy2H86oD4eN?= =?us-ascii?q?jQdN4TuAebkxHag+hSMpIxmeIAhTB7NmLloX0l1+k7gAR23Z6goYiHL3ti/Lqj?= =?us-ascii?q?DR5eKj36edkT9yrwjaZFgMmWxZuvEo96GjUMQZvoV+6nHywctfTgLQaOHyMzpm?= =?us-ascii?q?2dGbXBAQ+V8F1moG7XE5C3K3GXI2EUzdt4SxmbOExfhwUUUS40npEnCw+qw9bh?= =?us-ascii?q?f11h5jAL4V74qAVDxf50NxXlVWffvgioYC8uSJeDNBpW8h1C50DNPMyb9O1zGy?= =?us-ascii?q?VY8YO9rAyRMGOUfR9FDWcXVUyYHFDsIqOh5cHe/OSCAOqxMefOa62UqeNCT/eI?= =?us-ascii?q?2Y6v0ox+8jaWLMmOMGNuD/gh1UpHWnB4G9/UlC8TRCwSjS7NaNSbpBik8C1tss?= =?us-ascii?q?+/6OjrWB7o5YaXDbtSK89g+wiugaqYOe6QhTx5KS1E1pMCxH/IzqIQ3FgOhCFv?= =?us-ascii?q?bTatFa4MtSnXTKLfgqVXFQIUaztvNMtU6KIxxhFNNtDAhdzr0L54j+I1C1BeWF?= =?us-ascii?q?zghM6me9IFL3u6NFPdC0aBLK6GKiHTw8HrfaO8TqVdg/hPtxKuozmbHFXjMS6d?= =?us-ascii?q?lzTyTBCgK+JMjDyBPBNEoo29dgttCW75Q9L8cxG7LNh3jT42wL0znH/KM3ATMS?= =?us-ascii?q?RkeUNXsrKQ9T9Ygul4G2FZ9XpqN/eElDyW7+bGMZYbquBrDT5ql+1A73Q11aBV?= =?us-ascii?q?4DtCRPNrhCvYtsRurE2+kumT1jpnVwJDpS1KhIKEukViP77U+YReVnnf/RIC92?= =?us-ascii?q?OQBw4Np9t/Bd3lo7pQxcTXlKLvNDdC9MrZ8tETB8fONsKILmEsMR3xGDHKCgsF?= =?us-ascii?q?SCSkNWDbh0NGl/GT+WeZrp8gqpjjgJAOUKNUVEQpFvMGDURoBMACIJByXj8+i7?= =?us-ascii?q?6bi88J6mS4rBbKXsVauY7IVvGJDPrzLzaZiKVLaAETwbPkN4gTMJP021B6YFlg?= =?us-ascii?q?gIvKA1bQXcxKoiB5bQ81oEFN/2ZlQ2023ELlZA2t72EPFf6onh42jQ5+bvo3+D?= =?us-ascii?q?fq/Vg3OkLApDEsn0kphdXlnTeRfSb3LKiuR45WDzH5t0s2MpPgXwZ6dwuynVdn?= =?us-ascii?q?NDfFXb5RiaVvdXxzgg/GpZRPAeJcTbFDYBII3/GYee4o3kpGpSW92UBH5fDIBo?= =?us-ascii?q?BjlAswbJGsqHxA2xp5bNErJa3cPqxJwUZMhqiWpC+nyvgxwBMCJ0YK6G6dZSkI?= =?us-ascii?q?uEoONrY7OSWo+u1s5BeYlDRdYmgMUOAmovVw9kMyI+6A1T7v06ZfKkCtMOySN7?= =?us-ascii?q?6WtHLelc6JX1wwzVgFmFNf/bhs1scifVGUWF4zw7uMDRQJNNbCKAFPY8pU6nfT?= =?us-ascii?q?YT6Esf/RzpJtI4W9CufoQPeAtKYOnE2rAR0pEJ4K7sQdGZmsy1rVIt37I74A0x?= =?us-ascii?q?kt4x7rJFqdBvRTZB2LiCsHo924zJJv2YldISsdDnt7MSS24bbavQAqgPyeXNss?= =?us-ascii?q?ZXcaRIQEPGosWMKmgy5Zo2hADD6v3+IC1geC6z78piLNDDjzdNdsePCUZRZwB9?= =?us-ascii?q?6s4jU/77K6iVjJ/ZXCP2v6L8htusfT6eMGoJaKE/BUTaN9skjGnYlYW3yqXnXA?= =?us-ascii?q?Ed6yP5j/d5MgbdrqBXamSla/kS46T9/tPNaxKaiFmR3oRYdRsImcwDAjNc+8Gy?= =?us-ascii?q?oDFBdxp+AM/rlzaRcFY5UlfR7irx4+OLCnIAeEztWuRH6gJiFST/le0eq1eaRY?= =?us-ascii?q?zy8sb++8z3sgSIs1wvKs/k4MXp4KiAjSxfi+Z4VEVyj8BGBdcR3VpSUlj2hhKv?= =?us-ascii?q?oywuAnzRzTr1YcNSuGe/Z0Z2xaod48H0iSLm9sCms4XVOcipDD4gG01bAI4yRd?= =?us-ascii?q?h8pU0fFCsHXmsZ/ffTOsWKivqZrLtiotdsUprLNqPoziOMSGsonSnjvFTJnfqg?= =?us-ascii?q?eFSjK1F+JGmthMJyJVWONImWckOcMauYpB7k4xVtwmKbJWFacivKynZz1/ACEO?= =?us-ascii?q?yi8ZUp+P0yYZguegwbfakAmfcIg6OhwerJpCmscdUzJxYi4Gvq+sSpjZmnSLSm?= =?us-ascii?q?gOLwYf9wJM6xwcloVoZODq/JLITINQyz5Ru/90SDHEFoNv91TgUWyWnUL4R++/?= =?us-ascii?q?k+O32QJSzfTs0tYfWB5+Bkhdx/pWlkUyJ7FtLqkcpIjKvSGUdUnipmLi1POmJE?= =?us-ascii?q?VNyc3Tb1D5ApDJunb8Ui0d/H0URJVAyHLEGJQTjQV2drgkqE9LIIC8dUb0/yYk?= =?us-ascii?q?yJhxH7mkScCrwE4oomwcRye3FdpNEeJmvUnWWD1kYpCrtI7qN49UQmBO5J2Xs0?= =?us-ascii?q?1Zn1l1My6l1ZpcLNlA4j8KXDhTvzqduMW9SMhd1s9qFZ8NIsxyu3DlGKxaPpiR?= =?us-ascii?q?pmc5ur3rynDC/DA9v022xDKpG6+3V+hZ5XERGh01J2SCrUkiF+Qs8n3I/VDLrl?= =?us-ascii?q?B55OZbBr+BjEV3vDZ9Ho5BBjdP1XC5MVtzVmNKs+NEJ6TJa8ZcWeU9ZQezOxwi?= =?us-ascii?q?Ev4rx1CJ/UZxnXrifyx+qg5a9DvHUwkySyYVnq/nmScCpcG/JT8aV5VIYC0hby?= =?us-ascii?q?jfMQKUgyRXswtEZk53RZ8ZGs5F9K8f3YRK5MrOU0GsKTsKXBZ6LAI3zeJflVJf?= =?us-ascii?q?sEWfYS3dDw2oeujUvxJqY8iRt9CmLO7l/AhZl4zrquY4+LsfR3e+gw2iXcjer5?= =?us-ascii?q?Pgtt2NrkaBb6n4PPGgbXLDUTTBgwu9iqsjD5nP4yfcKhFbK4VgxXoif5fhFXbB?= =?us-ascii?q?PQ5aKKIDO0pbSad6ZM1cou9EesBkeLwG+bN2CxKDQRPvBpKgoOdaIVbUWDvRMT?= =?us-ascii?q?+N8uqhroLP9bbdU/TvZtSQx3bbRKJ6Jo966SLnG7jwzIBe5lH72uxq9kNnU1jJ?= =?us-ascii?q?Lz6OrNL9JgMR/saiclHuvpozHTPZGJ1wimbixllcd8oLRC2n6IgYyIlH53nuVO?= =?us-ascii?q?11yVXzsOlO97l+84Y3/bFpycCwJajMNfRWq0hnAgKbBg9y7JUiHHB/R3xNYu8W?= =?us-ascii?q?MPreYKIZgtr1pu/qEawY8geZ++tDadvIP0vBgNWwCimASRxYmwcMsTwaIRGG1/?= =?us-ascii?q?6CgK90Tdyqpfbi10Io/li+KgIGzLFx6oeF4KWIovTXYwHWzbgeVajgXtnzoag0?= =?us-ascii?q?u0OO+f0kk6YDem5vbA2hHugdTMkdyXr+wq0x0SIjCcXDH6nn+PJZUXI2gC7gkY?= =?us-ascii?q?hnH1oKAvMUAaaL/YNGk2c+n+zULdwWcqZHmmqVFB6kFLECyWSx5CuMPGllmAzO?= =?us-ascii?q?3A3sQWOu9l/5szV0QSzWz9fsikBVTKW4BV9OXyq1Pk91qDWPPAv0u9rwvaQ69l?= =?us-ascii?q?o2PnbltNKKk2uhI6hXEtb6JNGTLig4vlUXjIc+Rta3w4AUBcK9IMsN8HF5dvbR?= =?us-ascii?q?93mkkytfrKdcm4rf4saV9+7MHXa8jq2VtbONxCxZyncip10/7M6vNu3W7d2QX/?= =?us-ascii?q?uoz3oRTzt4uwbZWx61sbnbolAPNEyFzkjEhYsKPstD0nkgzEHm4+ojT8wv+wVC?= =?us-ascii?q?DIrAYOkCpT/rMjvu3Vmfe843VjWZ0zZPHFL1EFx4FbM52G3uvMPGi23Q+1wuRo?= =?us-ascii?q?l/bUDngwJ4D5kgI0I39FcX2jYDERQKaR2DDbGpBF7qIpEYWkUYchSIwqS6dbkr?= =?us-ascii?q?0kFpxbOv/uDTZ/RmB6URLvZdkhKOnF9DF50NsK0eW7x9dEVf9K7WugjiE5LoX+?= =?us-ascii?q?XilXcrKfK1Rd1V/t4DuHs/+Aa/QACg5o1Z47YckpCIebZOYYLQs8Bk80dn+TkP?= =?us-ascii?q?ezRVgBdlkxO2TeAcpe7k4tjBs5qk8/2uW7gpR+UW8Rg0Gmt/goDogF85vdHYy+?= =?us-ascii?q?dcS4PSiYTl8wBBOX2Kt5jA0xl6N+UOL5infLF693UIPyIePW4BPcKKa/kg5C9g?= =?us-ascii?q?KCnT50ZcDcMIf9wYOtTClBtJhU3oV7FT99bbFUWDC4hpbcAo8nD7yDYr/psgSu?= =?us-ascii?q?zg8iO5JYjD71FROPNOlCpsm8jYpOcL3frSCDMa4X2Yaxhp3CyCy4OCC+vr/emW?= =?us-ascii?q?ztHbSU8GFDYsU4hBPDqC5RCnRu2tmZXmTAyU7NPzgJU5dE6XXXy+gqAFsqdKEe?= =?us-ascii?q?5dhST2xTxeGZ7vh/OVqdWg8m1XuUNbEIxr9x3KBL1fPolnORT/jsSkWkp8CTHj?= =?us-ascii?q?d8zPahUuv+6WxuMN4+pgLUv+eZEULQ4Ey77g7npVVARuQqbsvlmFReIReMdmSP?= =?us-ascii?q?Tco3BQ7oJgLbMPPFeDq5HxqzdIqUo5AAk3Z78soD1acVPOnA5OW6ruvr4PlBcc?= =?us-ascii?q?W8ZjuUBQAWKwJH4+5z3fWKRakKaRE+cV/iyOQKIBVUtoMyV+Qw662Zh1dLupmO?= =?us-ascii?q?pIsmVYkS9np/gqyTNmTgOmuSLwv6INxS4g+LaguTUDvnxFTuOenz3UBlVDyPQK?= =?us-ascii?q?kLoTCnfj6Vy6e3kDb4ry7aJ5JcTh64ku+XA/bggifyEcW+SvFT3whbuSAoOTqN?= =?us-ascii?q?JcmAKNuMLWYL+yMygdLLI9xAnnR3hgzwfenRFo8HARTjWn9t8kK523Odw5ySqw?= =?us-ascii?q?BWjbaFEM77tLsMTvu14LQu82ZEhvwWp51MiIWDENSNbJG2krkggucX9Ef45b6R?= =?us-ascii?q?8GC6kohS6FvqZC/gETbjbbDICl+o3LkMfT3nk9S9ZqyX7Mqq2DmJwqzGVvm8lo?= =?us-ascii?q?4S6WpHQSa+vYXtduAnjz1oZf0ev+Z/GssuAbVoRr07GhUP4eMsm552S6wpJqWl?= =?us-ascii?q?Wqxr4GBVq2LPcDxqvHUyeiUWCYReWLc22XkjYlM079+RqoIUMzaMtQqU8yLPfC?= =?us-ascii?q?jIZGlwL9SbN0WjmQpVjDwWwmMOMadAE2uIC8dgwIVuERZO+cJe4wz/04ElcMaW?= =?us-ascii?q?HGHTduAe+srVGthJR7O2ln4Ujieuvi7AbmMMeJFxkfFY7aqYJx+eCkRm2fJHBs?= =?us-ascii?q?1hpyPFN79+3HDVQ+qvdcc4qNndjXn9l7yekFd/N3Pi0ntN8TnYZj6YeP3cePdh?= =?us-ascii?q?HRyY3yKs/JrfiCBP3f1F8qemBcUroWew/14J86PtEhUb3JAbRZpQgcBbQ9QJE5?= =?us-ascii?q?OWf+6qV0LAJrcgHPf7m1g8jqpueOZpRKvX/W6kw/ID3bux0Zxfy+VRZ7YIyyh3?= =?us-ascii?q?XuPJAwQSpMrtN1Cht8HYtAB90PohGiA56VhKG7kcG+91l9u+8Qvqr6EurK28ih?= =?us-ascii?q?34VtQ5ha4lSGPDHVBKZ1mUllluCyje3b0pntCMPtZc8EVPJlTWHbcLPGGJuwKi?= =?us-ascii?q?6WMMLmZ0FG66Kc0K5+UhiJYCD5XqyGtDCrNfl95UU7y5d4fPbIzDE27rHUwt3y?= =?us-ascii?q?Z2ZBqiekt36JO4NV7EbWCuzGQxJUVf2F/X5+HaIJaYv09eEOMcEtwdSb7Adz8D?= =?us-ascii?q?RC39WfI6e/tk/DwFl2dZHFI0vz3SY2R40KLw+iMUsjm2PZrW7dAXtEJMi+NcZt?= =?us-ascii?q?mMqVDgDq50RpnGEifHJOGmrpRdeXPmgWwNy+ZAyM9A1VC9YDnui3eVM3t6GoTu?= =?us-ascii?q?loIJpFk/2wtLobidZpNz3PRM9CMiHSNrB2PT1RAf7UqVg1ZB4Er7g1WoAoZZiB?= =?us-ascii?q?IEMHLF2MySXswgveyUf0bcCj1L6VICYK9XVK16nK3iNLqwm9uPaZmdHjUKvDYJ?= =?us-ascii?q?HtQvHdLDApViqESjQ2EEap/0qkuvUfsfWEIWYfuE0UYjmIBA8dvK9vscPQDmjV?= =?us-ascii?q?meF5e50Knv+aUTjqSCJkjKoyGjpLtUeUTvoMDwbZdGXhgGtCtwymPfJM43blYK?= =?us-ascii?q?eDxqpURuwaGI1MfeOFQ9HAY/BROy8olikFOOa7Z9DcrbM50lXSTWsDEqnI70aT?= =?us-ascii?q?TEiMTfyZ2T3rXJ8Zv48uuion4tjQhDN4E7zUP7aDoD6j6pW4jCidueLCV2QgYF?= =?us-ascii?q?c4gPwcD2mbwRlBKWYEC9cPtEHrXKGAe15G1Gg1huJ2xx8MZANzX2Vs0n1Rmva9?= =?us-ascii?q?HtZUSVsKg2yzTv0Ga0p3Ay8u8kOQ5A39f8AA6ojvQDpF+78NT5cNBOU544nQfq?= =?us-ascii?q?0LybAm2yw1jjY9tnC/BlZQlUqu+rDMEbg0kr9d7mAi46teQlCEQzSZdHPOjIWh?= =?us-ascii?q?FZQclm9VvXn42p+M7ahWP7xAqtQ8Wg8H?= X-IPAS-Result: =?us-ascii?q?A2HSBADo55BY/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgn0?= =?us-ascii?q?rgVkRjlGoTiaIOlcBAQEBAQEBAQIBAl8ogjMbgiMCJBMUIA4DCQIXKQgIAwEtF?= =?us-ascii?q?R8LBRgEiUANrgc6JgKLPY9YEQGGAQWBKwGHV4cviyMCkX4Cik2GJwKSf1h2Hgc?= =?us-ascii?q?CESNKXoMbgl5XhX2CLQEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 31 Jan 2017 19:44:20 +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 v0VJiJVj020066; Tue, 31 Jan 2017 14:44:19 -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 v0VJh82a015612 for ; Tue, 31 Jan 2017 14:43:08 -0500 Received: from moss-lions.infosec.tycho.ncsc.mil (moss-lions [192.168.25.4]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id v0VJh834019663 for ; Tue, 31 Jan 2017 14:43:08 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH] checkpolicy: Improve check for identifier flavor mismatch Date: Tue, 31 Jan 2017 14:43:24 -0500 Message-Id: <1485891804-18892-1-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 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: MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP An identifier flavor mismatch occurs when an identifier is declared or required as a regular role or type in one place but as an attribute in another place. Currently there is only a check for an identifier flavor mismatch when a type has already been declared and there is a require of the same type in the same scope. There are no checks if the require comes first and there are no checks for roles. Check for an identifier flavor mismatch for both roles and types whenever a declaration or requirement tries to add an identifier that is already in the symtab. Signed-off-by: James Carter --- checkpolicy/module_compiler.c | 46 +++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/checkpolicy/module_compiler.c b/checkpolicy/module_compiler.c index e128a1b..95e29be 100644 --- a/checkpolicy/module_compiler.c +++ b/checkpolicy/module_compiler.c @@ -291,6 +291,15 @@ int create_role(uint32_t scope, unsigned char isattr, role_datum_t **role, char return -1; } } else if (ret == 1) { + *role = hashtab_search(policydbp->symtab[SYM_ROLES].table, id); + if (*role && (isattr != (*role)->flavor)) { + yyerror2("Identifier %s used as both an attribute and a role", + id); + free(id); + role_datum_destroy(datum); + free(datum); + return -1; + } *role = datum; *key = id; } else { @@ -383,6 +392,7 @@ int create_type(uint32_t scope, unsigned char isattr, type_datum_t **type) uint32_t value = 0; *type = NULL; + isattr = isattr ? TYPE_ATTRIB : TYPE_TYPE; id = (char *)queue_remove(id_queue); if (!id) { @@ -403,7 +413,7 @@ int create_type(uint32_t scope, unsigned char isattr, type_datum_t **type) } type_datum_init(datum); datum->primary = 1; - datum->flavor = isattr ? TYPE_ATTRIB : TYPE_TYPE; + datum->flavor = isattr; if (scope == SCOPE_DECL) { ret = declare_symbol(SYM_TYPES, id, datum, &value, &value); @@ -418,6 +428,12 @@ int create_type(uint32_t scope, unsigned char isattr, type_datum_t **type) type_datum_destroy(datum); free(datum); *type = hashtab_search(policydbp->symtab[SYM_TYPES].table, id); + if (*type && (isattr != (*type)->flavor)) { + yyerror2("Identifier %s used as both an attribute and a type", + id); + free(id); + return -1; + } free(id); } else { print_error_msg(ret, SYM_TYPES); @@ -711,35 +727,9 @@ int require_symbol(uint32_t symbol_type, } else if (ret == -2) { /* ignore require statements if that symbol was * previously declared and is in current scope */ - int prev_declaration_ok = 0; if (is_id_in_scope(symbol_type, key)) { - if (symbol_type == SYM_TYPES) { - /* check that previous symbol has same - * type/attribute-ness */ - unsigned char new_isattr = - ((type_datum_t *) datum)->flavor; - type_datum_t *old_datum = - (type_datum_t *) hashtab_search(policydbp-> - symtab - [SYM_TYPES]. - table, key); - assert(old_datum != NULL); - unsigned char old_isattr = old_datum->flavor; - prev_declaration_ok = - (old_isattr == new_isattr ? 1 : 0); - } else { - prev_declaration_ok = 1; - } - } - if (prev_declaration_ok) { - /* ignore this require statement because it - * was already declared within my scope */ - stack_top->require_given = 1; - return 1; + ret = 1; } else { - /* previous declaration was not in scope or - * had a mismatched type/attribute, so - * generate an error */ return -2; } } else if (ret < 0) {