From patchwork Tue Aug 29 16:32:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Cashman X-Patchwork-Id: 9927835 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 2EC7260383 for ; Tue, 29 Aug 2017 17:48:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F864289E3 for ; Tue, 29 Aug 2017 17:48:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 14D93289F0; Tue, 29 Aug 2017 17:48:20 +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.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from ucol19pa12.eemsg.mail.mil (ucol19pa12.eemsg.mail.mil [214.24.24.85]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0814B288B4 for ; Tue, 29 Aug 2017 17:48:18 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.41,445,1498521600"; d="scan'208";a="379502226" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.2]) by ucol19pa12.eemsg.mail.mil with ESMTP/TLS/AES256-SHA; 29 Aug 2017 17:48:04 +0000 X-IronPort-AV: E=Sophos;i="5.41,445,1498521600"; d="scan'208";a="1577594" IronPort-PHdr: =?us-ascii?q?9a23=3AWFO6rRS+3MBxsieQ+FzY6khp/dpsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa6/bBeCt8tkgFKBZ4jH8fUM07OQ6PGxHzVcqs/Y7zgrS99lb1c9k8?= =?us-ascii?q?IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBo?= =?us-ascii?q?KevrB4Xck9q41/yo+53Ufg5EmCexbal8IRiyqQjdrNQajIRtJqos1xfEoGZDdv?= =?us-ascii?q?hLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfM?= =?us-ascii?q?TQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklD?= =?us-ascii?q?sLOjgk+27ZkMxwiL9QrgynqRJx3oXYZJiZOOdicq/Ye94RWGhPUdtLVyFZAo2y?= =?us-ascii?q?cYUBAekGM+hFt4nwpUYCoBWgCgm3H+7j1iNEi2Xq0aAgz+gtDQfL1xEgEdIUt3?= =?us-ascii?q?TUqc34OqkIXuCzzanH0zHDZO5I1Djn84jIchUhruuKXbltdsfe1FUgGBnejlWQ?= =?us-ascii?q?rIzqJTWV2/8XvGid8uVgT+Wvi286pA1rvjevwcIsh5DPi4kIyV7E7T10zJs6KN?= =?us-ascii?q?C3UkJ2YcOoHIFOuyyVKYd6WN4uT3lqtSs10LEKpIC3cSgQxJkkyRPTcfyKfoeO?= =?us-ascii?q?7xn+TuieOy14i2hgeL+nghay9lWvxfPkW8mv1VZKsjJFkt7RtnARzxDT6taISv?= =?us-ascii?q?96/kq5xTaAzRrT6uBZIUAvj6bbN54gzaIwlpoUq0jDGDP5mF7qg6OMc0Uk++yo?= =?us-ascii?q?5/zmYrXguJCcK5d5hhzxP6khgMCyAfk0PhIQU2WU5+iwzqDv8VX8QLpQj/02lq?= =?us-ascii?q?fZsIrdJcQevqO5GBFa0oIi6xa5Ejen380UkmIALFJYfhKIk5bmO0rVLfDkDfaw?= =?us-ascii?q?n1SskDBxy/DAJb3uGI/BLnfEkLf/Zbp98VJTyBIvzdBD4JJZErMBIPX1WkDrqN?= =?us-ascii?q?zYDgU2MwqvzublD9V90IYeVniUAq+FLqzSq0SI6vgoI+mWa48foCz9JOQ95/7y?= =?us-ascii?q?kX85nkcQfaur3ZQNdH+4He9mI0KfYXrtnNcMCmkKvg4jTO3lk1KCTDhTZ2qvX6?= =?us-ascii?q?4m4TE7Eo2mB5/ZRo+xmLyBwDu7HppOa2BeFF+DCmnnd4OFW/cQbyKfOc5hnSIa?= =?us-ascii?q?Wre/UYMh0guutADiwbp9MuXU4jEYtY7k1NVt+uLTkhcy9TppAMuD12GNTnp5kX?= =?us-ascii?q?kWSD8s26Bzu0t9yk2M0aJgmfxXCcRT5+9VUgc9LZPT0vB6BMroWg/aYtiJT1Om?= =?us-ascii?q?Tcm8DjEqUtI92dkObFhhG9+6lBDMwzKqA6MJl7yMHJE086Tc32TvKMZ51XnG0b?= =?us-ascii?q?cuj0U8QspPLmCmgbZ/+BbVB47MiUqZlqKqer8b3C/C7muDynCOvE5AWg5qTarF?= =?us-ascii?q?RWwfZlfRrdnh5kLDTriuCbI8PwtEzc6OM6pKatvzgVVAXvjjItfeY2Ovm2iuHx?= =?us-ascii?q?qIwK2DbJbycWUHwCrdEFQEkxwU/XueKwc+Hj2uo3jfDDx1Dl/ve1nj8fN/qHOg?= =?us-ascii?q?Vk80yxuFYFF/2Lav/R4Vn/OcQesJ3r0YoCchtyl0HFGl0tPYCtqAow9hc7tGYd?= =?us-ascii?q?4m7ldIy3/WtwtnPpO6N6BinFkecwZpsEzyyxV7EIJAkdIlrHky1gp9NbqY0E9d?= =?us-ascii?q?dzOfxZ3wNKfXJXP0/B+zaq7WwUrT0NOO+qcO8fg4sFvivBqzGkol6XVn3MFf02?= =?us-ascii?q?GA6ZXSEAoSTZXxX1409xdgpLHaZTQ96pjX1XJ2Mqm0tSLC18guBOs/xRaqZ81f?= =?us-ascii?q?P7+cFA/uD80aANCjJ/Y3lFizbxILIvpS+bUuMMy6cvuKwqmrPPxvnDi+l2RI/J?= =?us-ascii?q?h90l6Q9yp7UuPHw4wKw/WG0QucSzf9jFChv9vsmY9YZDEdAGy/yTTlBIFLfKFy?= =?us-ascii?q?e5gECXu2Kc2t2tp+n4LtW2Jf9FO7HVMJxdKmdAGdb1z40gxcz0IXrmK7mSGg1T?= =?us-ascii?q?x7jykprraD3CzJ2+nibxQHOnRMRGl5kVfhOpO0j9YdXEmmaggmjh2l6Vz8x6dF?= =?us-ascii?q?uKR1N3PTTltQfyjqM2FiVbO9t7SYbM5L9JMnrz9XUP+nbFCEVLH9uQAV0z7mH2?= =?us-ascii?q?dEwzA7bT6qsI3jnxNmkGKdMGpzrH3BdMFs2BjQ+d3cSuRV3jcdWCZ4jjzXCUSm?= =?us-ascii?q?MNmy4dWYjZHDvf6iV2i5TJ1cbTHrzZ+ctCu8/WBqHxy/kOyvmt3gCwg2yzP019?= =?us-ascii?q?ltVSXOoxbxeY3r16W8Me19ZEloA0Xw681gGoFxioEwno0f2WAGhpWJ+noKiWPz?= =?us-ascii?q?MdRA2aLidXYNXiAEw9rU4AjjxU1iIWmEx5nhVnWcxMthZsW1YngM1iI78c9KFL?= =?us-ascii?q?+e7KZYkittvlq4sQXRbOBnnjcazfsu7GAVg/sVtwoqwCSQGasSHVREMiz3jRiI?= =?us-ascii?q?6Mq+rKpPbma1bbewzFZ+ncymDLyaoQFTRnD5eow5EC9z8Mp/NknM0Hvt5YH4Yt?= =?us-ascii?q?XQasgTthKMmRfak+dVMI4xluYNhSd/IWLyp2Aly+olghx2x566upSHJHt3/K+i?= =?us-ascii?q?Hx5YLSP6Z9kI+j33lqZemduW35qzEZp/FDULW4HoTf22Hz4Is/ToKRqOGiUmqn?= =?us-ascii?q?iHAbrfAROf6EB+onLRFZCkKmqaJGcfzdp/RBmRPkpfjx4IXD8ihJ42ChiqxND9?= =?us-ascii?q?cEd+/j0R/kT3qgZIyu9zKxb/U3vfpQexZjc6UpefKgBa7gZY50faKcae9P58Hz?= =?us-ascii?q?lE/p29qwyAMm+bZgRMDW4XQUGEAlfjPreg5dbe7+iYGuq+L/zLYbqQs+BeUemH?= =?us-ascii?q?xY632It84zmMLtmPPmVlD/Aj1EpMR3Z5G9jemzUKUCEXmTzCYNOcpBem4CJ3tt?= =?us-ascii?q?q/8PPpWA3x+YSPF6FeMdJ1+xC5ma2DLfKfhD5lKTZE0ZMB3WXIxKIR3VIIjiFh?= =?us-ascii?q?bT2tEbMAtCPWVq3fhqpXAwQcayNpO8tC97g80RVVOc7HltP10aZ1jvAvC1hbSF?= =?us-ascii?q?PhgdumZcoWI2G6L1PKH1yEO6iDJTHRxMH3e6y8Q6VKjOpIrx2wpSqbE0j7MzSF?= =?us-ascii?q?jTnmTQivMflXgSGVPRxeopq9cgpjCWjiStLpcBu7P8N2jTIsxb04nHTKNXQTMT?= =?us-ascii?q?JkaUNCsqWQ7T9EgvV4A2FO9WFqIe6AmyaY9OnYNo0WveFwAitqi+1W+m86xKVR?= =?us-ascii?q?7CFFQvx1hSTTo8VyrFCmiOmP1yFnXABAqzlRmIKLpkJiOaPD+plHQ3bE8woH7X?= =?us-ascii?q?+MBBQSu9tlFtrvtrhWytjOkKLzLClN88nP8MQGGcfUMsWHPGAmMRrzFz7eFBEF?= =?us-ascii?q?QiKzNWHDm0xdl+mf+WaUrpg1rZjsnoEDRaJFW1MuF/MVEEJlEMYFIJdtUTMuia?= =?us-ascii?q?Sbg9IQ5XqisBnRQ91XsYrIVv2IH/XgNi2Ujb5cZxQWx7P4KJ4cNoz/20N5bVl7?= =?us-ascii?q?k57GG03KXdBCuidhdBM7oF1R8HhiSW0+w17lagSo4HMJD/60mR83hRV4Yes27j?= =?us-ascii?q?fs5Ek4JlnRqSQsl0kxnMnqjiqKcD7tNquwW59ZCzbsvUgrLpz7Wxp1bRG1nUF8?= =?us-ascii?q?MjfLWahej797eGBojw/coodPFuRaTa1fYx8QxOubZ/M23lRAsi+n31NI5fPZCZ?= =?us-ascii?q?t+kwsnaYSsoGxb2w19dtE1P7DfJKpSw1dLh6KOpDKn1uc/wA8GPUYC7mOTdDQO?= =?us-ascii?q?uEMWKrksPzCo8fB06QyehztDf3ABWOcwrfJ090MyJv+Awjn63L5ZMECxMOKeL7?= =?us-ascii?q?iHtGfciM6IWFIw1l8IlkVf+7h5z9sjeVKOV08z1LuRCwgJNc3aJAFRaMpS7mbc?= =?us-ascii?q?fSCPsOXK2p91MIO9Fv3yQe+JrqYUjVquHBw1EIQU8sQBAp6s3VnDLcj5KL4FyB?= =?us-ascii?q?Mt5BnkJVieEPtJfxeLnysdrMGk0J97x49dKS8BAW9lKyW4+q7XphM2gPqERNo5?= =?us-ascii?q?f2sVXo4DNnIwRM22hjVUv2peAzmt0+IYyQ+C7znmqiTWEjb8c8JpZO2IahN0FN?= =?us-ascii?q?G25TI//rCqiV7W95XeIH36NdRiu9LU9OwappaGBOlPQrVntUfThZVYTWSwU2HT?= =?us-ascii?q?Cd61O4Twa440YNz7EHa1SFq/iy4uQsfwO9asIK6IgR3oRYlKsYmb2iwjOtGnFj?= =?us-ascii?q?0EHRd/uf0D7rpmZQIfe5o7fQLotwMmOqOlJAeY08mhTHi1JjtTT/hfy+K6Z7pN?= =?us-ascii?q?wCc3deC6yWEvTpcjw+m57E4BXpcKgQ/Cxfy7fYlRTTDzGmBBewXIvSc2jHZuNu?= =?us-ascii?q?Apz+gl3RzIr0cTMyqQdONzcmxFv8swBVSIIXV5EmA4XUOTjZLf4g6w2LAf5zFd?= =?us-ascii?q?n9BV0eJZsHj+uZvfYCm0VqKytJvbqTYtY989rqJtNozjJ9eJu4nFnjzDVpXQtB?= =?us-ascii?q?OKUDKiHfpAhtdQOD5YQOVPmWw9JcMGu5BO5lYqW8giILxPDK0sprG0Zjp+ES4d?= =?us-ascii?q?0zMWV4Oa0DwFmOe81KPQlg2Mf5Q6LBwErJJCj8MHUyFseCMeo7SsWp7Kl2+eUG?= =?us-ascii?q?cLPhkc7QBN5AIGmY9weuHl4IXITJ9QxT5Zueh0Ui7RGplu6VT7VnmcgULkR/W5?= =?us-ascii?q?j+ypwQVSweri09UBRBF/CUldx+NXlkQyK7F6MKgQsZDUvTCWb0/6u3jtyOS+Ll?= =?us-ascii?q?lL1cLUb0H4DJbCtWfkSi0c/nkUSpVVyHDREpQSlwR5Zb0upFVLJ4CmYVjx6CA+?= =?us-ascii?q?x4RuBLm4TsGrx1AqrXocQCeqCdVBAfl8sF3LQD1lf4yrqJL9NppIWG9Q5Zudp0?= =?us-ascii?q?1akEh2Mi65yJtcK91W7TIWWjhAvymdtsOoSMJfwc92E4MMItBntnfhH6NEPYOc?= =?us-ascii?q?o2Eqtrzq0XDV4TY8v0mmxD+rAa+3U/pZ/3ECGgUuP2meqlMgD/E2/WfW71/AqU?= =?us-ascii?q?178PlDBriXk0pxpChyHopUCjZOz3ClIEx5TGNavOVCNKTVb8tcTuEwZR+oJRMz?= =?us-ascii?q?DuMp0FKS/U5qh3f5fzJ9uRZA9yDbQQY0STEfgq3xlj0GtsGnJTgaRopTYjUvcy?= =?us-ascii?q?jJNwCWlT1ZsRtEd05qXJUZDcpf9LEAwYtY5MzCRliwKSsdRhxtKho40eZDlU5E?= =?us-ascii?q?qEiYYz7SAheodfnVrh16ZsORrMm3LPvn4gtIloTnv/0m+KkZQX2phxGtS8jEr4?= =?us-ascii?q?Dgrt2KqleOdKDgPu2ken/BUCLDgg2shbo/FJnK+DXTMBBHJJZkz3okfYLhBnTP?= =?us-ascii?q?PRhcIKIbPUVbX7hgadpauuBae9NkeKER9K9xHBKIWA3gF5G0oflbKlbTWS7eID?= =?us-ascii?q?+f8uy+poLT6aLSSfT6asyL3XbHTLp9Po1m5jnjB7fqzYhe91Lz2vh38kN6TUbJ?= =?us-ascii?q?MzydrNv7PAwG/8+ieVX+vp0yATzZGo9wn2T3ykFGacUXXzWg8I4Ex5NB9HbwVe?= =?us-ascii?q?V431DxsOJI7blk7pI347RzxseqPqrSLOlasUt7AhiVGgpq948iAG5kR2xLZe8R?= =?us-ascii?q?MvjRd7wDjc/ys+D3C7AX6BqN9uxbc9THIU/BmtO4Cj6BVxNJhxsBpiQcLguH0P?= =?us-ascii?q?6Jgal0Rti5peLhwEIi/0C+LgIazLBq/YqE9beIpO7TbxvV07cEX7PnSd7tobs3?= =?us-ascii?q?ukOd//skmKQJemxvbA2tCPIdWdIFxmf80aAqyjohE8XHH7/7+f5DUXc5kijhm5?= =?us-ascii?q?B7EVUWAOkbHaGX/YREg2c3h/DZNsAMcq9cgGqPEgSkErAaw36x9ySXOHVlgg3J?= =?us-ascii?q?0xzoRGOz61n2rTN3QSTS1Nrjl0tVWaOxBUhMQyqoN0h4sCmMPArzrtb3v7o67F?= =?us-ascii?q?0uOGz+qN2NjHehOK9QH8DnINycOiw0qVIMgZ0/WNOgxIcbGcCnL9cJ6nF+afne?= =?us-ascii?q?5H23nC9duatHgJDe4s6N8PXNAXagl7Gaq6mKxD1AyHg4vFQ/58ulNv7Q59yFXe?= =?us-ascii?q?6o12cXTydwoQfBWQC6qqDDpVAOJUOLyFvLmJANPtxB3Hk511vp6/I/T98o7wVR?= =?us-ascii?q?CJrAaO0eqjzpPzv021mfacotViaCyztXAk71EV5gFacn2WLwp8zImm3S+10pWo?= =?us-ascii?q?lwb1bohQFzD4gjNU0t70UYzTQZHggQcxCbC6uoCl7/IYsDT0gDZgyN3KKmdacv?= =?us-ascii?q?wU1z3rSv6ffLbeNmG6oCKvZdjwCJnFhBGZIaqLYeT6x4e19c8q7XuwfjBpP/X/?= =?us-ascii?q?f8iXo/Kf21Q85d8cADtHsu+AW/SAS66ZdF8bkbjIqEdqleYZjDpMp89Vto5SYT?= =?us-ascii?q?dixRhxhylw+5UfoCq+Dn+NfbtoSn5/2zW6YsSOUX9gQ0CH5lj5TqmlAjvMvb1+?= =?us-ascii?q?FCRY3JkY7/6hxCI2aWuIbG1BlxMeUOJJixfLl+63UHJzMTJ3YPPdqKdfY84zVi?= =?us-ascii?q?MCjI51BYBMMDe88YNtLXmQ9Ikk3pRK1T9s3DF1+XFYhzcdwo723wyDwy6pszTO?= =?us-ascii?q?Lg6D6wJZDC4FBAJPdDgzt2lNPCvucZ2/zSBzYL4XOBcRh63juCy4WRC/b35eiM?= =?us-ascii?q?ztDUWE8BHi4ySYhdPyCO+Q2gRuqyj5XpSRiZ6sr8jZMxbk6QQWaxnKsduKZWDe?= =?us-ascii?q?FAkjn73iRZFo3tiPKar8Gs6HBOulNaH4h96xzFGKNCPpR0Ihn4mcyrSVJ6BiTh?= =?us-ascii?q?Ys3UcQAuuOWOzOcW/+p+L1f+ZZMcIh8cybL67npVTg10RLHqvlaZWf8Ra8ZnSf?= =?us-ascii?q?PFqHBV8oFgK64UMViDpZzqsC1HqFQrDw8ocrMwqCJVdlXWlg1PR6n0oKIAihcb?= =?us-ascii?q?UdNhuE9MB3i/OGQl6jrDSKRakaiRCPsO8jmJSawOSUpoODtkQxypwJVuZ6epnf?= =?us-ascii?q?dfv2NEgCx9rvYq0zh9SRqyoyLsobwC2S469LG+qjoBpWRPTv+CnCfQFVVD0PMK?= =?us-ascii?q?gL8TC3bm7ly9bmcMbI/24LR8PsTg8o8h43Ujbhk5eS0JQ/igATnqj6yUGoyPrM?= =?us-ascii?q?5chBmVtcXMbb+yLTASNrM5yRLiW3hyzBPTnBNp8GsXWDWv8sUoJIKnOcYq3iCo?= =?us-ascii?q?A3TUdE4Q4qNVt8v8rUILTOozaV563GVj09SIRi4TS8zLAWo1iBYraXlcepJZ9R?= =?us-ascii?q?AaD7UogiqPvqRe+wEUYTTUEoei+oTLn8fHw3o9TdBsxm3IoK2JnJUq32N5m9ls?= =?us-ascii?q?9C6BpGwSd/DEU89rGnX8zZlQyeriZ/i2qeAHTIxmyKi9UP8cLMas5HG62JJwWk?= =?us-ascii?q?+q3r4eBUa2MPcfxrfHVCeoUWOYVvqPc2iNhzY2LFX/5BipLl0ybcdFsVU9Mu/c?= =?us-ascii?q?iZJGkA3hS7x0TD2KpVDH1GwjLf8adwUutYapYwwKVu8RaPSCKuU1xf0+CUcMb2?= =?us-ascii?q?XXEidsDO+2q1GtlpBhO3p8+UX6ffjt8gf+PduVHhkLD5XXroZ1+fOgXWKBJX5g?= =?us-ascii?q?wwFuPElu6ejQCU49tulCfJaNhdLQnch00fYZd/dxNi0wotoTmoNl6YmJ38aGaB?= =?us-ascii?q?XRzpfpJdHJufiVGPzfwF4semFdSLYZZhn154oiNN4jR7LTBadZvQgbBaUiW5wu?= =?us-ascii?q?KWPx9KByLANufQ/dY7u6gtXqpu2VfJtbuWfW4UgrISffpRID0Pq0QhJ/b5+xmn?= =?us-ascii?q?XyL4o8RjVbr91iEhFmBpdAG9scrwq7BJ6ZgKS7hMWt9EN6uu8Kt63wB+vU1NS4?= =?us-ascii?q?2YV+QZxa5U2NPDbMC6hnmENljv69gv3YyJn+Fdviec8YVOh8WmPFaKXJHoa4Kj?= =?us-ascii?q?2VIc/8ZkhG86Kc0LJ+TxWRayD5X7acuC2iKvpk/V0xypZkc+rL0Dwt87bb1cPw?= =?us-ascii?q?Z2FeoSejt2SJNJpE7FHRA+zRRRdURuSE8Gp/Gq0Xd4T0/v8UMdM+2Nic/xVz7D?= =?us-ascii?q?Na3cueLaihq1PD10N4eJ/AMkvmxTw5WYgLIRS4N0sgm2nZpWrBAScUEs/xMsRp?= =?us-ascii?q?gdCIHjTx9kJxnicrfWcHFW32FvmLPm1O98u4ZQCOvClCFNYGluj/LUIzv7ayTO?= =?us-ascii?q?BuEpxDlf+ttblBmtFsfXKcDPNGNj3deecldgFaCf/C8R1xOhM=3D?= X-IPAS-Result: =?us-ascii?q?A2AQAgCOp6VZ/wHyM5BeGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgwQoA2QXfo8IjyeCaJc7KAOJOlcBAQEBAQEBAQIBaiiCMySCS?= =?us-ascii?q?QIkGQEBNwECAwkCFwgpCAMBMAEFATUFiFqBUgOjAUCLIIJYOiICgmQBAQWIegg?= =?us-ascii?q?SgxiBMlCBRAqBY4Jzix6SN442h1mMZoJ5iFUohwKUeTSBFVeBDTIhCBwVhRFBD?= =?us-ascii?q?xyCB1aLVAEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 29 Aug 2017 17:47:32 +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 v7THjEP2032234; Tue, 29 Aug 2017 13:45:48 -0400 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 v7THj5eA019213 for ; Tue, 29 Aug 2017 13:45:06 -0400 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 v7THj4Ql032224 for ; Tue, 29 Aug 2017 13:45:05 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1BiBAArbaVZ/y0WGNZeHAEBBAEBCgEBg?= =?us-ascii?q?y8oA2QXfp4vgmiXQhwIhSOEElcBAgEBAQEBAmuFbhkBATcBL2UBBQE1iF+BUgO?= =?us-ascii?q?kIECLIIJYOoMIAQEFiFABAQggCBKDGIEyUIFECoFjgnOLHpI3jjaHWYxmgnmIV?= =?us-ascii?q?YcqlHk0gRVXgQ0yIQgcFYVSDxwZgW5WiyEBAQE?= X-IPAS-Result: =?us-ascii?q?A1BiBAArbaVZ/y0WGNZeHAEBBAEBCgEBgy8oA2QXfp4vgmi?= =?us-ascii?q?XQhwIhSOEElcBAgEBAQEBAmuFbhkBATcBL2UBBQE1iF+BUgOkIECLIIJYOoMIA?= =?us-ascii?q?QEFiFABAQggCBKDGIEyUIFECoFjgnOLHpI3jjaHWYxmgnmIVYcqlHk0gRVXgQ0?= =?us-ascii?q?yIQgcFYVSDxwZgW5WiyEBAQE?= X-IronPort-AV: E=Sophos;i="5.41,444,1498536000"; d="scan'208";a="35533" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.35]) by goalie.tycho.ncsc.mil with ESMTP; 29 Aug 2017 13:45:02 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AmikpNBU6Jv7+FhHRmoFRgP8lv9DV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYYx2Ht8tkgFKBZ4jH8fUM07OQ6PGwHzRYqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdxIRmssQndqtQdjJd/JKo21hbHuGZDdf?= =?us-ascii?q?5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2Ao/8LrrgXM?= =?us-ascii?q?TRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VDK/5KpwVhTmlD?= =?us-ascii?q?kIOCI48GHPi8x/kqRboA66pxdix4LYeZyZOOZicq/Ye94RWGhPUdtLVyFZH42y?= =?us-ascii?q?b5UBAeQCM+hftITxu0cCoAGiCQS2GO/j1jlFjWL2060g1OQhFBnL0gI6ENIIsX?= =?us-ascii?q?TbstH1P7oMXO+v16nIzTDDYOlQ2Tzg74XHbwwuruuXXbJwdMre008vGhjfgVWW?= =?us-ascii?q?tIPlJTSV1uUQvGSB8+VgUuevhnchpgpsrDavwcIshZPIhoIT0l3E8D92wJ4vKd?= =?us-ascii?q?25Tk52Z8OvHphItyyCKYd6X8wvT3t2tCs10LEKp4C3cDIFxZkn3xLSafOKf5KV?= =?us-ascii?q?7h79VOudOzR1iXx/dL+/iBu/91WrxPfmWcmuyllKqzJIktnSuXAJ0Bze8saIRO?= =?us-ascii?q?Zh80m/1zuCyRrd5/1YLU02j6bUNYAuwrsrlpocq0jDGzX5mETyjKOMc0Uk++yo?= =?us-ascii?q?5/zmYrXguJCcK5d5hh/jPqkhgMCzH+s1PhIQU2SF4+ix273u8VX8QLpQj/02lq?= =?us-ascii?q?fZsIrdJcQevqO2HhNa3Zw46xa/CjepytIYkGIdI1JDZR2HlY/pO1DTL/ziEfi/?= =?us-ascii?q?hFGsnC9xx//aJr3hHonNLn/bnbf6Y7l9709cyAwuzdFQ/J9UFrEAL+7zWk/2rt?= =?us-ascii?q?DYCAQ5PBauz+boD9V9yNBWZWXaGaKdMaXPoXeU9+kvJK+Kf4ZTtzHjeNY/4Pu7?= =?us-ascii?q?oXY/mFIZNYKgxpsSYXbwSvhtKl6ZZHPqqt4HHX0NvwZ4R+vv3g7RGQVPbmq/Cv?= =?us-ascii?q?pvrgowD5irWMKaHtig?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0B0AwBWp6VZ/y0WGNZeHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwQoA2QXfp4vgmiXQhwIhSOEF1cBAQEBAQEBAQIBaiiCMyQBgm4?= =?us-ascii?q?ZAQE3AS9lAQUBNYhfgVIDowFAiyCCWDqDCAEBBYhQAQEIIAgSgxiBMlCBRAqBY?= =?us-ascii?q?4JziAAMgxKSN442h1mMZoJ5iFWHKpR5NIEVV4ENMiEIHBWFUg8cGYFuVotUAQE?= =?us-ascii?q?B?= X-IPAS-Result: =?us-ascii?q?A0B0AwBWp6VZ/y0WGNZeHAEBBAEBCgEBFwEBBAEBCgEBgwQ?= =?us-ascii?q?oA2QXfp4vgmiXQhwIhSOEF1cBAQEBAQEBAQIBaiiCMyQBgm4ZAQE3AS9lAQUBN?= =?us-ascii?q?YhfgVIDowFAiyCCWDqDCAEBBYhQAQEIIAgSgxiBMlCBRAqBY4JziAAMgxKSN44?= =?us-ascii?q?2h1mMZoJ5iFWHKpR5NIEVV4ENMiEIHBWFUg8cGYFuVotUAQEB?= X-IronPort-AV: E=Sophos;i="5.41,445,1498521600"; d="scan'208";a="1701762" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from usat3cpa07.eemsg.mail.mil ([214.24.22.45]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 29 Aug 2017 17:44:58 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;c3534a4b-2065-4eb7-9afb-149293f96fd4 Authentication-Results: ukel19pa08.eemsg.mail.mil; dkim=pass (signature verified) header.i=@android.com X-EEMSG-check-008: 269766928|UKEL19PA08_EEMSG_MP5.csd.disa.mil X-EEMSG-SBRS: 3.4 X-EEMSG-ORIG-IP: 74.125.83.54 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0DeAAAMoKVZhjZTfUpeGwEBAQMBAQEJAQEBgy+BD4EVni+CaJdCHAiFI4QXQhUBAgEBAQEBAQETAQEBCAsLCCgvhUYZAQE3AS9lAQUBNYhfgVKjOECLIIJYOoMIAQEFiFEBAQggCAkBCIMYgTJQgUQKgWOCc4gADIMSkjeONodZjGaCeYhVhyqUeTSBFTWBLzIhCBwVhVIPEAyCByA2i1QBAQE X-IPAS-Result: A0DeAAAMoKVZhjZTfUpeGwEBAQMBAQEJAQEBgy+BD4EVni+CaJdCHAiFI4QXQhUBAgEBAQEBAQETAQEBCAsLCCgvhUYZAQE3AS9lAQUBNYhfgVKjOECLIIJYOoMIAQEFiFEBAQggCAkBCIMYgTJQgUQKgWOCc4gADIMSkjeONodZjGaCeYhVhyqUeTSBFTWBLzIhCBwVhVIPEAyCByA2i1QBAQE Received: from mail-pg0-f54.google.com ([74.125.83.54]) by ukel19pa08.eemsg.mail.mil with ESMTP; 29 Aug 2017 16:32:30 +0000 Received: by mail-pg0-f54.google.com with SMTP id y15so12315563pgc.1 for ; Tue, 29 Aug 2017 09:32:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=vUOxGBXKxbtoUkeua8UtdJCNSvBKlkqdu8jMqvUS++M=; b=DY2eYQR8CjwaBqr7O+tEYWgnN306XCmHr0WNShx8zCC+I1WAgLeqsWYtuB5ai/3nzF 3CsVxERgnoqnnGvSfq2Si+zNsqgXoG1uldkL7nBOGdqRuz32qtHMUjgb2KCadDylaCRZ qFFDdLDE3mP1mZ9skBi3eyYViFrIriEKGE0BJA2oGLWSNhnpLOLZcO4UmQX0Q1552y89 FTmFejm5EGamtDsHn8/GNxYHhgOSJoOGQhphjundFUaWQJM8PHMA6MNvZLvF/N+Jz2Pm urwV0cs5FBpHXbVk0U4pI7LBmlnB/za0fpFffb7Noh0Yh0aP/gWkTpJuT3K2buMUDH3u LlwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=vUOxGBXKxbtoUkeua8UtdJCNSvBKlkqdu8jMqvUS++M=; b=Wiyq4qVFhEiipIuTeQXm0zdnp+rQEDhzFGopWDs+lkVZccA5lXxTPAdpJf999F496j vBR6L8GTgdXDonWb5lthUajSpz1r1CTQkVZpJwHbrFBAueuLY3nCOMnOSLRM4qPXPp3i PEo4U4fd5hN1dhn3uPsc+6p446t4J6nztEu4oX+U26OoRMeTPC4C/O4FDjw6iThpGTDw 1dl4ng2zQq2fWQBpScoQErw2z2LnaU5uxC3b8vOXpRq+3aDEuXc3pvNFdnTkI28xEbtc IBGp7VUv5oBshr9Vy6Pps9hub5fjjnJ89wV4gFEunkoEn0rpMliP5vMOt1CKR4hKvYhE ngcg== X-Gm-Message-State: AHYfb5hOfc0fuqEOKyXEnSamPAbmvge9EV5TKgmgiDlBLskCqkaU7ysM wgEG8xisXmq922NN4QF9Yw== X-Received: by 10.84.217.85 with SMTP id e21mr1125570plj.109.1504024345103; Tue, 29 Aug 2017 09:32:25 -0700 (PDT) Received: from dcashman2.mtv.corp.google.com ([172.22.114.218]) by smtp.gmail.com with ESMTPSA id m28sm5066626pgc.7.2017.08.29.09.32.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 29 Aug 2017 09:32:24 -0700 (PDT) X-EEMSG-check-009: 444-444 From: Daniel Cashman To: selinux@tycho.nsa.gov Date: Tue, 29 Aug 2017 09:32:05 -0700 Message-Id: <20170829163205.11085-1-dcashman@android.com> X-Mailer: git-send-email 2.14.1.342.g6490525c54-goog Subject: [PATCH v2] libsepol: cil: Add ability to redeclare types[attributes] X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Security-Enhanced Linux \(SELinux\) mailing list" List-Post: List-Help: Cc: jwcart2@tycho.nsa.gov, dcashman@google.com Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP From: Dan Cashman Modify cil_gen_node() to check to see if the cil_db supports multiple declarations, and if so, to check whether or not the repeated symbol is eligible to share the existing, already-stored datum. The only types considered so far are CIL_TYPE and CIL_TYPEATTRIBUTE, both of which intall empty datums during AST building, so they automatically return true. Test: Build policy with multilpe type and attribute declarations, and without. Policies are binary-identical. Signed-off-by: Dan Cashman --- libsepol/cil/include/cil/cil.h | 1 + libsepol/cil/src/cil.c | 5 +++++ libsepol/cil/src/cil_build_ast.c | 48 ++++++++++++++++++++++++++++++++++------ libsepol/cil/src/cil_internal.h | 1 + libsepol/src/libsepol.map.in | 5 +++++ secilc/secilc.c | 9 +++++++- 6 files changed, 61 insertions(+), 8 deletions(-) diff --git a/libsepol/cil/include/cil/cil.h b/libsepol/cil/include/cil/cil.h index 86117f24..f8cfc3be 100644 --- a/libsepol/cil/include/cil/cil.h +++ b/libsepol/cil/include/cil/cil.h @@ -50,6 +50,7 @@ extern int cil_userprefixes_to_string(cil_db_t *db, char **out, size_t *size); extern int cil_selinuxusers_to_string(cil_db_t *db, char **out, size_t *size); extern int cil_filecons_to_string(cil_db_t *db, char **out, size_t *size); extern void cil_set_disable_dontaudit(cil_db_t *db, int disable_dontaudit); +extern void cil_set_multiple_decls(cil_db_t *db, int multiple_decls); extern void cil_set_disable_neverallow(cil_db_t *db, int disable_neverallow); extern void cil_set_preserve_tunables(cil_db_t *db, int preserve_tunables); extern int cil_set_handle_unknown(cil_db_t *db, int handle_unknown); diff --git a/libsepol/cil/src/cil.c b/libsepol/cil/src/cil.c index c02a41a5..3fe68af8 100644 --- a/libsepol/cil/src/cil.c +++ b/libsepol/cil/src/cil.c @@ -1691,6 +1691,11 @@ void cil_set_mls(struct cil_db *db, int mls) db->mls = mls; } +void cil_set_multiple_decls(struct cil_db *db, int multiple_decls) +{ + db->multiple_decls = multiple_decls; +} + void cil_set_target_platform(struct cil_db *db, int target_platform) { db->target_platform = target_platform; diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c index 04492e52..9fc8ab87 100644 --- a/libsepol/cil/src/cil_build_ast.c +++ b/libsepol/cil/src/cil_build_ast.c @@ -82,10 +82,33 @@ exit: return rc; } +/* + * Determine whether or not multiple declarations of the same key can share a + * datum, given the new datum and the one already present in a given symtab. + */ +int cil_is_datum_multiple_decl(__attribute__((unused)) struct cil_symtab_datum *cur, + __attribute__((unused)) struct cil_symtab_datum *old, + enum cil_flavor f) +{ + int rc = CIL_FALSE; + + switch (f) { + case CIL_TYPE: + case CIL_TYPEATTRIBUTE: + /* type and typeattribute statements insert empty datums, ret true */ + rc = CIL_TRUE; + break; + default: + break; + } + return rc; +} + int cil_gen_node(__attribute__((unused)) struct cil_db *db, struct cil_tree_node *ast_node, struct cil_symtab_datum *datum, hashtab_key_t key, enum cil_sym_index sflavor, enum cil_flavor nflavor) { int rc = SEPOL_ERR; symtab_t *symtab = NULL; + struct cil_symtab_datum *prev; rc = __cil_verify_name((const char*)key); if (rc != SEPOL_OK) { @@ -103,15 +126,26 @@ int cil_gen_node(__attribute__((unused)) struct cil_db *db, struct cil_tree_node if (symtab != NULL) { rc = cil_symtab_insert(symtab, (hashtab_key_t)key, datum, ast_node); if (rc == SEPOL_EEXIST) { - cil_log(CIL_ERR, "Re-declaration of %s %s\n", - cil_node_to_string(ast_node), key); - if (cil_symtab_get_datum(symtab, key, &datum) == SEPOL_OK) { - if (sflavor == CIL_SYM_BLOCKS) { - struct cil_tree_node *node = datum->nodes->head->data; - cil_tree_log(node, CIL_ERR, "Previous declaration"); + if (!db->multiple_decls || + cil_symtab_get_datum(symtab, (hashtab_key_t)key, &prev) != SEPOL_OK || + !cil_is_datum_multiple_decl(datum, prev, nflavor)) { + + /* multiple_decls not ok, ret error */ + cil_log(CIL_ERR, "Re-declaration of %s %s\n", + cil_node_to_string(ast_node), key); + if (cil_symtab_get_datum(symtab, key, &datum) == SEPOL_OK) { + if (sflavor == CIL_SYM_BLOCKS) { + struct cil_tree_node *node = datum->nodes->head->data; + cil_tree_log(node, CIL_ERR, "Previous declaration"); + } } + goto exit; } - goto exit; + /* multiple_decls is enabled and works for this datum type, add node */ + cil_list_append(prev->nodes, CIL_NODE, ast_node); + ast_node->data = prev; + cil_symtab_datum_destroy(datum); + free(datum); } } diff --git a/libsepol/cil/src/cil_internal.h b/libsepol/cil/src/cil_internal.h index 6d6a7d90..136a0049 100644 --- a/libsepol/cil/src/cil_internal.h +++ b/libsepol/cil/src/cil_internal.h @@ -316,6 +316,7 @@ struct cil_db { int preserve_tunables; int handle_unknown; int mls; + int multiple_decls; int target_platform; int policy_version; }; diff --git a/libsepol/src/libsepol.map.in b/libsepol/src/libsepol.map.in index dd1fec21..aace91a2 100644 --- a/libsepol/src/libsepol.map.in +++ b/libsepol/src/libsepol.map.in @@ -56,3 +56,8 @@ LIBSEPOL_1.1 { sepol_kernel_policydb_to_cil; sepol_kernel_policydb_to_conf; } LIBSEPOL_1.0; + +LIBSEPOL_1.2 { + global: + cil_set_multiple_decls; +} LIBSEPOL_1.1; diff --git a/secilc/secilc.c b/secilc/secilc.c index f2232e72..0be6975b 100644 --- a/secilc/secilc.c +++ b/secilc/secilc.c @@ -63,6 +63,7 @@ static __attribute__((__noreturn__)) void usage(const char *prog) printf(" statement if present in the policy\n"); printf(" -D, --disable-dontaudit do not add dontaudit rules to the binary policy\n"); printf(" -P, --preserve-tunables treat tunables as booleans\n"); + printf(" -m, --multiple-decls allow some statements to be re-declared\n"); printf(" -N, --disable-neverallow do not check neverallow rules\n"); printf(" -G, --expand-generated Expand and remove auto-generated attributes\n"); printf(" -X, --expand-size Expand type attributes with fewer than \n"); @@ -89,6 +90,7 @@ int main(int argc, char *argv[]) int target = SEPOL_TARGET_SELINUX; int mls = -1; int disable_dontaudit = 0; + int multiple_decls = 0; int disable_neverallow = 0; int preserve_tunables = 0; int handle_unknown = -1; @@ -108,6 +110,7 @@ int main(int argc, char *argv[]) {"policyversion", required_argument, 0, 'c'}, {"handle-unknown", required_argument, 0, 'U'}, {"disable-dontaudit", no_argument, 0, 'D'}, + {"multiple-decls", no_argument, 0, 'm'}, {"disable-neverallow", no_argument, 0, 'N'}, {"preserve-tunables", no_argument, 0, 'P'}, {"output", required_argument, 0, 'o'}, @@ -119,7 +122,7 @@ int main(int argc, char *argv[]) int i; while (1) { - opt_char = getopt_long(argc, argv, "o:f:U:hvt:M:PDNc:GX:", long_opts, &opt_index); + opt_char = getopt_long(argc, argv, "o:f:U:hvt:M:PDmNc:GX:", long_opts, &opt_index); if (opt_char == -1) { break; } @@ -175,6 +178,9 @@ int main(int argc, char *argv[]) case 'D': disable_dontaudit = 1; break; + case 'm': + multiple_decls = 1; + break; case 'N': disable_neverallow = 1; break; @@ -223,6 +229,7 @@ int main(int argc, char *argv[]) cil_db_init(&db); cil_set_disable_dontaudit(db, disable_dontaudit); + cil_set_multiple_decls(db, multiple_decls); cil_set_disable_neverallow(db, disable_neverallow); cil_set_preserve_tunables(db, preserve_tunables); if (handle_unknown != -1) {