From patchwork Mon Mar 20 15:40:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9634419 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 71FAE601E9 for ; Mon, 20 Mar 2017 15:43:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6122527F89 for ; Mon, 20 Mar 2017 15:43:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5325D27F9F; Mon, 20 Mar 2017 15:43:36 +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 (smtp.nsa.gov [8.44.101.8]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 005F427F89 for ; Mon, 20 Mar 2017 15:43:34 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.36,194,1486425600"; d="scan'208";a="5028635" IronPort-PHdr: =?us-ascii?q?9a23=3AD7w9nxR6fT9T3qGE1vW5AU4oTNpsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa68ZhCEt8tkgFKBZ4jH8fUM07OQ6PG9HzJfqsnQ+Fk5M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFRrwLxd6?= =?us-ascii?q?KfroEYDOkcu3y/qy+5rOaAlUmTaxe71/IRG2oAnLt8Qbg4RuJ6Q1xxDUvnZGZu?= =?us-ascii?q?NayH9yK1mOhRj8/MCw/JBi8yRUpf0s8tNLXLv5caolU7FWFSwqPG8p6sLlsxnD?= =?us-ascii?q?VhaP6WAHUmoKiBpIAhPK4w/8U5zsryb1rOt92C2dPc3rUbA5XCmp4ql3RBP0ji?= =?us-ascii?q?oMKjA28HvTisdtkqxVphyvrAF7z4LNfo2ZKP9yc6XAdt0YWGVBRN5cWSxfDI2h?= =?us-ascii?q?YYUBDO0PMuRWr4nlpVYCsBWzCgawC+3g1DBInWT73bE43uk7DQ3LxhAsE8wIvX?= =?us-ascii?q?/JrNv1LqASUeWtwafM1zrDau1Z2Szg44XWaB8hu+2MUqxqccHMzkQvFQ3EgUmK?= =?us-ascii?q?poz/IzOZyP8As3Sb7uV8VeKvjHQrqwdqoje13MsshY7JhpwMx13C6C53w541KM?= =?us-ascii?q?WlREN0btOoCptduzyAO4doTc4uXXtktDs8x7Ybo5C0ZjIKx44ixxPHbvyHdJWH?= =?us-ascii?q?7Qz7WeaKJDd4mGpleLWihxau6USgyvPzVs2z0FtSsipKiMPMtnEQ1xzI8MSHVv?= =?us-ascii?q?t88Vuh2TaIzQzT7P1LIVsomqbBLp4hw7owmoISsUTFACD2hF37gLKZe0gr4OSl?= =?us-ascii?q?6/nrbq/4qpKTKYN4kBzyPrwrmsOlAOQ4NgYOX3Kc+eS5zLDj5lP2QLFLjv0wj6?= =?us-ascii?q?nYv4nWKt8cpq6kBQ9azpgs6w2kAje60NUXgXkHLFVfdBKBlIjmIUvCIP//Dfeh?= =?us-ascii?q?m1isiitkx+jaPr39BZXANnrDkLDnfbln905cyBA8zdZE6pJWDbEBJvfzVVXqtN?= =?us-ascii?q?zEEBA5KRe0z/zgCNVn2YMUQXiPDbOBMKPOrV+I4foiI+uOZIAPpDn9KOMl5/no?= =?us-ascii?q?jX84h18QZqep3Z8KaHG3BftmPkOZYWbxgtsbFmcKpAU+RvTwiFKeST5Te2qyX6?= =?us-ascii?q?Uk6zEjFo2pFpnMRoasgLyd2ye2BZxWaX5YBV+SC3vocJ+EW/gUYiKIPsBhiiAE?= =?us-ascii?q?VaSmS4I5yB6uswn6y7x6IeXK/i0YtInu28Jr6O3JkhE+7zt0D96S02uVVWF7gn?= =?us-ascii?q?sIRyMq3KB4uUFy10uD3rJig/FDCdNT4PZJXRsgOp7H0+x2EdbyVRzdft2RUlap?= =?us-ascii?q?Xs2mAS0tTtI229IOYkB9G8m8gRDHwSWqBqEal6CRBJ006a/c2GDxKNh7y3bDzq?= =?us-ascii?q?Yhjl0mTdBINWypnKJ/8BLTB4HRmUWDi6mqbbgc3DLK9GqbzWuPvUZYUAhrXKXA?= =?us-ascii?q?WXATf0rWrdLj6kPEVbCuE7cnMgpfycGcMKdKbMPmjUleTvf5JNvee36xm3u3BR?= =?us-ascii?q?uQ2LyMdJDle38c3CXGE0UEixoc/WyHNQglHiehp3jRAyBwGl71ZEPs6+Z+omuh?= =?us-ascii?q?TkAo1wGKc1Fh172t9x8bhPycT/YT0aweuCo6pTV7Akuy39XMC9WavwphZqJcYd?= =?us-ascii?q?Ej71hbyWLVrQt9PoavL6p6nF4Rbxx3v1/y1xVwEohAn9Iqo2kszAVuKKKYy0hM?= =?us-ascii?q?dzaA3ZDxI7HXMWfz/Au1Z67RwFHe386c+r0T5/Qgt1XjoAapG1Ih83p90NlV1G?= =?us-ascii?q?ac647JDAUIUpLxVVs3+wJ9p7HAbSk3/5nU2mF0Mamorj/C3MokC/E4xRa6ftdQ?= =?us-ascii?q?LrmEGRToHMIGAsiiMusqm0KmbhgcJuBd6LY0P9+6d/uBwKOkIPxvnDa4gmRc/I?= =?us-ascii?q?B80kWM+jFnSuHU3pYK3feY3heGVzjmlluhtN74mZxcbzEIAmW/0TTkBJJWZqBq?= =?us-ascii?q?fYYEF2OuI8mwxthlg57tRmJY9FmmB1wcwsOpfgCSb1Pl1w1KyUsXuWCnmTe/zz?= =?us-ascii?q?FsiDEpoLCf3CvVw+T+bxcHIWhLRG5sjFfpO4e0icoWXE62YAg1jBGl/1r1x7BH?= =?us-ascii?q?pKRjKGneWUlJcDLyL2F+TKSwrKGCbtVR6Jw2qyVYS/m8YVWARr76uRsa3DvpH3?= =?us-ascii?q?FCyzAjazGqppL5kgRmiG2AMXlzrWDWecVryBjD49zcQOJe0SAdRClkkzXXAEaz?= =?us-ascii?q?P8Wx99WOi5jDqvy+V36mVpBLdynrzIeAtC+l6m1xGhCwhe68msfgEQQg1i/7zd?= =?us-ascii?q?ZqXz3SrBngeonry7i6MeV/c0l2BV/z99Z6GoZkkocqmJ4Q2X8ahpOa/XcclWfz?= =?us-ascii?q?MNNb1rjkbHoKXzILxMTV4Af90k15Mn2J3575VmmawsZ5Y9m6Y3gW2j4k48BRFq?= =?us-ascii?q?iU6L1EnS1oolu3tg/ReuB9njYbyfsv9HEamPsFuAwzwSWBGroSB1VXPTTwlxSU?= =?us-ascii?q?6NCztL9XZGGrcbi0ykV+h8yuDLaMowxHQ3b5Z4stHTRq4sV4KlLM32X56pv4d9?= =?us-ascii?q?nIcdITqhqUng/Yj+dPNZIxkuAGijB9NW3mun0lz/I7jRto3ZyhuYiLN2Nt/KWl?= =?us-ascii?q?DRJCMD36ed8T8Cn3jalChsaWw5yvHpJ5FzUIQpToS+moHSkRtfv5MQaOCzs8pW?= =?us-ascii?q?mHGbbFGg+f8khmpWrVE5+3L3GXOGUZzdJ6SRmFPkNfnQQUUysinpEjEACq2NLu?= =?us-ascii?q?cF1i6zAM/V73tAFMyvlyOxnkVWffuR2oZSsqR5iRKxpW9A5C6FnPPcyY8O1zAz?= =?us-ascii?q?lS/oe9owyVNmybewNIAHkXWkyCGl/uJaeu5d/d/OiYHOa+KeXBYamWo+xES/iI?= =?us-ascii?q?3Y6v0pdh/zuULsWAJGRiD/kg10VfXHB5B8TYlywBSyMNkSLBdcmbpA2z+idvtM?= =?us-ascii?q?Cw7OzrWB7z5YuIE7ZSMtVu+xSojqqYMu6Qgyh5KThG2ZMQ2X/IyL8f3FsMhC10?= =?us-ascii?q?cTmiD6gAvzbXTK3Mgq9XEwIbayRrOctG9a082BVNOcneit7u2L53kOM6C1BfVV?= =?us-ascii?q?P7gsGpf8sKI2OjO1zbGEaHLrOGJSfEw8vve6OzVaVQjPlItx23oTuUDknjMS6Y?= =?us-ascii?q?mjb0URCgK/tAjCaBPBxRoIu9aApiCXD/TNL6bR22KMV3gSc4wLEug3PFL2ocMT?= =?us-ascii?q?98ck5WtLKf8SZYju94G2xb4XpvNfOElDqB7+nENpYWtuNmAipul+1E/Xs60KFa?= =?us-ascii?q?7CdYRPxygyvftcRhrE2jkuWVzTpnShVOoC5RhI2XpUViJbnZ9p5YVHbC5hIC93?= =?us-ascii?q?2QCwwRqttrC93vobtQysTBlKLyLjdN6dTU8tcdB8fOLMKLKn0hMQDmGDTMFgsK?= =?us-ascii?q?USarNX3Dh0xaiPyd7Waaop8+qpjtg5oOVqRbWEYuFvwEFktpBscCL4lzXjMll7?= =?us-ascii?q?6bkcEJ6GGioxjRXsVao4vHWuicAPr1NDaZlr5EZx0SzbP/N4QTOZXx21Z+ZVli?= =?us-ascii?q?gITKB03QUMhWrS1gYQ80p0NN/WNjQWItwE3laxmi4HkJGf6zhB42hRN0Yf4x+z?= =?us-ascii?q?f0/1c3Ol3KqTMqn0k+g9rlny6efSX2LKeoQ45WDS/0uFIwMpP/WAl1agKzkVZj?= =?us-ascii?q?NDfeSLJbl6FgenxziA/ApZtPHuZRTbFDYB8V3/2XffIo0FVCpSWh3kBH/+zFBo?= =?us-ascii?q?VhlAYxbZGsqHdA1B55Y94uOazcPqxJwUZMhqiWpC+nyvgxwBMCJ0YK6G6SfjAH?= =?us-ascii?q?t1YMNrQ9JCqo+fds6RCYlDtFY2gMVPsqruhs9kwjJ+SK1zjg3KJbKkCtK+yfKL?= =?us-ascii?q?uUu3Lems6TXFw/zFkImFVF/bVtysgjclCUWF0ozLufDxQJL9TNKAFPY8pU6nfT?= =?us-ascii?q?YT6Esf/RzpJtI4W9CufoQPeTu6kOnEKkHRsmH58X48sbBJmsykbYLMn8LLEb1R?= =?us-ascii?q?ot+R7rJFSZDPVJYh6LlikIo92nxp9twYZdPi0dAXl6MSiv+7nXvRElj+CMXNcs?= =?us-ascii?q?eHgaQJAJNmksV825hi5ZpW5PACOz0uIEzgiN9SX8qj3MDDn7bNpiZPCUaQlqCN?= =?us-ascii?q?6o5TU167K2hkLP8pXCO2H6MsxvutvI6eMAuZmHDfJVTb5mvkfTnYlYWmamU2nV?= =?us-ascii?q?Ed66P5LwcZUjbcToCnamVVyykyk1QNn1PNasKKiInA7pSJ1Iv4mc2TAsKdWyFi?= =?us-ascii?q?oCGxtqoeEM+r58bxUZY5UneR7oqxg+N6unLQiFztquRmGtKT1KT/VC1ui6eaJY?= =?us-ascii?q?zzAtbu67z3sgSIs2z++p/k4RXJsKlA3Rxe6/Z4lCVij+An9dex/PpCUjkWhhKu?= =?us-ascii?q?Yyz/wwwBPPqVkTLyqHdOp3Z2xYp9s8H0+dIW1qCmokQF+RlZbD4g+p37AV4ytd?= =?us-ascii?q?n9ZV3PZYv3j/vp7QeimjVLatqZrLryoqdcImrLFpMYz/PsuGs4vTnjPFTJbKtA?= =?us-ascii?q?2FTDW3F/tdmtleJiJYXPlIln8kOcwApYpO91AxWt04J7NRFKkmvqqqZiZ8DS4O?= =?us-ascii?q?0S8ZUJuN0yYGgue9x7TViA+fcJEiMRwCt5VChMESXjVtbSMfvqCjUZzal2GZSm?= =?us-ascii?q?QRJgcc8xhM7hoaloBsZuDl/JbITJhUxjFNvf10VDDGGYN1+FvlVG6Wm0P4R++7?= =?us-ascii?q?k+2pxw5Sy+js0tYDUh5lFUdd3/pWllcvKLxvMakQuI/KvSOIdUP9uGLt0/OoKk?= =?us-ascii?q?BMx8POa1D2C5HIunb7Ui0Z5XIbX5RPyG3FGZQUjQV5dL4hpE9QL4C+Zkb++zsk?= =?us-ascii?q?ypx1ELm6T8+k200oomoBRyeuF9pBCv9psEjLWDJ7f5+rqI/pO5JIQm9f4JedsU?= =?us-ascii?q?tWkF1xMy6lzppRM9tN7SQWXDhIujqQp8eySNdZ1s9oEZAMJtZ/u3HyGKNAOZiR?= =?us-ascii?q?rH02uqDhynDD4TA8tU22xDOtFK+kV+hZ5XERGh01J2SCrUkiF+Ut/n3O/VDNs1?= =?us-ascii?q?B0+uZbCaKMjUhqoTZyAI5BCShT2XCiNVRzQ2FMs/9GJ6TNb8xcX/4yaAe3Oxw5?= =?us-ascii?q?Ef4pxVaJ/E9znXf9bSx/rQ5a+yfaXwkvSyYanq3tmToFqsG8OD8aTZ1IYS8mby?= =?us-ascii?q?ffJAKRgTpXswpHa0F2R5AZBc5I9KsB3YtJ+MrOU0WsJDoEXBxjNwI4zeFQmVRF?= =?us-ascii?q?sEqGZSDXFRCoeurXsh1rYceRq9akLOj+/AdCkY7nrPw096AYSHG8nw2iX8zepZ?= =?us-ascii?q?fmttKWrkuOaLv4M+qkbH/BVjfMlwq/hbM5AJTR4ifcLhJbK4Fkxnogf5fhE3TH?= =?us-ascii?q?PRNcJ6IUP0BbT7x1ac1aouBGYM9pYKQJ+ahzCR+cWxzgBpevo+dcLlbPWzvRMj?= =?us-ascii?q?+N8uqhroLP9bbdU/TvZtSQx3bbRKJ6Jox16TfnFLv204JS50T71+xx+UN9TFjJ?= =?us-ascii?q?LzqOrM/9Jg8R4smtaFfitIUzHTzKGJdwjGbtxkZYesoNXSKl7ZQYx4lF6HvrTe?= =?us-ascii?q?J41Vbzv/NM+7Z47ok4/q5mxd2yJajMNfRQqVVnDQSMBgV26pUtB3ByR3hKYu8N?= =?us-ascii?q?MvjeYLgZgNv1q+DwCqwX8gGa9PJfadvbPUHOgM2/BiubSRxekwcLsSQaIReE1/?= =?us-ascii?q?6Zh690Tt6opfTj2k0z/VexMwULzK1p5YeY4KqHvvHXbxrWzbgARKfqWtn/rrM2?= =?us-ascii?q?u0Od/fckjqIBenRpYw27F+gQTssdyX3kzaAu0y0sD9/DEKj69/NYUXI2gC7gm4?= =?us-ascii?q?thEFoMAvMbA6CH/YJAkWckg+bZLMEZcrhemmaTEh6pCr0CxmSx6yuQO2llhgvB?= =?us-ascii?q?0w/rTGO28V/2qTN4QSrQwNfiiEVVUKK3CV1VXyqzNk9yqCmPMxbwtNrrpaQ161?= =?us-ascii?q?k7Mm7+u9KLmmuhIrRXENDhK9GHPSk7vlQXjIY2RtC134AUB8a9Ks8L8H5idvve?= =?us-ascii?q?93+rkyhZrqdImore48WV+vHJEnmllKCVtquCyytZynciu1Ez8NegNuvB59eSWf?= =?us-ascii?q?Sny34RTztjuwvGRxO1rLjboksVOUyN1UfHgo0KPtdX3XkizE7m//QjQMgu9ApC?= =?us-ascii?q?CobAeukCqi7pNDvz21afbMo9VjOC3DtPAlL1DV54FbA52GL3usLJiXjQ9EMzS4?= =?us-ascii?q?l1dkzonxp3AJskKUMj71gX2CkDERMXZRCdEr6oGVzvLZEYWkgbdRSHwL+6d78t?= =?us-ascii?q?3UJu37yi/+DTbelzBqYXMPZSkBKOlkBBGp0Kqa0eXK58e1hF+a7TvQjiDojqUu?= =?us-ascii?q?PolXUuKPK1Rdpa/toBt3s45Qa/RQSv5otf77oBj5CIbKFEa4DWvM9g90dn+SIP?= =?us-ascii?q?ditVjRhklRy5T/oTpO/97djAq5eo8fyhVLg3SOUY6Rc0HH5yj53uj1A/udvXzf?= =?us-ascii?q?tTSpXJiYTj9wBAO3yKuIff0xRnLOoBNYKqc6h693UGISgeKGgCPdyIZPkg+yVt?= =?us-ascii?q?Kinc50ReAsMQYtMVJMvNmAFOhULzRL5e7dHbFUGEC4hta88k9W33yCo68ZEkSO?= =?us-ascii?q?bv9Ce2JYzD71FKJ/5MlyRslMnMpecPw/rSCTQX4WGDZBhoxiOP0IWCC/Ht8uqS?= =?us-ascii?q?0t7USkkGHiksU4hHPjaC/hanRuWtnpXzTgyU8tPzgI45dE+IXny+hrgFvbpMEe?= =?us-ascii?q?9OjSX7xDteGpnuh/2Lt9qs6W1XtkBIEYto9R3KArlfMYl7ORX2kcmrXEt8CjH8?= =?us-ascii?q?eM7KbBouvvSZxuMW7+V5LUv+apcRIggYxLLi9XpVUgxuRabqvlaDQ+0RYMFpSP?= =?us-ascii?q?XaoX1O9I1gKqAPPFmBpJPwtTdHsko2ABIzZL82sDNaalHEnBdJVKbspL4Algwc?= =?us-ascii?q?XMZ2uUBWA2K/Jn4+5zrcWKRRjamRFOIa8jWJQawTSEVkKCV+TA2p2J92Ybumge?= =?us-ascii?q?hHsn9aniN6uPUq3CJpRB2guS3roKIB3ikg96+8tDUAv3xFU+qfnjzMCVpd1vQL?= =?us-ascii?q?jb0TB2zk6VOifHkJdJHy76V/JcT86Ykh5GwyYRMifyIaWuSgDzv/j7iSDoyOt9?= =?us-ascii?q?JcgwWNuN7VYL+2IiUTOa4xyRX5R3hyygLehgpn8HMXQjW8698pPIq9Nto+xiqz?= =?us-ascii?q?AGTVaVkC7KVIsMv3qF4KQ/A7aVxkwGp51MiIWDcBRMvVG2Y6lgIkc3lLcIpf6R?= =?us-ascii?q?8GEKklmjSIvq5G/gESejvbDoSl+o3NncjV2Hg9TNFqxnnVpq2EnZ4qznxlm81u?= =?us-ascii?q?4S6KpXsSdvbUU8lyDXjvzo1f0/DxZ+2xsuAbT4tr0LWhUOEYPcml4ma23IhqVV?= =?us-ascii?q?KkxrQZBFq1KugDxq3UUy29U22XRfyLc3SQnzY+KkPy5wenLlM5aMdOtEI8PPHN?= =?us-ascii?q?hphCmA39S790QDufpUPDxmw5Lewabx42uJugewESQ+4RY++cJOYwz/06DFsBdG?= =?us-ascii?q?TJHSxwC++3rVGhho57NGt84U/ie+Ti7hjmMMeOGhkDCYParJ5x+PyiRmKGPX9g?= =?us-ascii?q?zQFyM1dv+ufaFlQxqvVcfIiLkdjXndR73vYPd+1xPi0lpt4ThoVj5JGI0MeLdB?= =?us-ascii?q?Hc1YryJdDJrfibHfLfy14memdEXboFeQn1/Zk1PsYlW73PGrtUpREcBak5QJwi?= =?us-ascii?q?MGf876N0Ixlwcg7WYrS7nM/qqviNZpRKu3/c9kgwIzvEux0f1vy0ShR2YIu0iH?= =?us-ascii?q?X0PJA9XSlBr9lqCht6AItPBd0PoBe9D56TgqG7hMe7+1lmtO8SrarwFvfK2cy3?= =?us-ascii?q?34pvW5ha5FSLMyjKCahqg0Rli+Gyjena0pn1F8zuY9QEVPJ0QmTdcL/JAp2/Ki?= =?us-ascii?q?6SOsL7Y0NH/aac0Kh4UhqNei/0RK+GtCy4NPV+/0o30It4fPDczDY19bHUxMPy?= =?us-ascii?q?Z31HpiektXOJM59f40LRCOzGWxJbU+GF8HpkHaILcYv07vkBPsI4zNia/QZz8C?= =?us-ascii?q?xI0NGZLKi5sk/MxkV7eIrfLEvo3SY5RIYLLA27MUstmm/Ztm/dDG9dLse+L8lt?= =?us-ascii?q?h8yZDhv350l+gWstfHJOGnL0RdeNPmgWw9m+axOO9AJKCdYDguG2dUk3uK2uSe?= =?us-ascii?q?lnJI9FlvuytLodittpKD/ARNJcPy7OKL95JSdRDurVqFgveB4EvKA/Wp0papiW?= =?us-ascii?q?PEMHLECAxDv3zQTYzUL0d92s1KCOICsN7HVHzrTF3iZIpwm4v/aZn8LiXKrebJ?= =?us-ascii?q?HsU/7YKDAlWS2CRTQuDUap/k+pu/ges/qbJmcQuUsZYj+UCA4PpqBvqsXQDmDT?= =?us-ascii?q?me1/ZpEKgu6VWzzoQi1iiKUyHjpLtVyLQ/cbGgnZdWTugHBduAO8Iv9B5mzlb7?= =?us-ascii?q?mCyapOWuwWH5FAcvuHTNvEYfpePSsnli0FOOageN3Rt7Q50lfPTWsDCanI9Uae?= =?us-ascii?q?QVWQQvOGwjLkQ4QVs5Izuioy9dLahjV3HLjQP7aDuz6u9Za1jD2Wue3bSmYgYk?= =?us-ascii?q?84jfkcAGaf2hlAKWAFC9YTuE33RK6PeVpM3mozie1ywx8MZBhzUnp2331Um/a9?= =?us-ascii?q?HMlZREURjGywXfIGYld3DCks8kCU+AHyZ8IPudyAD1NZo6ABTYsbMekA9JjcOK?= =?us-ascii?q?xWxu0gmj1hvn8UqSKYWnFUiw+eu4HZBr5x3PUW53Yz9utqBGmTUjjfdS7B0YPg?= =?us-ascii?q?BMVRk3Q96Uv43tbZ67g+fIBRoJt0VRJQWS8=3D?= X-IPAS-Result: =?us-ascii?q?A2HbBAAl+M9Y/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgya?= =?us-ascii?q?BWRKOZagzJokSVwEBAQEBAQEBAgECaCiCMyKCQQYBAjcUIA4DCQEBFykICAMBL?= =?us-ascii?q?RURDgsFGASJUg2qLCYCikaPYxEBhgEFgSsBh3GTLgKSQwKKa4Y+k1hYfAgaCQI?= =?us-ascii?q?UJVBmg3EdGYFmWYdFgi4BAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 20 Mar 2017 15:43:03 +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 v2KFgtvc004101; Mon, 20 Mar 2017 11:42:58 -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 v2KFds38194246 for ; Mon, 20 Mar 2017 11:39:54 -0400 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 v2KFdrI1002837 for ; Mon, 20 Mar 2017 11:39:54 -0400 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 3/3 v2] checkpolicy: Add options to convert binary policy to CIL or a policy.conf Date: Mon, 20 Mar 2017 11:40:17 -0400 Message-Id: <1490024417-12717-4-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1490024417-12717-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1490024417-12717-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.8 | 5 ++++- checkpolicy/checkpolicy.c | 55 +++++++++++++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/checkpolicy/checkpolicy.8 b/checkpolicy/checkpolicy.8 index 600d5cd..7b28696 100644 --- a/checkpolicy/checkpolicy.8 +++ b/checkpolicy/checkpolicy.8 @@ -3,7 +3,7 @@ checkpolicy \- SELinux policy compiler .SH SYNOPSIS .B checkpolicy -.I "[\-b] [\-C] [\-d] [\-M] [\-c policyvers] [\-o output_file] [input_file]" +.I "[\-b[F]] [\-C] [\-d] [\-M] [\-c policyvers] [\-o output_file] [input_file]" .br .SH "DESCRIPTION" This manual page describes the @@ -27,6 +27,9 @@ Write CIL policy file rather than binary policy file. .B \-d,\-\-debug Enter debug mode after loading the policy. .TP +.B \-F,\-\-conf +Write policy.conf file rather than binary policy file. Can only be used with binary policy file. +.TP .B \-M,\-\-mls Enable the MLS policy when checking and compiling the policy. .TP diff --git a/checkpolicy/checkpolicy.c b/checkpolicy/checkpolicy.c index b98bfcd..442e7db 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[F]] [-C] [-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,12 @@ 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); - } fd = open(file, O_RDONLY); if (fd < 0) { fprintf(stderr, "Can't open '%s': %s\n", @@ -568,6 +574,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 +631,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 +652,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);