From patchwork Fri Mar 10 19:49:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9617879 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 D986B604D9 for ; Fri, 10 Mar 2017 19:53:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E69F28789 for ; Fri, 10 Mar 2017 19:53:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 904B328792; Fri, 10 Mar 2017 19:53:43 +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 3F23B28789 for ; Fri, 10 Mar 2017 19:53:41 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.36,142,1486425600"; d="scan'208";a="4741438" IronPort-PHdr: =?us-ascii?q?9a23=3AybPJMhYMOzIRBlwvaqZsrPP/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoc6+Yh7h7PlgxGXEQZ/co6odzbGH7ua8CSdZus/JmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBW7oR/eu8QVjoduN6g8xgbUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU2/nvXishth6xFphyvqQF0z4rNbI2LKPZye6XQds4YS2VcRMZcTyxPDJ2h?= =?us-ascii?q?YYUBDOQPOuRXr4flp1YMsBezCwajC//gxDBWnX/7xrE63uY7HA3axgEsA8wCvX?= =?us-ascii?q?LJp9v1LqcSVuW1wbHMwzrZavNZxyz945XWfx87u/GMQax/cdDMwkQoFQPEgEmf?= =?us-ascii?q?ppb/PzOJyOgAqHSb7up8WuKvjG4rsQdxoiO1ycs2hYnJgZwVx0nC+C5kw4g1Pc?= =?us-ascii?q?W1RFN0bNOrCpddtzyWO5FoTs4tXW1kojs2x7sbspChZicK0o4oxxvHZvyCdIiH?= =?us-ascii?q?/wzsWf6KITd9mHJlYLW/hwuu8US4yu3zSM200FFSoypZiNbMrHEN1wHI6sSdVv?= =?us-ascii?q?t8/luu2TaI1wzJ7OFLPVs0mrbBJ54kw74wkoIfsUXFHiDohEX7lLKae0or9+Sy?= =?us-ascii?q?6+nrf6/qqoGTOoNqkA3yL7wimsmlDuQ5NggOUXKb+eO51LD75k32XrFKjvwwkq?= =?us-ascii?q?nEv5HWPN8UpqmkAw9Tzoks9Q2/Aiy60NUYgXYHLFVFdAiBj4jyIV7COv/4DfCh?= =?us-ascii?q?g1i0ijdk2+jGPqH9ApXKNnXDkrDhfbBn5E5AyAo819Zf6olWCrEGJvLzX1X+tM?= =?us-ascii?q?fEDhAnKQy02PzrCNJn1oMRQWiPGLOWMLvOsV+U4eIiO+uMZI0PtznhKPgl/Pnu?= =?us-ascii?q?jXk4mV8DZqSp058XaG23H/t9PkWZZ2bsgsobHWcNpAo+Q/TgiEeeXj5Le3ayQ6?= =?us-ascii?q?U86ykjCI24FojMWIatgL2d3Ce8BZBWZ35JBU6SHnvycIWEQfgMYjqIIsB9ijwE?= =?us-ascii?q?SaShS4g52B6zsw/6zbxnIffK9S0ctJLuz8J66PPJlRE17zB0CN6d026VRWFugm?= =?us-ascii?q?wIXyM23Lx4oUFl11iDzbJ3g+ZDGNNP4PNJVxs1OoTHz+xmEdzyXBzOfsuRQla8?= =?us-ascii?q?XtqmGS0xTs42w9IWYkZ9HcmigQ7H3yW0Br8aiaCLBIY086/H2HjxP9hyy3DD1K?= =?us-ascii?q?Y7jlkmRtBANWqph6Jl8AjTHYHJmV2Dl6m2baQcwDLN9GCbwGuOvUBYVwhwXL7A?= =?us-ascii?q?XXAbf0fWrNL56lnET7C0E7QnMQpBydCcJadQbN3mk0lGTu/5ONvCe2Kxh3uwBR?= =?us-ascii?q?GQy7ySdIrlYX8d3CTGCEUfiwAc52yGNQklBie5p2LRFiBhGkz1b0Pr6+l+p2ux?= =?us-ascii?q?TlUowAGSc01hy7219wYbhPydT/MT26wLuD06pjV6AlmywtXWC8CaqAp5ZqVcZt?= =?us-ascii?q?E970lb2mLFrQB9OYagL696jF4Ebwt3p1/u1wlwCohYn8gqtmklzAxuJqKZy1NM?= =?us-ascii?q?bDaY3YjxOrHOMWnz8guvZ7TR2lHE39ac4r0P5+ggq1X/oAGpEVIv83Z93NlW1H?= =?us-ascii?q?uc+47HDAkIXpLyVUY36gJ2p7bAYiky/4nUz2FjMbGosj/e3NIkHPEqxQu6f9de?= =?us-ascii?q?LqyEDhT/HNcGCMirMuAqnEKpbh0cNuBI6KE0J9+md+eB2KOzIOlvhjamgnpc4I?= =?us-ascii?q?Bh0kOM8DFxSvXU0JYE3f6Y2BeHVzbmg1u7tMD4h5xEbykIHmWj0SjkGJJRZqpq?= =?us-ascii?q?cIYLF2iuJ8m3xtJlip7pRn5Y6FmjB1Yc18OzfhqSdVP91xVK1UsLuXynhTe4zz?= =?us-ascii?q?tsnjEyoKqfxivOw//+dBccIW5LQm5ijFnpIYeuidAWRk6oYBY1lBG9/0b127Bb?= =?us-ascii?q?pLhjL2nUWUpJcTL5L2V+UqSurLqCeNVC6I02viVNS+u8fFWaRqT6oxsA3CPpB3?= =?us-ascii?q?FeyywjdzG2ppX5mAR3iH6AI3lurXrWY8VwyAzD69zbQP5ewiAJRDJkiTXNAFiz?= =?us-ascii?q?IcWp982Ol5jfquC+S36hVppLfCntzIOAsC+76nNxARCkhf+8hMfnEQ8g3S/8zd?= =?us-ascii?q?lqWj3CrAzgbYnzy6S6LeVnc1F2BF/998V6BoZ+kpEqiJ4M2XgagZOV/XUcnGf3?= =?us-ascii?q?MNVb37jxbGAKRTIRxN7V+gfl0lV5Ln2V34L5Smmdwsx5atm+Y2MWwT4949lRCK?= =?us-ascii?q?iK6LxEnC11oke3rA/Kevh9hjYdyf0v6HEGmOEFogwtwTuBAroKB0lXITTslwiU?= =?us-ascii?q?79C5tKhXfmGvcby01EVgh9CuELaCow9HVXbiZ5ctATRw4t94MFLW33358pvkd8?= =?us-ascii?q?XIbdIPqh2UlA/Nj/BPJ5IskvoGnzBoNXjmsn0iz+47kRtu3ZehsYiCN2lt+qW5?= =?us-ascii?q?DQJCOj3zecwT5innjbxCkcaOw4CvApJhFy0IXJT2S/KoCykftff5OAaICz08rG?= =?us-ascii?q?mUGabFEQ+Y8kdmoGrFE4q3OHGPOHkZ0dJiSQGFJENFnQAUWCs1noYjGQCs2Mzu?= =?us-ascii?q?bl156ysM5l7jtBRM0PloOwPkUmfYuQeocCs7R4aRLBpR9AFC6FnaPdaY7u1tAy?= =?us-ascii?q?FS5oehoxCVKmyHewRICnkEWlKCB1/+JbSu+9/A/PWYBuakKfvBf6mOo/REV/iU?= =?us-ascii?q?3ZKvzpdm/zGUO8WXJHZiEvk711FfUnB4B8TYmywDSyINmCLLdcKbow28+iJvpM?= =?us-ascii?q?Cl7PvrQB7v5ZeIC7ZKMtVu+xS2jrmYOu6VgyZ5JzhY2Y0QxX/UyLgf21sShD90?= =?us-ascii?q?ezmrD7sAqTbHTLjMla9PEx4bdyRzOdNG760m2AlNJcnbitbu2752kPE6FlBFVU?= =?us-ascii?q?b7lcGxf8wKJGO9O03bC0aXLriGIifLw87va6OmVbJQlPlUtwG3uTuDDkDjOC6M?= =?us-ascii?q?miL0WBCpK+5AliabPAZRuIulaBZiFXDjTM76ah28KNJ3lyA5zqAvi3PFMG4dPi?= =?us-ascii?q?Jwc0VTob2M9SlYmOlwG3Rd7np5KumJgzyZ4/PWK5oMtPtkGCB0l+Va4Xkh0bRa?= =?us-ascii?q?8CRESOZymCvIod5ku0umnfWXyjp7TBpOrS5GhIyRvUp8JKrZ7YNPWXDY/BIK9m?= =?us-ascii?q?WdEA4FqMdgCtH1vKBQ0NfPnrrpKDhe69LU4dccB8/MJcKBKnouKwLpGCbPAQsL?= =?us-ascii?q?TD6rL3rfh1BTkPGT8H2atJ46pYTtmJUUTr9XTls1FukVCk59BtwNPI93Xi84kb?= =?us-ascii?q?6clMMH/mGxoB7VRMVbpZDHSumSDe/0KDmHkbZIfQAIzq38LYQSMI37xkNjZ0Jm?= =?us-ascii?q?k4XKAUrQQMtNrjdvbwAuvEVN639+Tmsp10LicAOt72cZFeSokR4ulgt+feMt+S?= =?us-ascii?q?/37Fc2KVrKoy0wnVIsltr7mj+RcST+LKGqUYFRESr0uFA7MonnTAZtcQ2ygUtk?= =?us-ascii?q?OS/eSLJelbRga35khRTbuZtXB/FcS6hEbwURxfGTfPoo1ltdpj+gxU9d6uvPEY?= =?us-ascii?q?FimxcycZ6ws3JA3BpubMIyJazVPqZJ1F9Qh6OQsS+uze8x2ggeKFgO8G6JZCEI?= =?us-ascii?q?v0kIOaU8KCqz4uxg8wqClCVfeGIUTfolvupq9l8hO+SH1y/g1aBMJVq1N+GELK?= =?us-ascii?q?OZvHPAldKSTVM2zUMIlEhF8aJw0cg9b0qeT1ovw6eJFxQVKcrCLhlYb9BM+3jI?= =?us-ascii?q?YymBq//Nzo51P4imDe/oTPWOu7sTgkKqBAYpBZoD78QbEpmqzk7YMd/tLKQZxh?= =?us-ascii?q?U1+ATrOFKFAexUdx2RjjcHotywzIRs0IZHPDEdG2J9MCus5rnJugAqneCDXNYq?= =?us-ascii?q?YnYaRIcEMGw5WNGikS5Do3tAFCW30v4eyAWa8jD8vTrfAyPzb9p5fviUewhhCM?= =?us-ascii?q?qs9jU87qi2k0TY/o/aJ2HnM9RtoMXP5foGp5aACPNVTb59v13am4ZGW3ygS3TP?= =?us-ascii?q?HsKtJ5jsd4ksasT5CnK9UlyllT01ScbwPNG2I6iHhwHoWJxYsI6B3DAsLcW9DC?= =?us-ascii?q?0RGw9sp+Ef46JxfRYDbIQ/YR7psQQ+KqO+LRyE3dWpRmaiNSFZT+JDzemgYbxY?= =?us-ascii?q?0TYsZPegyHQ8VpE60/W38UkVSZ4Xkh7ewPGjZ49CUSTuAXFdZRvApTA4l2lgMe?= =?us-ascii?q?YyxP0zwBXWvlkAKzqLbvBmaHRYv9EgAlOfOXZ2CnA4RlCGi4rD/g6s0qsd/yta?= =?us-ascii?q?h9ZbzfdJsH7gsZ/DeDisQrCkqY3Jsyo8atgru7FxMY3mIsuBqJPenjzeQYLNvQ?= =?us-ascii?q?2EUC+1DeFVlsJWIC1GXPlCgXslNtAeuYpd9UoxUd8zJ7NVCKY2oLCqdSFpDS8V?= =?us-ascii?q?zS4XUYOAwDwCjfm927vcihefbo4iPAYCsJpcntsXSzR2bT8GpK+/S4XWkHeJRX?= =?us-ascii?q?IPIAcS8QtD+hoPlopwf+Dj54rISoVDxiVNrPJ1SCTLEIBk91XmSm2Mh1j3Vumh?= =?us-ascii?q?mfSz3Q1O1PLszsUbWBlnBEdG2elWkFAlJ6tqJKkOoIHKqCSIelngvGPt0uemI0?= =?us-ascii?q?NRycLMfV3iEIXFrXb8UjEb+XAMX49PznDfGogSkwp+bKYrv01CLpm7dEjk+zEq?= =?us-ascii?q?wJ9kEKW/VcCu21kqt20GRzuwH9pHFe5mrErdWCd5bJCztJXlJ5JST3dM952fsV?= =?us-ascii?q?hWjF5gPDK+yZpYL8FN4yADXCJToTqDoNSySNdP2chsD58DOt1/oWvyGLtYOJiN?= =?us-ascii?q?pH07oqbvxWXD+zA7q1i33ymzG7WiQOJH4WIeHgQpJ2KRqkkrDuss/WfS8kzDsl?= =?us-ascii?q?9u5edbA6KDjUNvrzZhBppOHCpG1Wi5L1RvS3lLq+tbJL7JfMxcQvkyYB6vNAY9?= =?us-ascii?q?FfM93kyG4197kmnjbyx1rAta9DjXXxMoWikNnrfthToep9m/OT8dT5JHdy8hbi?= =?us-ascii?q?nCKwKflyBapxNfa0ZtW5ACHNlK56sb3YxP/srZSEasLy4FUAZlNgIi3vpVjVRD?= =?us-ascii?q?v1mAeSDBEQqocu7CvQdtfceMqs6lNvf58RxGioPmseA4674MS2egmQKzXdDUt5?= =?us-ascii?q?X8ucGStkuSaKf4NPWxYWPGTDjJlh2wmasoD5zR8CTJNgpUNYV6w2I+YZf9EW7L?= =?us-ascii?q?IQhGJ6UDKkpbT696c89JouRHaMJ/ZakG57dtBgqZSRPrBoOvtuNKLlHJRTTRNy?= =?us-ascii?q?+B6PCwoZrP7bzBTujtfs6Mx3HZTK9sI5h19yL7FKnw0Y9C5EX5x+1h9kVkRlja?= =?us-ascii?q?KyqBtsjuJhsX5Mm+cUvvpoYmHT3KD5tsknfh209NetELTC2t9ZQX1IlW6G3sSe?= =?us-ascii?q?5i1Ej8rvFS/aF+6YYr+7Bp1du0JaDKJPRAr0BoHxiUCR929pg2BGh/QH5RbfEP?= =?us-ascii?q?JPjNeqQWkN7hp/rxF6MJ9B2f4/ZZZsffJ0Hdhsm/DSmRSQRfnAcdszEVMxec2u?= =?us-ascii?q?Wem69zVMalv/T21Vwr41iiNB4J1rRt6Z2D+qqSq+/ddwHRwqQcWqj2WsPzqawh?= =?us-ascii?q?u1+I5fI6irEBZ3d4YxCjEOgBTM4S3HngzaEtzSIoDczDA6js+PlZV3I2hjjggY?= =?us-ascii?q?xyH00KGvMIGrqG5YFekX08m+zdKNIWbrxClXyVGhO/FL8N12Kr6zCLL2Z/mhHB?= =?us-ascii?q?zQv8QWWt41/qtSV4WzfDz8//kkpJUbm6HUVSUDCzOU9/qzOPOBDntMTstKQw8U?= =?us-ascii?q?E2NnDktNORm2ugIrxXGdb/KMabISkuq1IdlIcxScC32YAHBdq9J88c8HNkYfvY?= =?us-ascii?q?5WOriShBrLpZiIfF/sGa4PPXHWKnj6GArbWC2ixYwGAivV4j8tCgKu3O59qSTv?= =?us-ascii?q?SnymYRTiN/uw/fUB6wsbHUsk4bNleK0EjRnowGJNZZ3WM31kv+/ugsXMoz9BlC?= =?us-ascii?q?FobHf/4CozTzNSD1wVaZZtI7TCie0z1ZHlLvC1Z4A7Q82HjtvM3ViXfQ5kcoSZ?= =?us-ascii?q?dqe0zgnxx3AJ0yKVgx51gP3ioDDQ8NZAieDLGvA0TlMYQEWlYYZBSC3bi1YKE3?= =?us-ascii?q?0lNvwrKh4+/Td+98B7EXOvZbkAGOgEBRGogKvq0GXLJ8Z1hd+bbTpgj5DojqX+?= =?us-ascii?q?PrlXQuOvKoRcBa69oWt2M44ga4RRqv94tM76oBhJCPbK5EboDGvNpg4Ed/+T4P?= =?us-ascii?q?aitNjQBkjxyjT+ATvu/j7cbAsJez8eahTrgtSP8Y9xcqHGRylZ3wj04/odvPze?= =?us-ascii?q?dTVpXViZjj8ABKO3OKuofa0xxnJOoLNY2qfKhv928GJygYKHICJ9yWZOcg4yV1?= =?us-ascii?q?KjXc+0RCAt8QZdMfJMfNmAFVhVfzV75P7cfbAUGXC5tteM809Wb3zyo18ZQkWO?= =?us-ascii?q?b69DC2PYzf701KP/5blypslcnCpeYPzvrQCSgX/WGZZAJowiOG0JSCF/Hw8viS?= =?us-ascii?q?x97OSlMGBCk2U51HKzaY/gynXOW1no3zUgyI8s/znI4+dEWIS3yphqsFrrpDEe?= =?us-ascii?q?5OiyX8xDheFZn5h+mLvNqo6WtXsEBHEYlo4B3dAqpfIol0ORT2l8msXEh8BTHz?= =?us-ascii?q?eMLKeRo0vuqZ2OMM7/95N0vkao8ROggExK7i6XpJUgtuT6b7vkqDXe0PYNtpUv?= =?us-ascii?q?XEoW5O5I19Kq8PM1mdpIDwoTdTsl82GhIpZKU2rjNEaknEhBdVVLrsuL4clgsc?= =?us-ascii?q?VsZ0uUBWFmKqJm0++zrHWL9RjKmQFPwa7DWTQbYTU0VzKC9+RQ262Il2cbuzgf?= =?us-ascii?q?9Hqn9Gnj96oPUy3DxpWh28uTHrp6IK3j4g46+3tDEAuXxDU+WfnDzFCVFdw/QQ?= =?us-ascii?q?jaYTEWzu6Vqib3kfdIHy+qVoJdz89Yk95HQyeRMjfywaUuSnDyH/lbiIDpaOsN?= =?us-ascii?q?Jbgx6No97OYKS2LSUdObUx0xXjR2Jy0gLGhhZn7HMLQim87N8jPIi9NtoqxjGz?= =?us-ascii?q?GWTCaVgC7aVHsMr3tV4WQ+o7clxhwGB53ciBWCIBXsvPG3w6jgI8c2VLbIpD6Q?= =?us-ascii?q?MGF6kvmjuIvK5G/gESYDvODoul+o3QndrV1ng8TNdqwHnWpq6Ehp4xzn1lms10?= =?us-ascii?q?4TSKuHsPduzUSclsDWbv1o1H0+zxe+2tsvwbSIth0LmhUeECPdOl+Wat3JVqR1?= =?us-ascii?q?KqxrUZH1qiKuMDwa3bUyi9Q22CReuLa3SMnyo+MkPq5xmnMFM3aMlOr0ImPOrN?= =?us-ascii?q?nJhcmBP9Ub9uQCWfu0PbxnQ5MewGbwI2pJunewsSQe4eY+icIuYvz+M6CFsIdH?= =?us-ascii?q?LJBix2C+m3sVGxhoR7PWtv4Vnia+T37g/mKMeSGgUDEYPCrJ5x+fy7RnqGOX9k?= =?us-ascii?q?zR1yIFd7+vzaF1Qwqu9caYiekcLXh9Rh3u4Pb+1tPjElut4PhoJj7pGZ0NuLcR?= =?us-ascii?q?HU1ZvyOdDVreSbA/LBy0QmYGdaXaQFYQnt/YU1IsY5W6HPHbtepRkcAKk6QJ8i?= =?us-ascii?q?N2f276x0Lhl8cg3WZLSynMbqoPiHZp1KqH/K9lgwNjvTuwUfyvyoSgx2d4uliG?= =?us-ascii?q?v0IJAsXT9BtNltChx6HItTBcMPsReoD4STmKGhhN+741l6tPMSsarsFvDK08y0?= =?us-ascii?q?34tvUJhe5EyLJCjeCbJqg0Rki+Syh+nP0oP1Ccz8Y98EU/J7QmHdYL/cAoq/Mi?= =?us-ascii?q?6OOt77e0Ne/b+cyKh5UhSNay/nRKeGsSykNOl+4Uol0IB4e/DTzDM15bHBxNTy?= =?us-ascii?q?f31bpjukrXORM5tf6ELFCPfGXxJQU/WF63plHawLYovo7ucBL8ItzMKa4wZt8D?= =?us-ascii?q?RIyNGFLLS5rk/QxkJ7corWLE/o2yY/RIkLLw2zMU8tgW/CtnTdGm9RLsm+Jslr?= =?us-ascii?q?h9aZFBvt51N+mWs1fG5OBnLoRcuNOWgcw8++fxOF9AZKD9YFgu62dkk0uKKuSe?= =?us-ascii?q?loJJpFg/ultK0dnttyKCHAWtJaPyfOI79yJTVRE+rPqEIvYh4evLg/Qp01aoSW?= =?us-ascii?q?IEMbLEeAzjv/zQ7Y3kLod9ys1aCJICEN/3VZzrLF1yZDpw24ufafn83iX6rVbJ?= =?us-ascii?q?bsXP7dKCAlTC2VRSwuEUa1/lepo/gEs+CbIWcYuV8ZeT+SCAgPpqBvqtjQE2DT?= =?us-ascii?q?me1/fJEQgvCVRTzwQjVilKUuHiZLqVyMQ/0bGAnZdXDum3BcuA28Kf9I5n/lcb?= =?us-ascii?q?mYybBOW+wXH4tAaPuZTMXEefpGPTcnii0ZOPqgf93bt7s50FfITWwDE6nS9V2e?= =?us-ascii?q?V1WbQvqGyDLuQ4oVvpI4ui0y+tLfhiV3CbjHP66Dpz6y9Y61lD2YuePbVmYxYk?= =?us-ascii?q?E4g/kPAHefzxlaKWEFCtYVuEf3Tq6GeUlMyGojifhy1B8UZARzTnpu32VUnPa6?= =?us-ascii?q?HM1ZTUUZjGawT/IbYlB3Cykw8lOU7QHoZ9wPp9zTFCdi8e4XRI4cKuQ4wJXGM6?= =?us-ascii?q?sXhvAy1XRppzJpnT+aCgZ/hweI6OL7Fbhgy6cKsWsn9PhsQhunXyLUcm+BzJGv?= =?us-ascii?q?Tc1I23E98jjfy8PIs7U1Z/NhrIZjDQJPW3p7?= X-IPAS-Result: =?us-ascii?q?A2HRBAC0A8NY/wHyM5BdHAEBBAEBCgEBFgEBAQMBAQEJAQE?= =?us-ascii?q?BgyaBWRKOYagcJohGVwEBAQEBAQEBAgECaCiCMyKCQQYBAjcUIA4DCQEBFykIC?= =?us-ascii?q?AMBLRURDgsFGASJUg20IyYCinKPYxEBhgEFgSsBh26HPotiApI4AopmhjyTQFh?= =?us-ascii?q?7CBkJAhQlTmWDcB0ZgWhXh2yCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 10 Mar 2017 19:53:39 +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 v2AJraOQ026127; Fri, 10 Mar 2017 14:53:37 -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 v2AJn6oS288360 for ; Fri, 10 Mar 2017 14:49:06 -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 v2AJn4FU024726 for ; Fri, 10 Mar 2017 14:49:04 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 3/3] checkpolicy: Add options to convert binary policy to CIL or a policy.conf Date: Fri, 10 Mar 2017 14:49:36 -0500 Message-Id: <1489175376-27336-4-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1489175376-27336-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1489175376-27336-1-git-send-email-jwcart2@tycho.nsa.gov> 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 Use the same option "-C" used to ouput CIL from a policy.conf, but now generate CIL from a binary policy instead of giving an error. Use the option "-F" to generate a policy.conf file from a binary policy. Signed-off-by: James Carter --- checkpolicy/checkpolicy.c | 60 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/checkpolicy/checkpolicy.c b/checkpolicy/checkpolicy.c index b98bfcd..9694f57 100644 --- a/checkpolicy/checkpolicy.c +++ b/checkpolicy/checkpolicy.c @@ -75,6 +75,8 @@ #include #include +#include +#include #include #include #include @@ -105,7 +107,7 @@ unsigned int policyvers = POLICYDB_VERSION_MAX; static __attribute__((__noreturn__)) void usage(const char *progname) { printf - ("usage: %s [-b] [-C] [-d] [-U handle_unknown (allow,deny,reject)] [-M]" + ("usage: %s [-b] [-C] [-F] [-d] [-U handle_unknown (allow,deny,reject)] [-M]" "[-c policyvers (%d-%d)] [-o output_file] [-t target_platform (selinux,xen)]" "[input_file]\n", progname, POLICYDB_VERSION_MIN, POLICYDB_VERSION_MAX); @@ -388,7 +390,7 @@ int main(int argc, char **argv) size_t scontext_len, pathlen; unsigned int i; unsigned int protocol, port; - unsigned int binary = 0, debug = 0, cil = 0; + unsigned int binary = 0, debug = 0, cil = 0, conf = 0; struct val_to_name v; int ret, ch, fd, target = SEPOL_TARGET_SELINUX; unsigned int nel, uret; @@ -411,11 +413,12 @@ int main(int argc, char **argv) {"handle-unknown", required_argument, NULL, 'U'}, {"mls", no_argument, NULL, 'M'}, {"cil", no_argument, NULL, 'C'}, + {"conf",no_argument, NULL, 'F'}, {"help", no_argument, NULL, 'h'}, {NULL, 0, NULL, 0} }; - while ((ch = getopt_long(argc, argv, "o:t:dbU:MCVc:h", long_options, NULL)) != -1) { + while ((ch = getopt_long(argc, argv, "o:t:dbU:MCFVc:h", long_options, NULL)) != -1) { switch (ch) { case 'o': outfile = optarg; @@ -461,6 +464,9 @@ int main(int argc, char **argv) case 'C': cil = 1; break; + case 'F': + conf = 1; + break; case 'c':{ long int n; errno = 0; @@ -510,12 +516,17 @@ int main(int argc, char **argv) sepol_set_policydb(&policydb); sepol_set_sidtab(&sidtab); + if (cil && conf) { + fprintf(stderr, "Can't convert to CIL and policy.conf at the same time\n"); + exit(1); + } + if (binary) { - if (cil) { - fprintf(stderr, "%s: Converting kernel policy to CIL is not supported\n", - argv[0]); - exit(1); - } + /* if (cil) { */ + /* fprintf(stderr, "%s: Converting kernel policy to CIL is not supported\n", */ + /* argv[0]); */ + /* exit(1); */ + /* } */ fd = open(file, O_RDONLY); if (fd < 0) { fprintf(stderr, "Can't open '%s': %s\n", @@ -568,6 +579,10 @@ int main(int argc, char **argv) } } } else { + if (conf) { + fprintf(stderr, "Can only generate policy.conf from binary policy\n"); + exit(1); + } if (policydb_init(&parse_policy)) exit(1); /* We build this as a base policy first since that is all the parser understands */ @@ -621,15 +636,20 @@ int main(int argc, char **argv) policydb.policyvers = policyvers; if (!cil) { - printf - ("%s: writing binary representation (version %d) to %s\n", - argv[0], policyvers, outfile); - policydb.policy_type = POLICY_KERN; - - policy_file_init(&pf); - pf.type = PF_USE_STDIO; - pf.fp = outfp; - ret = policydb_write(&policydb, &pf); + if (!conf) { + printf("%s: writing binary representation (version %d) to %s\n", argv[0], policyvers, outfile); + + policydb.policy_type = POLICY_KERN; + + policy_file_init(&pf); + pf.type = PF_USE_STDIO; + pf.fp = outfp; + ret = policydb_write(&policydb, &pf); + } else { + printf("%s: writing policy.conf to %s\n", + argv[0], outfile); + ret = sepol_kernel_policydb_to_conf(outfp, policydbp); + } if (ret) { fprintf(stderr, "%s: error writing %s\n", argv[0], outfile); @@ -637,7 +657,11 @@ int main(int argc, char **argv) } } else { printf("%s: writing CIL to %s\n",argv[0], outfile); - ret = sepol_module_policydb_to_cil(outfp, policydbp, 1); + if (binary) { + ret = sepol_kernel_policydb_to_cil(outfp, policydbp); + } else { + ret = sepol_module_policydb_to_cil(outfp, policydbp, 1); + } if (ret) { fprintf(stderr, "%s: error writing %s\n", argv[0], outfile); exit(1);