From patchwork Sat Mar 11 20:02:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Iooss X-Patchwork-Id: 9619071 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 42980604A9 for ; Sat, 11 Mar 2017 20:03:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 32EB628649 for ; Sat, 11 Mar 2017 20:03:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2719528735; Sat, 11 Mar 2017 20:03:25 +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 8A6B428649 for ; Sat, 11 Mar 2017 20:03:23 +0000 (UTC) X-Attachment-Exists: TRUE X-IronPort-AV: E=Sophos;i="5.36,148,1486425600"; d="scan'208,223";a="4755752" IronPort-PHdr: =?us-ascii?q?9a23=3AtYNVLBEjHHJ2vd6xwSPJbJ1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ79pM6/bnLW6fgltlLVR4KTs6sC0LuL9f24EjVasN6oizMrSNR0TRgLiM?= =?us-ascii?q?EbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ/iOgVr?= =?us-ascii?q?O+/7BpDdj9it1+C15pbffxhEiCCzbL52LBi6twXcutUZjYd/NKo8zgbCr2dVde?= =?us-ascii?q?hR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG87+MPktR/Y?= =?us-ascii?q?TQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD+/4apnVAPkhS?= =?us-ascii?q?EaPDMi7mrZltJ/g75aoBK5phxw3YjUYJ2ONPFjeq/RZM4WSXZdUspUUSFODJm8?= =?us-ascii?q?b48SBOQfO+hWoZT2q18XoRa/AAWhAv7kxD1ViX/sxaA10eohHwHI0gIjAtwArm?= =?us-ascii?q?jbrM33OasPX+260rLIwC7Gb/9Kwzrw8pTEfgwjrPyKQLl+cdDRyU4qFw7dlluQ?= =?us-ascii?q?qJDqPzSR1usXqGiQ8uluVeWoi248sAF6vz+ixsEtiobVgYIVzkrL9T5jzIY0It?= =?us-ascii?q?24T1V7YcW/HZtVuCybOJF6QsQ4Q2FnoSs3zKANt52jfCUS1ZgqyBHSZ+aHfoSV?= =?us-ascii?q?+B7vSumcLSliiH54YL6zmQq+/Ey6xuD/VsS4ykhGojdFn9XWuX0A1Bre4dWdRP?= =?us-ascii?q?Rn5EeuwzOP2hjW6uFDPE87i7LWK4Ukwr4sjpoTtlnDHjPulEX2kqCWckIk9/C0?= =?us-ascii?q?6+v9eLXmp4KcN5RuhgHiMqUhhsy/AeMiPggIQ2eb4viz2Kfm/U34RLVGlvw2kq?= =?us-ascii?q?/Hv5DGPckXu6G0DgBP3osj9hqzFSmq3dsGkXUdMV5JYBeHgJLoO1HKLvD4F/C/?= =?us-ascii?q?g1G0nTdw2f/GOrzhApPQLnnMibvuZrF961NayAUv099f/IlZCq0BIf3vWk/xs8?= =?us-ascii?q?bUDhkiMwOu2ernB9J91p0GVWKVHqCZKL/SsUOP5u83IemMY4kVtyzhK/gl/fHu?= =?us-ascii?q?i2Q0mV0afamv2JsYcmu4Huh4LEWDenrgmNABEX0FvgAmVuzllEWCUSJPZ3a1R6?= =?us-ascii?q?885DM7B5i6AofAXYCth7qB3CalHpBNaGBGDk2MEHjzeIWZXfcMdD+SLtVmkjwe?= =?us-ascii?q?WrirU5Uh2g22tA/m17pnKfLZ+yMZtZLn0dh6+ffTmAo89TNqEsud1HuNQHtsnm?= =?us-ascii?q?MSQD823r5wrlBhyluZ1qh4mfNYH8RJ5/xVSgc6KYLcz+tiBt/vRg3Be9CJSFC6?= =?us-ascii?q?Qtm7GjwxUMw+w8UPY0d8HNWiiArP3yy0DL8Jj7aLHoA78rrA33jtIMZw02vJ1L?= =?us-ascii?q?U7gFk8WcZAKWqmhqtj+AfJHI7Jj1+Vl6C0eqQAxCTN7nuMzXKSvEFEVw59SaXE?= =?us-ascii?q?XHEYZkvQttn540fCQ6avCbQhKAdBz9SNKrFJat3ok1VJWu3vONLAbGKtg22wHw?= =?us-ascii?q?qHxquQbIr2fGUQxDvSCFAenAAJ/HaGLhMzBj+7rGLEDTxuDkrvY0f2/uZitny3?= =?us-ascii?q?VEg0zxuFb0d5zbq65gYVheCAS/MUxr8Etj0hpC9yHFmh3tLWEMGNpw95fKVdeN?= =?us-ascii?q?89+1lG1XnDuwx6JJygILhohkQCfARvo0PuyxJ3B51Dkccwr3MqyxdyJLmb0Fxb?= =?us-ascii?q?dDOY2o3wNqfQKmno8xClc7TW1U3G0NaK5qcP7+w1pE/+swGzF0ot7W9n3sJP3H?= =?us-ascii?q?SA45XGFg0SUYj+Ukwv7Rh1u6naYjUh54PTzXBsMbe7sjvG29IuH+Ylzgugf8tY?= =?us-ascii?q?MKOBDgD+CcoaB9KhKOYygVimcgoEPPxO9K4zJ86mbPWG2LSsPOZ7gDKrln9H4I?= =?us-ascii?q?Z60kOC8ipzUOjI04wDw/6GwguNTy38g0u5ssDrhYBEYikfH2SlxijgGI5eeLdy?= =?us-ascii?q?fZ0QBGewPcK33M5xh4PoW3JC816jHVwG0tezeRWOd1z9wRFQ1UMPrHy7hCS30j?= =?us-ascii?q?10nCstrqeEwCPOxOHiewYdNW5QWGlul1HsLpaoj9oCRkincxAplAe55Ub936Vb?= =?us-ascii?q?oqV/L23XQUhWZCj7NHttXbWqtrqFecJP74kosSpPWuSmfV+aUqL9owcd0y77AW?= =?us-ascii?q?texSw0dy2tupXjhRB1lGKdLHF1rHrWYsxwwRbf5NrGSv5L2ToKXi54iSPYBlKk?= =?us-ascii?q?Jdmm4c2Ul4vfsuC5T2+hUpxTcTL3zY+Zryu0+2lqARy5n/CuldzqChM60Tf619?= =?us-ascii?q?lsVCXHsA38bpPt16ukLeJtZlNoC0Pk68pmBoF+lZM9hIsX2XgegpWa42AHnnv0?= =?us-ascii?q?MdRVwq/+d2cNSiIQw9LP5wjlwkJjJGqTx43lTnWd3tdhZ96ib2MOwC098sRKBL?= =?us-ascii?q?2O47BehiR1pV64rR7WYfh7hTodzOci6Hgdg+4VogYtyDuSAqwKF0lCISPsjwiI?= =?us-ascii?q?78y5rKhPZ2agb76w1FFlkNCiEr6CpBpcWHDndZc+ByNw6d9/MF3U2n3p9o7kYM?= =?us-ascii?q?XQbc4UthCMjRfAifVaJYkvlvoMmCVnOXjxvXs7xO4nlRZux421vJCbK2Vx+6K0?= =?us-ascii?q?GgZYOSfoZ8MX4TzikadentqW3oy2EJVuADMLUIHvTfKyHzIYre7nOBqWED0gtn?= =?us-ascii?q?ebHqLSHRWC50h7tH/PHJWrNn6NKHkf09piWAGXJFZDjwAMQDU6gpk5GxiyxMP7?= =?us-ascii?q?bUd54i4e5kbipRtK1uJnKQP/X3zCpAezdDg0UoOfIABN7gFF+kfVK9CR4fx9Hy?= =?us-ascii?q?Ff5J2hoxKCJnadZwtWEWEDQlaECEz7Prmy+dnA9PCVBuSkIPvIfbWOruleWuyG?= =?us-ascii?q?xZ2xz4Rm+CyMOd+XPnl4CP072FRMUmxlG8jDnDUPUSMXnTrXb8GHvBe85jF3rs?= =?us-ascii?q?en/fTuQg3v4Y+PBKVOMdVz4R+5m7yON+iOiyZlMjZXyokDxWfWx7QF2l4dlT1u?= =?us-ascii?q?fSG3EbscrS7NUL7QmqhPAh4BcS9yOtFE76cm0QlJPs7aisj42aRkgf4wEVtFUk?= =?us-ascii?q?bhms6xb8wQP269LE/HBFqMNLmeKz3L2d/4br6nSbJKiuVUqxqwuS2AHkD5IjuD?= =?us-ascii?q?kiPlVxe1MeFDlCubJgBRuJmhchZxDmjuVNTmagehP99vlT072rM0hnLQNW4HLT?= =?us-ascii?q?h8fUJNrruK4iNenvp/GnZO7n5/IemDgSaZ4PHSKowKvvtzHiR0i+Va7Wwiy7RL?= =?us-ascii?q?9y5LWvp1mCrOrt5puFymk/eAxSR5XxZUrTZLno2Lt114OarF7plARWrE/BUV4G?= =?us-ascii?q?qLEBsGoN9lCtz0u6BM0djDjrnzJyle/N7O5ssTGczUKMOBMHo8PhvkAyLbDQsf?= =?us-ascii?q?TT62LmHTnUJcn+uO9n2OqZg6rILgmJ0USr9UTFY1DO8VClx5HNweJ5d6Rigknq?= =?us-ascii?q?SFjMES6nqxsgLRSd5Bvp/dSPKdG/rvJyiCjbVeYRsH36/4J5wJNoLnw0xidkV6?= =?us-ascii?q?nIPSFkXLXNBNrSphbgkvrUpQ7ndxVWwz1Fjjag+3538TD/G0lAYsigRieeQt6C?= =?us-ascii?q?vs41AvK1XQqys/ilcxlsv+jDCWaD7+MqGwXYRMBCr1s0g+KZT7QglvYQ21h0xk?= =?us-ascii?q?Oy/OR6hNgLt4aWBrlAjctINTGf5bSK1IegUQxfaWZvo211RTsT+nxUhZ6uvGEp?= =?us-ascii?q?ZtiAwqcZuwoH1awAJjcMQ5JarOK6pV1lJQnL6Bvje01uAtxw8TP0UN8WOWeCEW?= =?us-ascii?q?o0EIM74mJySm/uNy9QyChztDeG8JV/U0uP5q8F0yO/iYxSL6z7FDMlyxN/CYL6?= =?us-ascii?q?6BvWjPi9SHQlcr20MLkElF5qR23t0lc0qPVEAvzaGdFxIXOsreMQtVddZd9GDP?= =?us-ascii?q?fSaStuXA2Yh1MJumFu/2V+COrrobgkK/EQkyHoQM9NkOHp6i0EHAN8foMr4ExQ?= =?us-ascii?q?8r5Av1OFWPFO5Jdw6TkDcbv8G/y4d60pRaJjEbB2VyLDu45rLWpgIxmvWMQs02?= =?us-ascii?q?YnAAUosDLHI2V9WwmzRFsHRYEDm3zuUZxRCf4DDmuCTQDSTzb8F4afiOfxNsEt?= =?us-ascii?q?a2+Dsk86eolVHX74/eJ2DmNdVioNPP7/0Vp4qfAfNOUbZ9q1vcm5VfR3GyTmHP?= =?us-ascii?q?CsC6KIL/a4k2d9P0FG23UkelhDI2UsfxJsyiIrKMgQH1Q4ZbqpOb0Ck/Nc+6FT?= =?us-ascii?q?EfGxBwq/sF5K1ieQ0Je4A7bgLwtwQiK6y/Jx+V0tGpQ2a3NzRWSfhezeKharxY?= =?us-ascii?q?ySosc/W2yHw6TpE11+O361ICRIkWjhHCwvauf5JeXjb3GnxcfQXPuCU4mnN9Oe?= =?us-ascii?q?Y1x+cw3AnHsUIAMzyRcuxmdnBEtckmBVyOOXV2FnY4R1iEgIrA+A6t36od/y1B?= =?us-ascii?q?n9ZUyuBFv3/+vofDbz62Xqykt4nVuTI6bdc6u61xLZDjIsyeuZPCnzzfSZ7Qsh?= =?us-ascii?q?GFUC+6DPdVh9lQISJCT/ZTg20lP9IJuZZZ40orSsg+P6BPCLUrpr2yczVkCS8S?= =?us-ascii?q?wjMHWIyY2TwDguG827zclhiKa5ktKx0Ev49EgtcEXS52fzkSpKm9WIXKj2WEUH?= =?us-ascii?q?QEIB8P7QRQ4wINjpR/cf7j4IfTVpBD1iBWrOxuUivQDJZo7Vv6RnuRgVjiR/Wr?= =?us-ascii?q?i/ap0h5KzPLwztkbXwZyCUdAx+ZXkksoLK94K6wLs4HXrDCHbkL6s3jryOe8I1?= =?us-ascii?q?lR08LUfUXiDIXZrWr8TjEc+XoMSI9VznHfFIgdkwp+aKYvv1VCOJmodFvk6TE4?= =?us-ascii?q?wIpkBKW3Vceux1k5t3kGXDuqH8BHC+54rFLdQCdlbIyzqJX5J5VSRXdd+IeHpF?= =?us-ascii?q?dDl0ViKDW0yYZGK85X/D4DQjxPoTSbvNu9TM1D2MB2D58QItdxoXj9AqZENIKX?= =?us-ascii?q?o3Ioprzl0mXZ9CwksFem2DWzHLe1TuxD82ICGgUpJmGeqkg1AOsv6WrS807CvU?= =?us-ascii?q?5q8OtBAbiPl0pxqi5nHp9SHjZJyWylL1NrQXZcqeVaNaLVf9ZfQ/QpZB+vOh0+?= =?us-ascii?q?FeI90ECT+0F7g2v5aTRotgRG4yDdQxU0VS4Nj7fsnz0ett+oOTsERJJNczohcz?= =?us-ascii?q?3FKgKAlCBQpBZQdUdqW5UDDdZE/7EUxoxU/8XYRUarMyEFUwRoNhgk3vpHiU5D?= =?us-ascii?q?rEKYdDjSDQqyb/nPtAF3cNyQrM6uIvX5+htHioP5v+A58aUDW2OpmRe3TdDYsY?= =?us-ascii?q?D8qsWAtlGSe6fgL+28fXjBQSDQjRC3gLcpFIXK8zTWMAVAMZV6z2QrYYT5A27R?= =?us-ascii?q?IRtGP74bJ1ZcVa1iadVJuPpaaNVgeKkU4qJiGwyIRgv3GIOxqPlJMEzTSS7ZLy?= =?us-ascii?q?Wb/ey1uZjT4qDFSej8esyMwG7KQ6BwPphk8jT0Bqnl0ZRA9Ursxvdi6F51RULA?= =?us-ascii?q?My+fsNTrPhkL69W6dkv+op0pGivbD4x+kHXx2k1NddcbTiOx/ZsEz5NZ7Wr/Rv?= =?us-ascii?q?hj0kjvquFS8adr6ZUv6bBz1ci0PbvSKehdsUJ/GBibGBhl9pU3D2hjXG1RZugR?= =?us-ascii?q?KOnPcqgHkc/urP34GLIN5B2T5eNZdcPNJ1vdlcmnFjGcVRtEkR8ZqT4BMguTze?= =?us-ascii?q?OKm7NvRMa+ouj5x1gt7ESgIR4A0LBt/52L+q6SqO/QdRvRwqAOWrL2ScPrsrQs?= =?us-ascii?q?p0SS6OU4lL4UZGN6fRCoHfMAVs4Z2mfg17olzTwtE8PEG7Lv5uJDW2g+njL6lJ?= =?us-ascii?q?B3B08WFe8MHbqX4YRemX81lPHfNtIMaa1Nh2CPGgS+Hr8F036r5DOdIHN5jRHW?= =?us-ascii?q?zxHwXWSz4Uf0rSBiWyvMyMzjkk5PWbmpHkpSWjepOUtksDOOIAXotcD4uaIu7E?= =?us-ascii?q?0sNWzkrt2NnnO7OLxLB83/OMCcIS4sqVIVlpIxQNKv2ZocGdWgPtgc621+YeHY?= =?us-ascii?q?62OwlC9NuaFHiJTC4suN4PXYAWGgj7GGq7WK3D1YzHw4sEo+6tCmM/HC/dyKQ/?= =?us-ascii?q?Km12YLVSh/oBfBXwSoqrPHs1AUJFaL31nRlIwNJNFZ0mEy1lv66+g7XNIz6AJe?= =?us-ascii?q?G57GZ/MDuT/zPz/0zkyEY94tVyme1DxXHknuEVRjHagx123xsNjOlXfK9F0iXp?= =?us-ascii?q?NweFD/hRxrE4U4Llog50QNzSoHDwcNcgybDbGvBUn+NosLSUkDZgqB3Lime6c4?= =?us-ascii?q?x1d/wrWx6+/PdeZ8HbYCNu5Bjg6Sm1hWApYWsbYbQL98YFJd+rDYqRXlC4j9Rf?= =?us-ascii?q?fmjWAwNfq3Qs9E7c8Zq2Eu4gGlRxqv8Z1D9aoUiIiUdq5YZpjBpMJ870Zi5TMU?= =?us-ascii?q?cyxCnhh+gA2jUeAdouDj7cLXsJy25eayTKwtXfkY9wAoB2RiiJv9mFEjoNDN2O?= =?us-ascii?q?hGVoLYkp///x5RI3GUpInWyR58KfABK4izZrZv620HJzQCJ3IJJdeZcPg84zRj?= =?us-ascii?q?MTrJ5VxCA98MZcsCM8rQnQBZkVHmWLZO+cXFAFCYFp1zd8cy72Xt0jw19oE8Uu?= =?us-ascii?q?n44j+sOZ/f901NP+9EjCh0jNLNvvQVzubSCCkZ5nmZcRt1zjqZy5aTD/bw/OOM?= =?us-ascii?q?yMzbVl4dBi45SZtdKyaC+Q2pQeq1jpbpXhmX6sDtmpI+clyfRnirkKQCqKZMHv?= =?us-ascii?q?ZKij/n0ThGCoD1m/WVvsKw6GtNqFJHFJx87RvbF6hEI5p7OBv4lsi3RkdmHSvw?= =?us-ascii?q?YtvUdgc0tOqQ2OgM//10N1Hiao8DPhIE17X65GJaTgR0Ur75oEqZXeIKadtiSf?= =?us-ascii?q?PEsm5a6YJ6JK8SJ1iRvprqoSlUqFouGg8mdKcwriBGdknJhABVVLj7uLgcigsb?= =?us-ascii?q?Vt51vlRMFny0OGI/4TrHSKtUgbKVCPML6DWSTrYBX19uMixgXxO/wI9udKexnf?= =?us-ascii?q?BbrmNGmTtwr+Qo0zN8WBSxojHjp6UJ2TIk+bG3qi8BuWBbQeqCkyfEE1JDzO4F?= =?us-ascii?q?ja0EEXbt9US8YGUfbIv1+LRnIMPg9Y8943QwfxouZCgGXeW6BCH2kayIHoKOsN?= =?us-ascii?q?VGhB6Oo8XCd7mzIjYONr4l0xLsW2B90hTCnBZv6GYLTSmv7MQ/JImkJMgrySym?= =?us-ascii?q?GWnddFYR7aJEq8TxtVsRQ+swd1xt2mJj0tKIRicVXszAB341jhQ4aWVDaJ9D6x?= =?us-ascii?q?gaF6kugjqSoqZG/gUUYCrJHYWk+4nQm9zI2Xo8Tdpx2GLWp7OFiYku0HJ4mtN4?= =?us-ascii?q?9CiOt2oOd+bASc9jHmDz1ptDyez5f/its/4HR5FgyLm6VP8CL9Ss+Wqx2JVxQE?= =?us-ascii?q?Olwa4eH1WhOu8Z2rjbSzulSXGfWemTcWiDgTg5MkD25RSzIFw4csFKoFEhMufY?= =?us-ascii?q?gJ5TiRHhW6tuRiqMvV/b0HAjMeQCegI5vIenfAILQ/AVZ+iYPuUu2/o+CF0Nb3?= =?us-ascii?q?DVByd2DfG5sUK1lohhJ3pg+Vn6Yfjq8g3+MtuSGhkFEZbdrp51+Py6WnyONGRl?= =?us-ascii?q?zB1zIEl07fnQG042tu9GfJabhcLQiMhj0e4Za/dtNjUwusISmoJm8oSUzMaKfg?= =?us-ascii?q?3SzpnsIdHZuP6YDOPDz04yYGFVTqIZYR/p54U9JtM5XrzTHbhavRQbHqU6QoYu?= =?us-ascii?q?N2T29KFyMgxzdBTdZLKqjcn2vuiLfIdbp2fK7lIsKyfRowYMxeKyTQxndJ2qnH?= =?us-ascii?q?HyIJcsRjJdsd1iFAZpEJFIG8MaoAqtG4SUl72ji9+t50N6vPcHsbL3CvDOztu5?= =?us-ascii?q?xYtwX59e5UyFJzvRAa5rgkN+juusnvjAyJ7xCdj5edMFUuh7TXTJarjcHoWwMj?= =?us-ascii?q?iOIN7ze1Za876A17J0ShuRaz79X6qHrC2rKu5p4EQ6yox9eerc0iYt77XF19fo?= =?us-ascii?q?YGFbvCijp2aTNJRD9FzKGfDeXxVMRPuL6GZlB6wXYpfq++oVNNwiwcSc4xNt4z?= =?us-ascii?q?hY18uFOaehpFfW2k1nbZLbMFfp2yEhVIkNJBSwL1AhgXfdqnvHGnRcMsmkJtVx?= =?us-ascii?q?gNaPEBPi+VN9mWczaW5dAmDoX8ueOXAH28KiYw2H7AZLD9cFn+6qdk80r6mySe?= =?us-ascii?q?hzOpVZguWnr7QHnsxvKyHIXsRaODvQLLBuNDpLEurPvEQoYgIDs7UtQYc6e5yO?= =?us-ascii?q?IEIBMEedxiL+ygTM0VH0d9OyzqaGPj4W/W9cwrLGzzdMvQ+5tuidgsL4TbDZY4?= =?us-ascii?q?v6XPnIMCoqTjuaXyg9EV61+Ve4vPoJpP+YLn0DrVAUYyKSDgkTq7txrdjRCG/c?= =?us-ascii?q?h+ljfJwMhPCHVCH8Uip4lLA9BixTr0CDX+IDFRXKb3/mmGdcuhatJvxL/X3+dL?= =?us-ascii?q?CY26xVW/AWAotLb/2ZTNvYeexEKzcuiDoZJP62f8fAoLYhzlLIUWwZHrHH9FKE?= =?us-ascii?q?V0GWWP2cyCzvXYgOoYg0vjAn+snRni9qCajIOaiQpyK2+I6ikCmYofHeVnUqY0?= =?us-ascii?q?EtguICBW6BwANaKGEFENEYo0ftTbSFZ0lS1XIlk+Vu2wUDeA5rSH1hzmVWnOqh?= =?us-ascii?q?Gs1eUVMUl22uQPgaY112Dz495lGK7RPoYdwBuMHTQGle+qEKSYUDMPki8JPXN7?= =?us-ascii?q?cIwPY1wDJmpzQ3syeaD1NbigKI6K/QE7xhyb1M4mk45e15UV+VTzPZbGfH1tnu?= =?us-ascii?q?N8Ua5y5rrGus/MPOou13fO9YuIpwGktQKT5nLdDauzZaWCf73xXk7DihGzHLBj?= =?us-ascii?q?MS5zICPmQkceFu1KcvthfDcdLI8gWRsKU6s2OuVRbNDaC7js8YQvr13Bm1PHEY?= =?us-ascii?q?OQ6gEIp7/7MUzIgf?= X-IPAS-Result: =?us-ascii?q?A2ECBAARV8RY/wHyM5BdGQEBAQEBAQEBAQEBBwEBAQEBFAE?= =?us-ascii?q?BAQEBAQEBAQEBBwEBAQEBgyZhgQoHg1mLAZBcl0ImhgMCgjoHVwEBAQEBAQEBA?= =?us-ascii?q?gECaCiCMyIBgj8BAQEBAwECIAQnIAsDAwkBAQoLAgEDAwECASYEAgICAQEeDwM?= =?us-ascii?q?BBQELCQgGCAsFGASJXwWlFD+MA4FsOiYCijIBAQEBAQUBAQEBARQPhk6Eb4QmE?= =?us-ascii?q?QE8gmaCXwEEnEGCA4F1hiaIG4F7iG4MhjCRexQfgRVYfAgjFixJFwWEOx0ZgUt?= =?us-ascii?q?0h0uCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 11 Mar 2017 20:03:21 +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 v2BK2XJG027576; Sat, 11 Mar 2017 15:02:42 -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 v2BK2Vup010850 for ; Sat, 11 Mar 2017 15:02:31 -0500 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 v2BK2S5Y027566; Sat, 11 Mar 2017 15:02:29 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1ByAQARV8RYhyIeaIFdGgEBAQECAQEBAQgBAQEBhDKBCgeDWZtdkyyKPwKCOgdXAQIBAQEBAQITAQEBCgsJCCiFRAEBAgMjBFIQCwsDAwMBAgEqAgICIBIBBQEUCAYTigAFpRQ/jAOBbDqKWgEBAQcCARYPhk6Eb4QmEQE8gmaCXwEEnEGCA4F1hiaIG4F7iHqGMJF7FB+BFYFTCCMWLGAFhDsdGYFLdIdLgi4BAQE X-IPAS-Result: A1ByAQARV8RYhyIeaIFdGgEBAQECAQEBAQgBAQEBhDKBCgeDWZtdkyyKPwKCOgdXAQIBAQEBAQITAQEBCgsJCCiFRAEBAgMjBFIQCwsDAwMBAgEqAgICIBIBBQEUCAYTigAFpRQ/jAOBbDqKWgEBAQcCARYPhk6Eb4QmEQE8gmaCXwEEnEGCA4F1hiaIG4F7iHqGMJF7FB+BFYFTCCMWLGAFhDsdGYFLdIdLgi4BAQE X-IronPort-AV: E=Sophos; i="5.36,148,1486443600"; d="scan'208,223"; a="5975366" Received: from emsm-gh1-uea10.corp.nsa.gov (HELO emsm-gh1-uea10.nsa.gov) ([10.208.41.36]) by goalie.tycho.ncsc.mil with ESMTP; 11 Mar 2017 15:02:26 -0500 X-Attachment-Exists: TRUE IronPort-PHdr: =?us-ascii?q?9a23=3ApbHusR+Zjzez4v9uRHKM819IXTAuvvDOBiVQ1KB2?= =?us-ascii?q?0+0cTK2v8tzYMVDF4r011RmSDNidtqoP0rCH+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZPebgFIiTanYb5+MBq6oRjPusQSnIBvNrs/xhzVr3VSZu?= =?us-ascii?q?9Y33loJVWdnxb94se/4ptu+DlOtvwi6sBNT7z0c7w3QrJEAjsmNXs15NDwuhnY?= =?us-ascii?q?UQSP/HocXX4InRdOHgPI8Qv1Xpb1siv9q+p9xCyXNtD4QLwoRTiv6bpgRQT2gy?= =?us-ascii?q?kbKTE27GDXitRxjK1FphKhuwd/yJPQbI2MKfZyYr/RcdYcSGFcXMheSjZBD5u+?= =?us-ascii?q?YIsBD+QPM+VWoZTjqVQStha+ABWgCfn1xzNUmnP736s32PkhHwHc2wwgGsoDvm?= =?us-ascii?q?zVrNrpM6cSVfq6zLLVxjvAaPNW3iz96JPVeR0mp/GMXK5/cc3VyUY1DAPJlFSQ?= =?us-ascii?q?qYviPzOOzeQAqG2b4uVvVO61jG4nsQ5xryGpy8wxiYfJnpoYxk3a+Sh92oo5OM?= =?us-ascii?q?G0RUFhbdOqDJdcrS+XOoRuTs88X21lvDw2x74GtJKhYiQG1ZQqywTQZvGEdYWD?= =?us-ascii?q?/wjtW/yLIThigXJoYLK/iAi28Uin0uD8U8a13EtQoipdldnMsnAM1wDN5cebSv?= =?us-ascii?q?t9+Eah2S+S1w/N8O1EJlo0laXDJ54gxL4/iIYTvFzeEiPonEj6lrKaelkr9+Sy?= =?us-ascii?q?5enrfq/qq5GTOoNsjwHxKKUumsixAeQiNQgOWnCW9/mg2rP+4UH0WK5FguY0nK?= =?us-ascii?q?XCqJ3WO8oUq7a8AwJa3Ycv8RG/Dy2p0NkAm3kHLU5KeBWDj4fzIFHCOvH4DfC4?= =?us-ascii?q?g1S3izdm3OvJPrr8ApXLMnfMjqzhcax460NTxws/19df54hbCr0ZOvL8RlfxtM?= =?us-ascii?q?DEDh8+KwG0wejmB8ln2YMERWKDHLSUML/SsFCU5uIvJPOAZIkOuDnnMfQl6Pnu?= =?us-ascii?q?jWEhk18HYaapxYcXaGy/Hvl+OEWWf37sgtYHEWcXsQszV/DqiV2eXj5TYHa+Ra?= =?us-ascii?q?Q85iohB468AofDQZ6t0/S923KZF5hbfShtA0qQHG2gI4ebUP4WdHi6Pt5qkjtC?= =?us-ascii?q?U6OoDYAmy0f9mhX9zu9BL+HT/iQD/bPk08Nur7nVlBo18TVvScWa1HqWZ2Qoji?= =?us-ascii?q?UPXTBgj/M3mlB01lrWifswuPdfD9EGoqoRCgo=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0EiAQARV8RYhyIeaIFdGgEBAQECAQEBA?= =?us-ascii?q?QgBAQEBFQEBAQECAQEBAQgBAQEBhAeBCgeDWZtdkyyKPwKCOgdXAQEBAQEBAQE?= =?us-ascii?q?CAQIQAQEBCgsJCCgvgjMiAYI/AQECAyMEUhALCwMDAwECASoCAgIgEgEFARQIB?= =?us-ascii?q?hOKAAWlFD+MA4FsOopaAQEBBwIBFg+GToRvhCYRATyCZoJfAQScQYIDgXWGJog?= =?us-ascii?q?bgXuIeoYwkXsUH4EVgVQIIxYsYAWEOx0ZgUt0h0uCLgEBAQ?= X-IPAS-Result: =?us-ascii?q?A0EiAQARV8RYhyIeaIFdGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBhAeBCgeDWZtdkyyKPwKCOgdXAQEBAQEBAQECAQIQAQEBCgsJC?= =?us-ascii?q?CgvgjMiAYI/AQECAyMEUhALCwMDAwECASoCAgIgEgEFARQIBhOKAAWlFD+MA4F?= =?us-ascii?q?sOopaAQEBBwIBFg+GToRvhCYRATyCZoJfAQScQYIDgXWGJogbgXuIeoYwkXsUH?= =?us-ascii?q?4EVgVQIIxYsYAWEOx0ZgUt0h0uCLgEBAQ?= X-IronPort-AV: E=Sophos; i="5.36,148,1486425600"; d="scan'208,223"; a="4755742" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mx1.polytechnique.org ([129.104.30.34]) by emsm-gh1-uea10.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Mar 2017 20:02:25 +0000 Received: from mail-lf0-f48.google.com (mail-lf0-f48.google.com [209.85.215.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id A30F65647D9; Sat, 11 Mar 2017 21:02:23 +0100 (CET) Received: by mail-lf0-f48.google.com with SMTP id y193so51609917lfd.3; Sat, 11 Mar 2017 12:02:23 -0800 (PST) X-Gm-Message-State: AMke39kHXZcY8hStDLqtTrxiVHvn3p/mW8NZZ2cB07W+MJqpWpFjtP0UScUqfiCtVbquoewidUYBZKyU6lHluA== X-Received: by 10.25.80.86 with SMTP id z22mr5804603lfj.157.1489262542849; Sat, 11 Mar 2017 12:02:22 -0800 (PST) MIME-Version: 1.0 Received: by 10.25.233.199 with HTTP; Sat, 11 Mar 2017 12:02:21 -0800 (PST) In-Reply-To: <1489175376-27336-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1489175376-27336-1-git-send-email-jwcart2@tycho.nsa.gov> From: Nicolas Iooss Date: Sat, 11 Mar 2017 21:02:21 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 0/3] libsepol and checkpolicy: Output CIL or policy.conf from kernel policy To: James Carter X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Sat Mar 11 21:02:23 2017 +0100 (CET)) X-Org-Mail: nicolas.iooss.2010@polytechnique.org 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: Cc: selinux Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP On Fri, Mar 10, 2017 at 8:49 PM, James Carter wrote: > It would sometimes be helpful for debugging or verification purposes to be able to convert > a binary policy to a human-readable form. > > This patchset adds libsepol functions that take a kernel policydb in and outputs either > a CIL or policy.conf text. > > Checkpolicy is modified to generate CIL text from a binary policy if using the "-C" option > and to add the "-F" option to generate policy.conf text from a binary policy. > > Where possible rules are sorted in alphabetical or numerical order to aid in debugging. > > James Carter (3): > libsepol: Add ability to convert binary policy to CIL > libsepol: Add ability to convert binary policy to policy.conf file > checkpolicy: Add options to convert binary policy to CIL or a > policy.conf Hello, I agree such features are useful when analyzing policies. I have tested the patches and compiled with some warnings flags (I have not done a "real" code review). Here are some comments: - First, the documentation (at least checkpolicy manpage) needs to be updated with the new options. Also I spent some time trying to understand what I was doing wrong with options -C and -F until I read the third patch and understood that "-b" needs to be used as well. - Then, when using "checkpolicy -bF" on my policy, I got blocks such as: if ((git_cgi_enable_homedirs && use_samba_home_dirs)) { allow httpd_git_script_t cifs_t:dir { getattr search open }; allow httpd_git_script_t cifs_t:dir { ioctl read getattr lock search open }; allow httpd_git_script_t cifs_t:dir { ioctl read getattr lock search open }; allow httpd_git_script_t cifs_t:file { ioctl read getattr lock open }; allow httpd_git_script_t cifs_t:filesystem { getattr }; } else { dontaudit httpd_git_script_t cifs_t:file { ioctl read getattr lock open }; } The blocks have indentation issues (the first line of the if statement has too much spaces and a "\n" is missing at the beginning of the else block. Moreover the permissions are not sorted in alphabetical order but this may be included in the "Where possible" part of your message. - Third, the first patch introduces functions with printf-like arguments and defines them with __attribute__((format(printf...))) in the .c file. This is fine for the static functions but the other ones need to have attributes in kernel_to_common.h instead (this enables the compiler to check the format strings at build time when compiling other files). - Finally when compiling with -Wwrite-strings, gcc reports some issues with literal strings assigned to non-const char* variables. I have quickly written a short patch to make some variables const char* and checkpolicy seems to work fine with it. The patch is attached to this email if you want to consider it. Cheers, Nicolas From c25a08efc3f6596c0f3bfdcb2e36abca68b5b3e8 Mon Sep 17 00:00:00 2001 From: Nicolas Iooss Date: Sat, 11 Mar 2017 10:26:45 +0100 Subject: [PATCH 1/1] fix -Wwrite-string warnings --- libsepol/src/kernel_to_cil.c | 11 ++++++----- libsepol/src/kernel_to_conf.c | 12 +++++++----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libsepol/src/kernel_to_cil.c b/libsepol/src/kernel_to_cil.c index 143f7faa4a07..0854426fae33 100644 --- a/libsepol/src/kernel_to_cil.c +++ b/libsepol/src/kernel_to_cil.c @@ -266,7 +266,7 @@ static int class_constraint_rules_to_strs(struct policydb *pdb, char *classkey, char *expr = NULL; int is_mls; char *perms; - char *format_str; + const char *format_str; struct strs *strs; for (curr = constraint_rules; curr != NULL; curr = curr->next) { @@ -307,7 +307,7 @@ static int class_validatetrans_rules_to_strs(struct policydb *pdb, char *classke struct constraint_node *curr; char *expr = NULL; int is_mls; - char *format_str; + const char *format_str; struct strs *strs; int rc = 0; @@ -994,7 +994,8 @@ static char *cats_ebitmap_to_str(struct ebitmap *cats, char **val_to_name) { struct ebitmap_node *node; uint32_t i, start, range; - char *catsbuf, *p, *fmt; + char *catsbuf, *p; + const char *fmt; int len, remaining; remaining = (int)cats_ebitmap_len(cats, val_to_name); @@ -1605,10 +1606,10 @@ static char *xperms_to_str(avtab_extended_perms_t *xperms) static char *avtab_node_to_str(struct policydb *pdb, avtab_key_t *key, avtab_datum_t *datum) { - const char *flavor; + const char *flavor, *tgt; uint32_t data = datum->data; type_datum_t *type; - char *src, *tgt, *class, *perms, *new; + char *src, *class, *perms, *new; char *rule = NULL; switch (0xFFF & key->specified) { diff --git a/libsepol/src/kernel_to_conf.c b/libsepol/src/kernel_to_conf.c index 5e5a8647b426..898fd1baf38f 100644 --- a/libsepol/src/kernel_to_conf.c +++ b/libsepol/src/kernel_to_conf.c @@ -260,7 +260,8 @@ static int class_constraint_rules_to_strs(struct policydb *pdb, char *classkey, int rc = 0; struct constraint_node *curr; int is_mls; - char *format_str, *flavor, *perms, *expr; + const char *format_str, *flavor; + char *perms, *expr; struct strs *strs; for (curr = constraint_rules; curr != NULL; curr = curr->next) { @@ -305,7 +306,8 @@ static int class_validatetrans_rules_to_strs(struct policydb *pdb, char *classke { struct constraint_node *curr; int is_mls; - char *flavor, *expr; + const char *flavor; + char *expr; struct strs *strs; int rc = 0; @@ -969,7 +971,8 @@ static char *cats_ebitmap_to_str(struct ebitmap *cats, char **val_to_name) { struct ebitmap_node *node; uint32_t i, start, range, first; - char *catsbuf, *p, *fmt; + char *catsbuf, *p; + const char *fmt; char sep; int len, remaining; @@ -1573,10 +1576,9 @@ exit: static char *avtab_node_to_str(struct policydb *pdb, avtab_key_t *key, avtab_datum_t *datum) { - const char *flavor; + const char *flavor, *src, *tgt, *class, *perms, *new; uint32_t data = datum->data; type_datum_t *type; - char *src, *tgt, *class, *perms, *new; char *rule = NULL; switch (0xFFF & key->specified) { -- 2.11.1