From patchwork Thu Mar 23 16:48:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9641611 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 466A6602CA for ; Thu, 23 Mar 2017 16:51:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3A11D21E5A for ; Thu, 23 Mar 2017 16:51:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2E954283FD; Thu, 23 Mar 2017 16:51:56 +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 1AECB21E5A for ; Thu, 23 Mar 2017 16:51:54 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.36,210,1486425600"; d="scan'208";a="4246704" IronPort-PHdr: =?us-ascii?q?9a23=3AnZhFoRNmuccsDMCsN8El6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0LP7/pMbcNUDSrc9gkEXOFd2CrakV1qyJ6OuxAyQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5Yb5+Nhe7oAveusQSn4dpN7o8xAbOrnZUYe?= =?us-ascii?q?pd2HlmJUiUnxby58ew+IBs/iFNsP8/9MBOTLv3cb0gQbNXEDopPWY15Nb2tRbY?= =?us-ascii?q?VguA+mEcUmQNnRVWBQXO8Qz3UY3wsiv+sep9xTWaMMjrRr06RTiu86FmQwLmhy?= =?us-ascii?q?cdMz4y7X/ZhMp+gqlGpB6tvgJzz5LRbIyTKfFwfL7SfckCSGRBQMhfSiJPDIC7?= =?us-ascii?q?YYQNAeoBJeRVo5TzqlQBsRSwChejBPj0xz9UhHL7x7E23v49HQ3Y2gErAtIAsG?= =?us-ascii?q?7TrNXwLKocVfq6zKzWwjXYcvhbxy3y6JLUch8/u/GHQLV9ccjfyEYzDQzFlEmQ?= =?us-ascii?q?pZL+MjOJ1uUCr2ib7+16WeKpkG4osRt9ojeoxscyk4TEgJ8exFPc9Shh3Yo4Kt?= =?us-ascii?q?K1RFR7bNK5CpdcqS6XO5VsTs8/RWxjpTw0xaccuZGheSgH0JEnxxnCZPOZa4WI?= =?us-ascii?q?+RfjVPqJITd/mXJlZKqzhxas/kikze3xTtW030xQripEj9nMrWoB1wDT68ebSv?= =?us-ascii?q?t9+V2t2TCT2ADI9u5IO0U0lavfK5I5w74wkIQcsVjbEyPrl0j7g7Wae0U59uSy?= =?us-ascii?q?9ejqbavqqoWBO4NsjwHxKKUumsixAeQiNQgOWnCW+f+i273n/E35RqhKj/Ivnq?= =?us-ascii?q?bCt5DaOMIbqbKnDA9OyYsj9xa+ACum0NQfh3UHKklFdwidg4jmPFHOPuj0De2j?= =?us-ascii?q?jFS0jDdr2/fGM6XjApXKKHjMiqvhfbZn5E5a0wczz9df55RRCr4bO/LzRlH+tM?= =?us-ascii?q?bDDhMjNAy02ennAs1n1owCQWKPHrOZMKTKvF+K5OIgOfWDZIwOuDb6Lfgl5uDu?= =?us-ascii?q?gGQ3mV8ZYKmo0oAYaG2+HvR6PkWVe33sgs0OEW0SpAoxUPTqiEGeUT5Uf3uyR7?= =?us-ascii?q?wz6SolB4KgDIfDWoetjaeA3CilAJJZeHpKCleWEXfnb4+EQesDaDqOIs99lTwJ?= =?us-ascii?q?TaWuS4gn1RGoqQD11b5nLuvP9yICq53jzt916/fUlREo+jx+F96d3H2VT2Fogm?= =?us-ascii?q?MIQCc7071joUNn0FeOyrR3g/tdFdNP/fxJSRs6OYTaz+NkF9D4QhjBccuRSFa6?= =?us-ascii?q?XtWmBik8TtM3w98SfUl9H8utjhXd0Cq2Gb8Ul6eGBJss8q3C2XjxItxyy3fC1K?= =?us-ascii?q?Y6iFknTdFDNWq8hq5w7wLTHZLGk12Fl6a2cqQRxC7M9WaEzWqIp0xYVQpwXbzE?= =?us-ascii?q?XXAZfEfWq8725lnBT7+vF7QoLBFNycicJatWctfpl0lJRO//ONTCZGK8g3y/Cg?= =?us-ascii?q?2PyrOIbYrqYHkd3D7HBEgfjQ8c4WyKNRMgCSelomLeCiFuFF30bkzw8eh+sm67?= =?us-ascii?q?TlQuwwCEdUJhy6G1+hkThfCGTPMTxL0Esj87qzpoBFa9w87WC92YqgV/ZKVTe8?= =?us-ascii?q?k94FZc1W/CrwxyJIagL6F5hl4GdwR4pV/h2AttBoVHi8gqo2sgzBBuJqKAzFNB?= =?us-ascii?q?azSY0Ij+O73WLmny+Q6ga7TN11HQztmZ56AP6O4ipFX7pgGpEUgi/Gt73NlJyX?= =?us-ascii?q?ec4Y/KDAUKW5LrTkk37wR6p63dYiQl6YPUz2djMa+ovT/DwNIkH+4lyg6hf9tG?= =?us-ascii?q?K6OFGhTyH9cdB8i0J+wgg0KpYQ4cPOBO6K40ONurd/ic166oO+ZggSmrjWdd74?= =?us-ascii?q?B+1UKM6jBwSunS35YK2/uYxBeIVy/gjFe9tcD6gZpLaiwIHmq+1yfkHpVcabdu?= =?us-ascii?q?coYOE2uuJNe3xtpmjZ73R3FY7EKjB08B2MKxZRWddVj90hNL1UQLoX2nnjC1zy?= =?us-ascii?q?donDEosKWf2jDOw+X4exYdPG5EWnVih0/2IYeol9AaQFSobw8xmRul+0n6w6xb?= =?us-ascii?q?pKNkImnXXEdIYy/2L2R4XaeqsbqCecFP4osysSpLSOS8fUyaSrnlrhsB3SPjBW?= =?us-ascii?q?xexCsndzyxoZX5mRt6iWyYLHlpqnrVY8dwygnD5NbEX/5ewiIGRDVkiTnQHlW9?= =?us-ascii?q?McOm/dGIl5jdqOC+THmsVoNNfinx1oyAqS676XdtAR2lkPC5gsfnHhQi0S/ny9?= =?us-ascii?q?lqUj3FrArhbYb21qS1K+Znc1J0C1/77sp1BptxkpAshJ0K33gVmImV92IdkWjv?= =?us-ascii?q?KdVbxb7+bH0VSD4Nwt7V5Azl11N4Ln+S3Y32SG+dwsx7a9m9eGMW1To379pWB6?= =?us-ascii?q?eM8LxEgSx1r0KmrQLQffd9gjAdyeE05HEGg+EJvwwtziqGD7AWHElYOzbjlw6P?= =?us-ascii?q?79ykq6VXfmmve6Cq1EVihdChEK2CogZEVXb9e5ciBjNw4txkMF3S1H3z64fkeM?= =?us-ascii?q?TfbN8IrR2UixbAj+5UKJ0tjfoGnyxnNnzhvXc90e40kQRu3Y2mvIiAM2ht5qW5?= =?us-ascii?q?AhpcNjLrfcMc5jbtjKhFk8aNwoCgAo5hFi8MXJvyQvKiCCgSuuj/NwaSDD08rW?= =?us-ascii?q?+WGaLFEg+C7EdqtWjAH4qwOHGQIHkZ0dJiRB+GKUxanAwUWjI6kYIjGgCs2sPh?= =?us-ascii?q?bF9z5ioN6V7gthtM1uVoOgH8UmjBogeocSw5SJuBIxpQ9QFC4VnaMdCE4uJ0BS?= =?us-ascii?q?FY8YWrrBaRJWyDewRIEWYJV1ScB1/5I7mu4cfP8/CCCeq4M/vBf6+OpPdDV/eT?= =?us-ascii?q?252vyJBm8yyXNsWII3liFeE01VRNXXB+AcTZlCsARzYRly3Tc86RvA289TFvrs?= =?us-ascii?q?Cj7PTrXxri5ZWJC7RPKthv5Ra2jrqDN+KKgiZ2NypY3IsWxXDU0LgfwEISiyZ2?= =?us-ascii?q?ejm1C7sAqCrNQbnMla9WEx4aazp/NMVS4KI6xAVNPtTbitzt3L5ikvE1E0tFVU?= =?us-ascii?q?DmmsyxZswLI2W9O03cCUaOM7SGKzPLzN/rYaOgSb1Qi+BUuAOqtTadDUDjIiyJ?= =?us-ascii?q?lyP1WBC3LeFMkCabMQRQuI6ndBZtFW/jTNf9Zx21LtB4kDo2wacuiXPSL24cNj?= =?us-ascii?q?p8fF1Rob2M9y9Yhe9/G2NZ5Hp/MeaEgzqZ7/XfKpsOrPRrBD57mvlH73Q80bRZ?= =?us-ascii?q?9iZEROZ6mCHKtN5hv0mmkvWTyjpgSBdOsCtEi5+QsEVtPKXY+YNMWXDa8xIR9W?= =?us-ascii?q?+QEQgFp8N5Ct3zvKBd0sLPmLj9KTtY9tLb588cB8/UKc+cKnUuLR/pFCTTDAsf?= =?us-ascii?q?Qj6hLXvfiFBFkPGO6n2VqYA3qpb2mJUQV7BbT0Y6FvUGCkRiB9wPO414US8hkb?= =?us-ascii?q?KBi84I/3W+pgHLRMpGppDHSu6SAfL3JTafl7lLfQMIwavjIIQdN437wVdiakV0?= =?us-ascii?q?nITLHUrfR9ZNrTFgbgAupEVB6n9+Tnc820j9cAOi/GcTFeKonh4xkgZxfP8t+y?= =?us-ascii?q?n27Fc4PFrFvjUwnVIqmdr/gjCRbSTxI72qUYFSFir0sVI+MoniTwZpag2ynkxl?= =?us-ascii?q?NDDeS7JXkbRgaXhhiBXAtptXBf5cUapEbQcLyvGWaPUo1lJcpz66ykBZ/uTFCI?= =?us-ascii?q?FtlA0wfZ6rtXJA1BppbMQpKqzIOKpJ0l9Qi7qUsS+nzO8x3hERKl0K8GOKZiEI?= =?us-ascii?q?vkkIOaMnJyqs5eNs7gODlyFEeGgWWPoguuhq+V8lO+Sc0yLg1KZOKly2N+yaNa?= =?us-ascii?q?+ZoW/AlM+WTVM2zUwIjU5F8qZ10co4b0WUUEUvw6eLGBQSKcrOMwdVYNRO9HLL?= =?us-ascii?q?ZyaBrf3NwY5pP4W6Du3oS/GBu7wQgk+/HwYpGJ8M7tgbEZmqy0HYLsbnIKQDyR?= =?us-ascii?q?oz+AThPE+FA+hReBKXjDcHpNmyzIVp0olGOD4SG399Pjm35rvMvQAqgeCDU8ox?= =?us-ascii?q?YncURosELGw5Wc2gly5foXtAECG90vgFxwia8z/8uiPQASHhYNV5eveUZA5jCM?= =?us-ascii?q?qt9Dol6ai2k1nX85vFJ27kKdtip8XP6eIGp5eHEf9US6dys1vEkYlCW3OqS3LP?= =?us-ascii?q?EcKyJ5Xob4ksasb0BWi8Ul2+jDI4VMjxPNCwLqSShgHoX4lUupGB3D8/Lc+9Ci?= =?us-ascii?q?0eGxBoquEY+q18YQwDY5wmYR/nrAkxK6u/IAKE3dq0WGatNSFaT/9BwuWmf7ZX?= =?us-ascii?q?1TYjbvemyHs8SZE31/S4/lIIRJENiBHe2euvapJAUSftAHxdegTOpS0/l2R7MO?= =?us-ascii?q?Y93Ps/ygvSsVYAKzCLaPBpaGtcstE/H1OTIW95CmwkR1+clofD7Qms36gO8CdH?= =?us-ascii?q?mdZbz/FFumDkvpDDeDKsRLCrqZLNvio8bNgmpqpxMZDjIsqGr57Rgz3fTZnKvQ?= =?us-ascii?q?KeSiK6EeRVmsRIKiJCXPZIgX0lOdABuYdZ5koxTN0xJ7pTCKQ3p7CqbjRlDSgO?= =?us-ascii?q?zS8ZSYyA3ToCgvui1LvAjBuQdootMAAcupVYntQdSzJ2Yj8ZpKK7TYrWk26ERX?= =?us-ascii?q?QVLwgL6ARN5AQAloh2fu//+4fHV55MxCRQo/5tXCvLC4Nk913lRWGKmVL4Uumu?= =?us-ascii?q?k/S13QJOy/LhysIUVwB5CUVG3elZi1UoJ69tK6kLpIHKqD+JeVn9vGL3x+usPE?= =?us-ascii?q?NRxtHMd13kEIrFsnLxUjca+X0VWYBPyHbfFZAJkwRhcagluU9CLZyhdEvl+zMk?= =?us-ascii?q?wIFpEKWiWsCw21Ypt3AGSDm2E9BZEeFprErXWCF5Y5CssJjqJ5dSTXVM95CGt1?= =?us-ascii?q?hZl0FtMyq4yZVCMcFN/iADUyRPoTmHu9uyUsJD09dsD5AQOtd/p2v9GKRcNZiL?= =?us-ascii?q?uXI2oLvvxWTC9jAgqle13iuzFLG8T+JY+W0eFQEpJ2WRqkkvE+ss/H3d8krIsl?= =?us-ascii?q?xu+edUGKSPh11roDlhBpBOGipJ1Xe9IlV9VnVJr+VaKKXQc8xdWfYyZgSiOx0g?= =?us-ascii?q?GvE4wUOF50Z0nW32YyZqrAtV5zjdXxUoVSkSmrrtgToeqsW9Nj8ARZNIajEhby?= =?us-ascii?q?neJgKeniBXuw1fZF92VJADBdZF4Kob3YpS/srNU0qsLjsFXBN6PAIizfVfjVJD?= =?us-ascii?q?sFmfeS3FFwWob+vPshttcceSt8OpLfX5/AZbioz8quw48bsMR2G+kw23Xd/et5?= =?us-ascii?q?P8tsGNtkaWaKf4NOi8bGTdTDTQiBC/nq0oD5/U8CjPKABbMYV1yWI4YZj9Dm7G?= =?us-ascii?q?JRRGKLgBJ0VBUaB1dM5Lrf1EaM98YKYG56ttCQydRh/1H4yvtvZGJE7JRTvCNy?= =?us-ascii?q?WB7vC/oYXL4LzfTujveNeByGvZTKJsIJh68yX7FKn33oNE/Er5xOtt/FtgSVfa?= =?us-ascii?q?KyCBsMjhJgQT6ca5eEvtooElEDHLDJp+i3fi2kZAd88LTCKw65QY1IlV6HDuRu?= =?us-ascii?q?JkykLzqvFd96F46Ykr5LBk0d20KrnPJvRaq0BnHgOZBgFt9pUzHmdzWXxeYugM?= =?us-ascii?q?J/jPZ6gZi97hq/zvHawN9BKV4/BZacfAJ0zZgsm/ES2cRgZZkwcdsjMaNQyc1+?= =?us-ascii?q?Ofm6BoV8mlo/T52lg37Fi6NBIGy6pt5Yic8KqSuODXdwfRzaQDWqXyWsPztKoj?= =?us-ascii?q?tF2P6vA/ib4OfnB1Yxe9H+gDV84dwWPgwr42zS42FMPDBb3g8uZZV30lhjLgh4?= =?us-ascii?q?x9H1IOF/MRB7WL+YBekXkkm+zFLNIZaLtPmmCRGh64Cb8N1WSk6zOJL2V/hBHB?= =?us-ascii?q?zQ3wS3up7FDqtS94XTfMz9D7n0pXTLa3H0BSXzGtOUBirjOCJw/otMfzuaQp7U?= =?us-ascii?q?E5Lm3ku8iLlGu6Ir9XGNf/JNOEKykuuF0XlIExRsCo2Y0DG9qyOtER8H9kbvvZ?= =?us-ascii?q?9mykjTRMo7tdiIrY+cGV/e/bHX++gK2Gs7+N3ixXymAkvVEj7dCtLv7O58CLQ/?= =?us-ascii?q?Ss02YeUSJ/thDcUBGrsbPbrkobOUqR3EfMgowKMclT3WMk2UH++OgjXNUz+R1Y?= =?us-ascii?q?FobEfP4CpDbzOD7uzVaeZdI3WDOe3CFMHlLpC1l4BbQz2H7tvMLTi3jc4VooRp?= =?us-ascii?q?N/d0b/nxx4E504KV4x6FgQ2icDFA8NaRaHDLGnG0voNo4EVUkZZhSBwre6Zqk2?= =?us-ascii?q?3UppwrOs/+/fd+p8CLQRNvxFlA6BgEBbGo4Ksa0ZWL98f0Rd9KvXqwX5BYjoQe?= =?us-ascii?q?XplX0qNfKvWsBa68cZt3k87QmjWxqs85BD76wUiJqQbK5LfYDMvNxg70dg/TMP?= =?us-ascii?q?bTZCgAZlgBO2T+8cv/vu4sPBv5q28OmuW7giR/4N+xgyGWt+k4P6gEo/rtHPy+?= =?us-ascii?q?dcVorVhJz98ABMJn6Ho4Pa3Ad8KOUQMYKrfbBg93odKygYOX0OIcKca+Mg7C91?= =?us-ascii?q?LDXT+1tCD9sNZdIZJsXCgxxbh1byWL5N6srUBEOXB510d8Ay4Gr90Co1/ockUu?= =?us-ascii?q?b89D+2IojS4EpMP/NYgiRjjtDCpOkJwfrKEicX/H2ZZgNpzSOF1paCFez//fiW?= =?us-ascii?q?yNHTTVMJBDQ6U4BHJDqN4QanXPa6lI31UgOI7c/+mIo+e1iMRnOtnKQEvKFMEf?= =?us-ascii?q?RDiinixThRCIT1h/OTs9qx52parUVHH5xv7RLZGKVeMJJ7OQ77lsWxRUhzGDH/?= =?us-ascii?q?eMfKeRoqouaWwf0M4+pmPUvkeYAbOg4Ey6796XdNUgtuUqD5vlKDUuIXetRrU+?= =?us-ascii?q?7LrnFa6YJhN68AJkOdq4bwrjdVslw2BhEmaKMopDxAakbOhBFVW7rzuLMYhQsT?= =?us-ascii?q?S8R5tlFQGWKwI28+4zvHVbhLg6mREvMV7y6TQrYIU0p2LiN0Wwm114l2e7u1gf?= =?us-ascii?q?BHtXtLnixjr/gszzxmQxy8tSr3p60T3TIg+be4tCgOuHFeSuWRjT3ICFVZw/gQ?= =?us-ascii?q?i6cTFWri40SmYHYfdIvy/KVnJcP4+Ikn4nQwfRIjfykcUuS7ES3wjqSIAouUsN?= =?us-ascii?q?JHnxONvcrDbLCpISgVLLQ9xgrpR2Jh3QjGgBZo7GwLTy2v7NA4P4W9It8pyDen?= =?us-ascii?q?F2bddVYM5L5JscTquF4ESes5c1Vhz3t53siAXC0NS9TFG3wpgQg8dWVEbJVD5A?= =?us-ascii?q?cYF6kvgjaIuLNK8R0UYDfQD4Sq54jRncbO2XkmTtdqx3nbprOEhpM0ynJln857?= =?us-ascii?q?7i+UtHQUaePYT9dmAmLv2YdH1ez+e/Ktv/gGSIt40ruhVuQPMs2++WSr2ZVqXV?= =?us-ascii?q?Slyq4ZH1qjP+8J3q3bXDu9SW2EReSLdHCBnzQnPU786xmoKkY6aclQoE87LOTC?= =?us-ascii?q?moRQlwv/XrNoXi+Qv0PUzHQ/MeMGcAI7oIinewgNTO8feeecIewuzeYlCFsLaX?= =?us-ascii?q?/JHDd5B/WwsVGzgIhxI29g7lniYeTx7gDmN8OfGhsEEY/atp5x/vi6RmOdOXB+?= =?us-ascii?q?1xByOUh09/vFF1svrONcdIyRndfIjdRhzeEFb+ttMTE6utMLhoJj6IyU3dyWcR?= =?us-ascii?q?HQ0pnyJs/aovyCD/3Z0UsqZnlQUqAFbgPt+4U6Itk5VqXWHbtYvhQcBq86TYcj?= =?us-ascii?q?N2jr96F0KwVzfRDXZLiuhMnluP6LbINOp3DK9lIwMDvcuxobx/OvUwN7aYyqim?= =?us-ascii?q?7pIJA0QTJBs8FtCgV4E4RSAc8AqBCnA5GMkqGhl9Cx4196u/MNsafoBPDFytC5?= =?us-ascii?q?34RpX5dE/kGKPTfRBKxugkt7lOSyhunP3oP2CcP4dtMOTPJ7TXLdar/aAoW/LS?= =?us-ascii?q?qDO8zke05c8r6TzKx2Xw6UZCD4Q6qGrjOrOO9j4UUhxYxyZPDTwyA177HHxNvy?= =?us-ascii?q?YHlWpiCnrXGXL5Zf9FjKCvbFXxJISPqK7HplHbcJYoTq7usON8ItwMSE6Qlp8D?= =?us-ascii?q?tCyNeFI7SmrkLU3kJ7dJTbLFbm2iogXYkKIQ+/MVc3gWLCq3TSG3JcLs++Jclq?= =?us-ascii?q?mtaVAQTn51NtlmE1em5BBm3oSM+KOWcF38K+ZQuK9B9EDtoEkOC3ZU44ubOoSe?= =?us-ascii?q?Z2IpVKg/6ntLYZntZzLSHAWsxaMDrNLL95JDZRCf/PpFcwaB4er7c1Qps1ZYSJ?= =?us-ascii?q?IE4fNUeP0z/9zQvD0U3ycNyhz7iJICcQ8npZy7LF0D5MpxS2uPqDhc3jSr/ZZo?= =?us-ascii?q?nsXPHOKColSi2aRTMqHEar41ikuP0Es+GDLGcCpFAUfiKSCAkOpqBgrdjQEnXf?= =?us-ascii?q?met9c50WnPqaQTz/SDVklKouASZGrU+MTOAYGgnMbn/unm5ctRe8Jv9I533ldL?= =?us-ascii?q?yYxrdPV+wQHIRMbuWTQ8HEdvBGOzcoijIZNf6+f93ZqLY5yEjITWoCE6TT8l2R?= =?us-ascii?q?VkuWTeKdxz7xWoUVpYc0sDIy+t3Mhi93D7jIP7GHqj61/I64iTqXtOzdW2Q2fU?= =?us-ascii?q?w6nvgCAGiAwRlHLmEIEdcVt1/xQqSYfUZDyGopif5y2x8LYAlzUHpu0ntSnPum?= =?us-ascii?q?H81WV0MbjG2pQP0ccF94Eik8/UmU7Q3uMpQ8vpXISmtf8KYcYZYMJ/kvro/MMe?= =?us-ascii?q?0fx+h68ihhpXkYuiCQFBt2hxiZ/rCYSKBjzbRY+TMQ4+B9XkbJRSjWNGfA1Nz1?= =?us-ascii?q?WIp02S5yrCW8hILvted3Oe4f/dl0?= X-IPAS-Result: =?us-ascii?q?A2HRBADj+9NY/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgn4?= =?us-ascii?q?ogVoSjmSoLCaJG1cBAQEBAQEBAQIBAmgogjMigkEGAQI3FCAOAwkBARcpCAgDA?= =?us-ascii?q?S0VEQ4LBRgEh19CgTcNrG0mAopHj2MRAYYBBYErAYdykzUCkkoCim6GP5NiWHw?= =?us-ascii?q?IGwkCFCVQZ4NxHRmBZlmHW4IuAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 23 Mar 2017 16:51:48 +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 v2NGpiBq002933; Thu, 23 Mar 2017 12:51:46 -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 v2NGmYUt248227 for ; Thu, 23 Mar 2017 12:48:34 -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 v2NGmXYT001400 for ; Thu, 23 Mar 2017 12:48:34 -0400 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 3/3 v3] checkpolicy: Add options to convert binary policy to CIL or a policy.conf Date: Thu, 23 Mar 2017 12:48:57 -0400 Message-Id: <1490287737-31103-4-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1490287737-31103-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1490287737-31103-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.i 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 b744d6a..534fc22 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);