From patchwork Tue Jan 31 19:41:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9548305 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 4484360425 for ; Tue, 31 Jan 2017 19:44:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 365B128249 for ; Tue, 31 Jan 2017 19:44:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B0742831C; Tue, 31 Jan 2017 19:44:18 +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 5ECEE28249 for ; Tue, 31 Jan 2017 19:44:17 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,315,1477958400"; d="scan'208";a="2769920" IronPort-PHdr: =?us-ascii?q?9a23=3A9WFjnBYTKlZIRrMUei8u9Vn/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoc6+Yh7h7PlgxGXEQZ/co6odzbGH7+a+BCdZu8jJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBq7oR/Qu8QWjoduN7g9xxrUqXZUZu?= =?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?GQy7yXd4XmfGEd3CTGCEgYiAAf522GOhYiCSu7uGLREjhuFVPpY0Px/uhzs2+0?= =?us-ascii?q?T08uzwGXdE1tzbS09QQJhfyHTPMT2KgIuCA7qzV7BFy9xc7ZC8Kcpwp9e6VRec?= =?us-ascii?q?0y4E9d2mLDtgx9JYetL7h4iV4EcgR3pFvu1xFtBYpcj8cmtnQqzBB9KaiAylNO?= =?us-ascii?q?ayuY3YzsOr3QMmTz8hGva6rT2l7Aytab4akP5+olpFXkpgGmDFIi829g09lXzX?= =?us-ascii?q?ST+onKABAVUZLrXUY97wJ6qK3CYikh+4PU0mVhMaeusjDY3dImGOolyg27ctda?= =?us-ascii?q?KKOEFRb+E9YUBsi1MuAqnEKpbh0cNuBI6KE0J9+md+eB2KOzP+ZvhjGmjWNa4I?= =?us-ascii?q?1m0UKD7Sl8SunV35ofxPGYxASHXS/mjFi9qsD3hZxEZTYKE2Wl1CfkHo9RabNo?= =?us-ascii?q?fYsQE2ihP8i3ys95h573VH5S7ESjCE8e2M+1ZRqSaETw0hFK2kQTv3Ongje4zj?= =?us-ascii?q?xzkzwytaqQwC3OzPrkdBobO25EXnNujVHyLoiol9oaRlSnbxA1lBu54kb336hb?= =?us-ascii?q?q7p7L2nXRkdFZCz2L3x+Uqu3s7qNedRD6JQysSVYSO68e0yVSqbhoxsG1CPuB3?= =?us-ascii?q?BexD4hdzGtoZX5gwd3iHmbLHZ0onvZfNt/xRHF6NzaW/FRwiIMRDNkhjnPGli8?= =?us-ascii?q?I96p8M2alpjZtuC+S3yuVodIcSTw04OPqjG76nZ3AR26hfyzncfnEQci2y/hy9?= =?us-ascii?q?ZqTTnIrAr7YoTzy6S1LP9ofkhyC1/48Md1BoZ+ko4si54Kwngamo+Z/XwZnmfv?= =?us-ascii?q?Kd9bw77xbGIRRT4XxN7Y+A7l2ExnLnKN2Y35TW6QzdF/aNmgZWMawCU979pFCK?= =?us-ascii?q?2M9rxLgTN1okakrQLWefV9gDYdxucy6H4dmeEFohYiziWaArAUEklVJijslxWO?= =?us-ascii?q?79+ktqVXY3yjcb+q1EpxhdqhFq2NohlAWHblfZcvBStw7sRkMFLQyXHz8Z/reN?= =?us-ascii?q?3RbdIVqx2VnAzNj/NNKJIwkPoKhDZoOXnnsX0j1eE7kQRk3Yums4ifN2Vt4KW5?= =?us-ascii?q?DwZCNj3yY8MT/i/ijbxCkcaR0YGiBY5hGigXU5vzV/6oFygStfv/PQaUDDI8sm?= =?us-ascii?q?ubGabYHQKH8EdptW/PE5SxO36NPnUW1tJiRB2BJExYhgAZRzA6koI/FgCt2MPt?= =?us-ascii?q?akF56S4N5lTgsBtD1vpoNwXjUmfYvAqoaSk7SJ6ELBdN7QFN+UHVMdeY7u1tAy?= =?us-ascii?q?FU5JqhrBaCKmaDfQRHEXkJWlCYB1DkJrSu/cPP8/WcBuWgN/vBe7OOqfBAWPeS?= =?us-ascii?q?3p+vz5Bm8CiWNsWUJHViFPo72ldZXX9lBcvZlTIPSzYYly3TdcKbogmz+jFvpM?= =?us-ascii?q?Cl7PvrQB7v5ZeIC7ZKL9Vv/Q25jLydN+6WmSl5KSxU1pUSyn/U0LIfxkIdizly?= =?us-ascii?q?dzmxFrQNrTbNQ7jNmq9TFBMUdyJzNNdI7q4l0AlCI8jbhsny1r5igf4/E01FWk?= =?us-ascii?q?D5msG1ecwKJHmwNFDHBUaPKruLPjjLw8b5YaOyV7JQkPlUtx23uTaeDUDvJDKD?= =?us-ascii?q?mCf1Vxq3K+FDkDmbPABCuIG6ahttB3LsTNT6ah28Nd96ljM2zqMpiXPNL24TKy?= =?us-ascii?q?B8c1lKrr2S8yxXnul/F3ZG7np/IumOgzyZ4PXAKpYKrftrBTx5mP9c4Hsg0LZa?= =?us-ascii?q?8SdES+ZvlCvVtN5urEmskvOTxTp/TBpOtjFLiZqRvUp/JKrU7ZZAWXPL/R4X62?= =?us-ascii?q?WfFQgKrcN/CtLzo6BQ1sTPlKXrJTdY6d7V89EQB83OJ8KDN3ogMQHkFyTIAwsA?= =?us-ascii?q?VzKrMnvfh0NFmvGI6nKVtoQ6qoTrmJcWTL9bTkY6FusCCkl+EtwCIY13Xig4kb?= =?us-ascii?q?6Vjc4I42CxrB/NS8VbpJ/HUuieAfL1KDaWlbNEfQcHwavkLYQPMY32w1FtakJk?= =?us-ascii?q?k4vQFErQR8pCojN6Yw8vukpN82V+Tncp1E7/bgOt/XkTGuSunhIvlgt+Zuct9T?= =?us-ascii?q?fr41stIFrFujcwmlErmdr5mTCRbCLxLKCoUI5NCir0uE8xMpXgTglocwK9hk1k?= =?us-ascii?q?Oy3CR75LiLtgb29rghfGuZRTAf5cUbFEYBgIyP6NaPUny0pcpTu8yE9A/evKF5?= =?us-ascii?q?1ilA4wfp6tq3JPwAVjbdEvKazXPqpJwUBahriSsS+wyuAx3AgeKl4R8GOVfS4E?= =?us-ascii?q?olYINr4nJiW2+Oxj8haCmzxdd2gPTPclvvVq9kYhNOua1CLgz6RPKkavOOyDN6?= =?us-ascii?q?mZoXTPldaUQlMs0UMFj09F8qZs3scnaEeUVEcvzKCNFxsTM8rCMgJVb8tI+HjV?= =?us-ascii?q?YymOrf3HwYhpMIWlCuDoUeiOub4Ogk26BwYmAZ4D7t4dEZmsy0zXNsbnLKQYxh?= =?us-ascii?q?Uq6gTrPE+FA+pJeR6RljcIvd2/xodt3YZBPjEdHXl9MSKv67nKvAAqnvuDU8ot?= =?us-ascii?q?YnoBRIQELGg2WMq0mi5CoXtPECS30vgYyAie7z7wvCLQAyfgb9B7fvebeQtsCM?= =?us-ascii?q?2q+TU466W2h0TX/YvDKGHhL9tivMPP6eQBp5ucEfxbUbx9v13bm4lCSHygS3TP?= =?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?A2FHBADo55BY/wHyM5BdGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgyiBWRGOUahOJog6VwEBAQEBAQEBAgECXyiCMxuCHAYBAiQTFCAOAwkBA?= =?us-ascii?q?RcpCAgDAS0VEQ4LBRgEiUANrgc6JgKLPY9YEQGGAQWBKwGHV4cviyMCkX4Cik2?= =?us-ascii?q?GKZJ/WHYeBwIRI0peg14cgX9XhX2CLQEBAQ?= 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:16 +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 v0VJiFTp020019; Tue, 31 Jan 2017 14:44:15 -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 v0VJfh2d015608 for ; Tue, 31 Jan 2017 14:41:43 -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 v0VJfgGE019171 for ; Tue, 31 Jan 2017 14:41:43 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 5/5] checkpolicy: Move common require and declare code into new function Date: Tue, 31 Jan 2017 14:41:58 -0500 Message-Id: <1485891718-18829-6-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485891718-18829-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1485891718-18829-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 Move common code from declare_symbol() and require_symbol() to a new function named create_symbol(). Signed-off-by: James Carter --- checkpolicy/module_compiler.c | 137 +++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 74 deletions(-) diff --git a/checkpolicy/module_compiler.c b/checkpolicy/module_compiler.c index 7b35b56..e128a1b 100644 --- a/checkpolicy/module_compiler.c +++ b/checkpolicy/module_compiler.c @@ -130,12 +130,12 @@ int define_policy(int pass, int module_header_given) return 0; } -/* Given the current parse stack, returns 1 if a declaration would be - * allowed here or 0 if not. For example, declarations are not - * allowed in conditionals, so if there are any conditionals in the +/* Given the current parse stack, returns 1 if a declaration or require would + * be allowed here or 0 if not. For example, declarations and requirements are + * not allowed in conditionals, so if there are any conditionals in the * current scope stack then this would return a 0. */ -static int is_declaration_allowed(void) +static int is_creation_allowed(void) { if (stack_top->type != 1 || stack_top->in_else) { return 0; @@ -143,6 +143,47 @@ static int is_declaration_allowed(void) return 1; } +/* Attempt to declare or require a symbol within the current scope. + * Returns: + * 0: Success - Symbol had not been previously created. + * 1: Success - Symbol had already been created and caller must free datum. + * -1: Failure - Symbol cannot be created here + * -2: Failure - Duplicate declaration or type/attribute mismatch + * -3: Failure - Out of memory or some other error + */ +int create_symbol(uint32_t symbol_type, hashtab_key_t key, hashtab_datum_t datum, + uint32_t * dest_value, uint32_t scope) +{ + avrule_decl_t *decl = stack_top->decl; + int ret; + + if (!is_creation_allowed()) { + return -1; + } + + ret = symtab_insert(policydbp, symbol_type, key, datum, scope, + decl->decl_id, dest_value); + + if (ret == 1 && dest_value) { + symtab_datum_t *s = + hashtab_search(policydbp->symtab[symbol_type].table, + key); + assert(s != NULL); + + if (symbol_type == SYM_LEVELS) { + *dest_value = ((level_datum_t *)s)->level->sens; + } else { + *dest_value = s->value; + } + } else if (ret == -2) { + return -2; + } else if (ret < 0) { + return -3; + } + + return ret; +} + /* Attempt to declare a symbol within the current declaration. If * currently within a non-conditional and in a non-else branch then * insert the symbol, return 0 on success if symbol was undeclared. @@ -157,39 +198,18 @@ int declare_symbol(uint32_t symbol_type, uint32_t * dest_value, uint32_t * datum_value) { avrule_decl_t *decl = stack_top->decl; - int retval; + int ret = create_symbol(symbol_type, key, datum, dest_value, SCOPE_DECL); - /* first check that symbols may be declared here */ - if (!is_declaration_allowed()) { - return -1; + if (ret < 0) { + return ret; } - retval = symtab_insert(policydbp, symbol_type, key, datum, - SCOPE_DECL, decl->decl_id, dest_value); - if (retval == 1 && dest_value) { - symtab_datum_t *s = - (symtab_datum_t *) hashtab_search(policydbp-> - symtab[symbol_type].table, - key); - assert(s != NULL); - - if (symbol_type == SYM_LEVELS) { - *dest_value = ((level_datum_t *)s)->level->sens; - } else { - *dest_value = s->value; - } - } else if (retval == -2) { - return -2; - } else if (retval < 0) { + + if (ebitmap_set_bit(decl->declared.scope + symbol_type, + *datum_value - 1, 1)) { return -3; - } else { /* fall through possible if retval is 0 */ - } - if (datum_value != NULL) { - if (ebitmap_set_bit(decl->declared.scope + symbol_type, - *datum_value - 1, 1)) { - return -3; - } } - return retval; + + return ret; } static int role_implicit_bounds(hashtab_t roles_tab, @@ -668,18 +688,6 @@ role_datum_t *get_local_role(char *id, uint32_t value, unsigned char isattr) return dest_roledatum; } -/* Given the current parse stack, returns 1 if a requirement would be - * allowed here or 0 if not. For example, the ELSE branch may never - * have its own requirements. - */ -static int is_require_allowed(void) -{ - if (stack_top->type == 1 && !stack_top->in_else) { - return 1; - } - return 0; -} - /* Attempt to require a symbol within the current scope. If currently * within an optional (and not its else branch), add the symbol to the * required list. Return 0 on success, 1 if caller needs to free() @@ -693,27 +701,14 @@ int require_symbol(uint32_t symbol_type, uint32_t * dest_value, uint32_t * datum_value) { avrule_decl_t *decl = stack_top->decl; - int retval; + int ret = create_symbol(symbol_type, key, datum, dest_value, SCOPE_REQ); - /* first check that symbols may be required here */ - if (!is_require_allowed()) { - return -1; - } - retval = symtab_insert(policydbp, symbol_type, key, datum, - SCOPE_REQ, decl->decl_id, dest_value); - if (retval == 1) { - symtab_datum_t *s = - (symtab_datum_t *) hashtab_search(policydbp-> - symtab[symbol_type].table, - key); - assert(s != NULL); - - if (symbol_type == SYM_LEVELS) { - *dest_value = ((level_datum_t *)s)->level->sens; - } else { - *dest_value = s->value; + if (ret == 0 || ret == 1) { + if (ebitmap_set_bit(decl->required.scope + symbol_type, + *datum_value - 1, 1)) { + return -3; } - } else if (retval == -2) { + } else if (ret == -2) { /* ignore require statements if that symbol was * previously declared and is in current scope */ int prev_declaration_ok = 0; @@ -747,18 +742,12 @@ int require_symbol(uint32_t symbol_type, * generate an error */ return -2; } - } else if (retval < 0) { - return -3; - } else { /* fall through possible if retval is 0 or 1 */ - } - if (datum_value != NULL) { - if (ebitmap_set_bit(decl->required.scope + symbol_type, - *datum_value - 1, 1)) { - return -3; - } + } else if (ret < 0) { + return ret; } + stack_top->require_given = 1; - return retval; + return ret; } int add_perm_to_class(uint32_t perm_value, uint32_t class_value)