From patchwork Mon Mar 20 15:18: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: 9634395 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 2F5806020B for ; Mon, 20 Mar 2017 15:29:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D93727F9F for ; Mon, 20 Mar 2017 15:29:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1112D280FC; Mon, 20 Mar 2017 15:29:07 +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 (smtp.nsa.gov [8.44.101.9]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B760427F9F for ; Mon, 20 Mar 2017 15:29:05 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.36,194,1486425600"; d="scan'208";a="4118465" IronPort-PHdr: =?us-ascii?q?9a23=3AUOuAjhfsxrtGcWldsgZlTJR3lGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcq4YBeN2/xhgRfzUJnB7Loc0qyN4v2mBzNLvsjJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBW7oR/Qu8QUjodvKKc8wQbVr3VVfO?= =?us-ascii?q?hb2XlmLk+JkRbm4cew8p9j8yBOtP8k6sVNT6b0cbkmQLJBFDgpPHw768PttRnY?= =?us-ascii?q?UAuA/WAcXXkMkhpJGAfK8hf3VYrsvyTgt+p93C6aPdDqTb0xRD+v4btnRAPuhS?= =?us-ascii?q?waOTE56mXXgdFugqxdrhyquhhzz5fKbI2JMfZzeL7Wc9EHSmpbRstfVzJPDJ6y?= =?us-ascii?q?YYUMCOQOP+hYr5H/qlcToxaxChWjCuzxxT9TnXL2wa833v49HQzcwAAsAdQDu2?= =?us-ascii?q?nUotXvM6cSVPi4wq3SwjXGcfxWwir25ZbSfRA7vfGDQ6hwetfWxEktGQLKkk+f?= =?us-ascii?q?qZb5Pz+LzekNr2ia4PZgVeKokWInrRpxrSK1yscjjYnJmJsYx1bZ/it62IY4Pc?= =?us-ascii?q?C0RUF0bNK+EJZcqjuWO5V5T888WW1kpSA3waAct5GhZigF0pEnygbaa/yAboeH?= =?us-ascii?q?/AruVP2UITdknHJlf6+/hwqq/Uig1OL8Us603U5WriVfiNnMt20N1wfJ5sibSv?= =?us-ascii?q?py4keh2TGV2wDV9u5EOlw7mbDeK54gxr48jpsTsULdES/qgEj6kaCbe0o+9uWo?= =?us-ascii?q?9ujreKvqq5CCO4Nulw3yKqEulda+AeQ8PAgORW+b+eGk2b3440L5RLRKjvsrkq?= =?us-ascii?q?jWqZzVPsMbprO/AwBJzIkj8A2yDyum0dsEnXkHK0hJeBScj4fzIV3OL/f4Demn?= =?us-ascii?q?j1S2jDhr3+zGPqHmApjVLHjDl7Hhcqxh605c0gUzy8tS55BTCrEHJfL8QFTxtM?= =?us-ascii?q?DGAR8jKAy42eHnCM9y1okGQ2KAHreZML/OsV+P/u8vIeuMa5UJtzb+MPgl4Pju?= =?us-ascii?q?jX4nmVIGc6mp2YYXaX+jEfR7JUWZfWfsjs0GEWcQsQo0VPbqh0GaUT5Pe3ayWL?= =?us-ascii?q?ox5z86CIKiCIfMWJqtjaeP3CilA5JWYXpGBUqUEXfycIWEWekDZz6OIsN7lTwE?= =?us-ascii?q?T7ehQZc71R6yrA/616ZnLu3M9yIFqZ3j0d915+vPlR0v7jF0EdqS03uMT2B1mW?= =?us-ascii?q?MIQSU63KZhrkxh0l2Dy7R3g+REFdxP4PNESho1NYLGwOxgEN39RgXBftKVR1m8?= =?us-ascii?q?WdWmHSs9TtQvzN8Se0x9Acmtjgjf3yq2BL8Yj7yKBZ0z8qLaxHXxIsJ9x2/H1K?= =?us-ascii?q?knlVUmRNFANXelhq5+6QjcGZTFk0OHmKa2ba4cxjLC9H+fzWqSu0FVSBB/Ub3f?= =?us-ascii?q?UnAFZ0vWts/05lvYQL+0CLQnKRNBycqYJaRWdNLll1JGRO3sON7GeWK+h3+wBQ?= =?us-ascii?q?qUxrOLdIfqdX8d0z/bCEcYkgAT5m2LNQ0mBiegum7eFzJvFUn1b0Pr6+l+p2ux?= =?us-ascii?q?TlUowAGSc01hy7219wYWhfOGSPMT2a8EtTwiqzpuH1a92M/WB8CHpwp7c6VWec?= =?us-ascii?q?k970tf1WLFqwx9OYStILp/iV4EcgR4oVnu2g5tBYpclMgmtnQqzBB9KaiAylNO?= =?us-ascii?q?ayuY3YzsOr3QMmTy/A6ga6rS2lHZy9uW/roP6Og/q1Xmpg6lDE0i829o09NNyX?= =?us-ascii?q?uT+o3KDBYOUZL2Sks37BZ6p6vdYikm+4PZzmZsMa+zsj7M3tImHu0lxgymf9hB?= =?us-ascii?q?LKOODBXyHNECB8iyNOwqnECkbxweM+BW6K47Idmmd+Cd1a61IulghimpjXlC4I?= =?us-ascii?q?xn1UKM7SV8QPbS35kZ2/GYwheHVzDkgVe9r8/4hIFEaisWHmek1SfkA4tRabFo?= =?us-ascii?q?coYQFWeiOcu3yctih5T1QX5X6EajB08a2M+uYReSaV393QlU1UsJunyqgjG3wC?= =?us-ascii?q?JukzEutKaf2zbOw+v6fhodJmFLXHVijUvrIYWskdAaXVSnbxQulBu//0r126hb?= =?us-ascii?q?pKN5L2ncWkpIeyn2L2d4XauqsbqOeclP6IknsS9PSuSzfUiaSqLhoxsdyy7jG2?= =?us-ascii?q?pexCsndz2zoZX2gRh6iGObLHZuo3vUYtpwxQ/e5NzaRP5ewiEGSDN+iTbJGli2?= =?us-ascii?q?J8Op8smMl5ffruC+UHqsVodUcSnvyYOPqjG76nFtARyxhP2zgcDnHhQh0SPh0N?= =?us-ascii?q?lqTyrIpg7mYob3z6S6Lf5nfk5wCV/k8cV6B4V+npEqi50KwncagZGV/WYAkWf1?= =?us-ascii?q?Kthb3L7ybHwKRTEX2dLV5hbq2FF7JHKT2435TmmdwtdmZ9SiYWMZxCQ979tRBa?= =?us-ascii?q?eX8rNEmzB1olymogLNe/R9mS0dyfQ24n4An+4JoBYtzjmaAr0KA0lYOzHjmg+W?= =?us-ascii?q?79C4sapXZHyjcb6u20pihdqhFq2NohlAWHblfZcvBTdw4d9iMFLIy3D89oDkeM?= =?us-ascii?q?XQbN4KuB2biRHAg/JSKJIrmfoAnTBnNn7lvX051+47igRj3Yuns4eaMGht86e5?= =?us-ascii?q?AxFCOj3zecwT5innjbxCkcaOw4CvApJhFy0TXJTyUPKoFCwdtez9OAaIDD0ztG?= =?us-ascii?q?2bFKHCHQ+E9khmtWnPH4qwN3GQOXkZ18ltSweTJExYmgAUUys1koQ/Fg+02Mzr?= =?us-ascii?q?aF156SwJ5l7kthtMzfplNxflXWfZuAeobTI0RYORLBVI8w5C4F3VPtaG7uJpGC?= =?us-ascii?q?FY/IOuoxCRKmCBYARIF24JUFSeB1//Jrmu+cXA8++AC+q7NfTOZbGOpvJCV/eU?= =?us-ascii?q?352gyJBr/zCSOcWTJXltE+c02lJdUnxjHcTWhSkPQTQNly3Rd86buAu8+ipvo8?= =?us-ascii?q?Cl6vjqVhjj5Y6VBLtWNtVu+wu7jr2fOO6Vnip5LixY1pwUz3/S1LcfxEISiz1p?= =?us-ascii?q?dzS1H7QArzDCQ7/LmqBNCR4bdyRzNNBT4q0mwgZNPNTXitTv1r53lvQ1EUtKVU?= =?us-ascii?q?T9msG1YswHO2e9NEndC0aTLLSLPjPLw8DtYaOnVb1QguRUtxuqtjadD0DjPy6M?= =?us-ascii?q?lz3zWxCoK+FMgzmRPAZCt4GlbhZtFW/jQcr+ahKlK9B4kzs2wbwohnPNLmMcMC?= =?us-ascii?q?ZzfF1TobGK6iNYmPp/EXRb7nV5NemEhzqZ7+7AJ5kNqvRnBSB0l+NB4HQm0LtZ?= =?us-ascii?q?9jpES+JplyfItd5hvVWmkuiJyjp6XxtDsSpEhYKRvUV/IqXV7JdBVmzY/BIW6m?= =?us-ascii?q?WQDQ4Gp9x/Ct3go6pQ0MTAlLrvKDde9NLZ5dAcCNLKKM2dP3ouLwHpFSXPDAQf?= =?us-ascii?q?Uz6kL27fiFJGkP2I8H2asIQ6oID2mJUSUr9bSEA1FvQCB0t+HdwCL5B3XjU/nL?= =?us-ascii?q?GGksEH/nu+owPXRMlAuZDHTP2SC+31KDmFlblEewcIwbTgIIsJOY30wVJiZUdh?= =?us-ascii?q?kYTNA0rfQ9ZNoih7YQ81pEVC639+T2Ip10LicAOt72cZFeSokR4ulgt+feMt+S?= =?us-ascii?q?/w41cwI1rGvjEwkE4wmNr7hzCeayTxLKCuUoFVECf7q08xMpbnTAlvdg2ygVZo?= =?us-ascii?q?NDHaSLJNl7Fgb3xkiBfAuZtTHv5RVa5EYR8Uxf6JfPgo1FNcqiupxUBZ+evFFZ?= =?us-ascii?q?tilAwvcZGytX5A3RxsbMItL6zKOKVJ1kRQhr6JviKw0OA+3hURJ0IW/WORfy4I?= =?us-ascii?q?o1AIOaMgJyqz/exs6BaOmz1dd2gQT/AquO5l9lshO+ScyCLty6RDJV6qN+OBNa?= =?us-ascii?q?yZoXTPlc6TT1wr10MIjVRK/b940cc7aUqbSUAuwKGXFxsXKcrIMRtVYNZK9HjP?= =?us-ascii?q?YSaOtv3Azo9yP4W7EODnUPGBtKIVgk+/BgkmAZ4M7sMbEpmrykHYIt/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/W38UkVSZEJlBHfxeysZ49CUSjzAXFddALPpTIlmGR7MO?= =?us-ascii?q?Y93Ps/ygvSsVYAKzCLaPBpaGtcstEgBFOSJHJ2CnY4R16clofM/w+s3rAI8CRG?= =?us-ascii?q?hdpU1/NKsGTmtJ/FfD2sQLCrqYnSsyc4d9cmp6xxPpD9LcSesZPfnjrfTJ7Wsg?= =?us-ascii?q?KfSyO1DPtalcJWIC5BTvlIhHspOcoYtopd8UAxTNsxJ6RTCKkwobCncSFrAjAU?= =?us-ascii?q?zSICTYyPwSICjfmm27vBjBiQapQjPAYDsJVYjdsXSzR2bT8GpK+/S4XWkHeJSm?= =?us-ascii?q?cWIAcS6QRM4BwPloprc+/4/oXHV55MxCRQo/5uVSvLDJZo/UPhSm6KmVj4VOmh?= =?us-ascii?q?k+ux0AJIyvLs08UUWB54CUhZ3OZYjlImJqxtJaQMuYDHqSOHdUT/vG3x0uSmP0?= =?us-ascii?q?VRxdfSd1LmEIrPrXD8XTEE+X0IWY9Pz2nSFY4InApjb6Ykv05BIJy8eknk+Twr?= =?us-ascii?q?2YBpH7i+VcCkw1YlrHkGRye2E9pPEe5mqlfXVCdjY5+1tJXvI49STXNI+J2Bt1?= =?us-ascii?q?dZl11gMiCjxZVAK8FN4zsMXDlVrjWep9aySdNM1tFoAJMWJdd/oXj9ErteOJeN?= =?us-ascii?q?u302pqDvynjB9j8mqle62TOzF7W7T+9C/m0eGwQpJ3iFpUU1Cesj7HvS+EjXsl?= =?us-ascii?q?9o5+dbGqSPjUJprTZ8GJBOGihG1XS7IFR2UnZGr/9aKaTOfsxbW/k9exmvOxkk?= =?us-ascii?q?Gv4n20yG5kZ0nHjjbyx1rAta9DjXXxMoWikNnrfthToep9moOT8AUZ1IaykhYj?= =?us-ascii?q?zEKwKclyFXugpfa0F0VJAYBNZF568U3ZFO8srEV0msNTkPXAZ+OQIgzfpfiUlD?= =?us-ascii?q?vV2EeSDaCAqlburPvgFyfciKtsKpKur2/BtfgIP9rO8477kDR2GhmQC1QdDRtZ?= =?us-ascii?q?X8uceOtkSTb6r3LvOzYWfZTDfSiRC/m60kA4PN/yjJPwpRM4N6xmY8YZj9FW7L?= =?us-ascii?q?OgxLJ6AcJ0VFTq11dMtJovtEaM9+ZKYG57JiCgiBRhzxBIyltONGIUrLRTTCMy?= =?us-ascii?q?WB9fSyrpnd7bPBVeTtZNGAynjcTq1rOZd67CX0FK3x0Y9C4Eb23Oli9l9iQ1jc?= =?us-ascii?q?Ly+BtMjhJh8M5MS6bEvtoIAmHTPMD5dsi3ftwkZAd9QJTCG07JsYz45W52jqRe?= =?us-ascii?q?J+zEfzrPVY96N45okv/7Bp1cC0KL/KKfRBrU9oGAWbBhlx+5U2B2h/WnpRbfMP?= =?us-ascii?q?J/fXYaQZl9rhq+TtG6wQ8h2V9PRTacHbKEHZhsm/FjacRARYnAcbtzEVMBaT2u?= =?us-ascii?q?WYm69wVcalv/L22lws41i5Kh4J0qxt6Z2D+qqSq+/ddwHRwqQcWqj2WsPzqawh?= =?us-ascii?q?tF6U5fI+j7MBZ2p1bBe9HOgaTM4dyX/qzbo2wiI0D8PDA7Xg9eZBV30jhDLgnI?= =?us-ascii?q?t9H1EMFfMKBreL+JlenmMkm+zYKtIWc7pNmmCUFRK+Fb8C03Gr4TONIGZ5mhHO?= =?us-ascii?q?zw3wQWSr4V/0tyB4RyXMz83kkkVISLa6HltSUDCvOU9jtzODJgzou8Trua4t9k?= =?us-ascii?q?E5LnTktM6RlGumIL5XGcn/KcedISkyoVIblpwxRtqh2YABA9W9O8sR8GtjbvTC?= =?us-ascii?q?92OrjjVBrLldi4rZ+MGV9e3dHWO8gK2Ct7WN2DdYx2A+vVE+9t+gMfXO6MeRQ/?= =?us-ascii?q?iy1mYRSCB/uxDaXxOur7zWoF8VNVaM0EfRl4wAJstZ0mUg1kH6+OgjR8o++xlE?= =?us-ascii?q?GYbEefwCvizzOTvzwVuEeNI4Siie3CVRHlLpEFl3ArIw2GTus8LVjX3Q4UEnRp?= =?us-ascii?q?Fsd0z7ghx6F4E4KVko6FUX2ScDHxYCZg2cDLGyH0vlNZEEVU8BaRuZwLe6Zr07?= =?us-ascii?q?3UppwrOg/OXTd/BzB7IRNvZBiQ6DhFpbGpMTsaAFRbJzZV9c+7DNpgjjDYjnUO?= =?us-ascii?q?LqlXwuOv2pWspa69wWt2M+4gajQBqt8ZZD7rcBh5+SaqFJeoPMs95g70h5+TED?= =?us-ascii?q?bCtNgAJwjxmhS+ATuPjj4sTHsJqv8uuhT6ctR/4Z9hcuBWR+jofwgEg5rtHK0+?= =?us-ascii?q?dRUZHaiYPi/w9TOXGKpZza0x5mKeUUMY6re6xg93ofLSgEO30OJcaWa+U74yJ1?= =?us-ascii?q?KDXc/UBCDd8MZdIWO8rNgwNUhlTyWL5N8srbG1mYC5p8ds0z92r40iw1/oc8Uu?= =?us-ascii?q?fu7z+2P5Pf40tOP/xdliVskszNpOwPzfrVEigX7mGTawJpzSOa15mNF/Hw8P2Q?= =?us-ascii?q?yNHOSVwGGjQ5U4FDKzeZ5AOnR+W1lJT1UgyO8c/8mog+dF+KSny3gqsFrr5GEf?= =?us-ascii?q?RchSXjwjheCof1iuqas9W28mtYqEFHEIZo4B3BGaVfIot0ORTimcm2XUhwHC3/?= =?us-ascii?q?d9/IdhA2ouqZ2v8M4/liN0v5fYIbLQwLy7Tm6XpSSQtiT6X2sUidXeIQYttmVf?= =?us-ascii?q?zFo2tR6Y1+Ma8OPEKSqIbsrjhWtFA8GBUpZ6MorjxGaknOmxVYVLr2uLEalgQR?= =?us-ascii?q?SsJ2uUhIGWK0OWIx+SDHVbhLg6aNCPwZ6DKTTrYBU09wKCNxXwu12Ilye7uuhf?= =?us-ascii?q?1Ht2RGniVhoPglzTNrXx68uSz2qKILxz0g5L+5tDIbuXxGVeWSiSHIBktfzP4S?= =?us-ascii?q?l6cTF27i6UCgYHkEdIby76VoJd/79YU4/noxbhMtfywAXeS9BCD9lKyIAomVv9?= =?us-ascii?q?JamhGBosLObaW8LSIKLLQy1QrjR2Rh0gjZhBto8mwLQjWm7NM+OIq9OcIlxje1?= =?us-ascii?q?FmnadVYM5LhJsMjwtVMQUus2aE1hz39n0seaRy0BXsrPFHgpjgI8c2VLbIpD6Q?= =?us-ascii?q?MGF6kvmjuIv7dG8RsSYDrPFoSl55TfncbP2XkmV9tqwXjWpqKdjJMwzHJlg890?= =?us-ascii?q?7jKJuHkKdezXTcFsAnb31opEx+3xffOtvf4bSId8zrSuTuMCONG5+WSqwJVqRl?= =?us-ascii?q?OlxrMGElq2NO8DwbnaXDmhSW2cQumLaG+MnzA4MkHu/xWoKEM4aNtSpU8nLuTC?= =?us-ascii?q?noJclxHmUb5sRCWQpV/azHQkMeMedgI2pJmodhcPTO4Qe+icP/YhzOc5CFsWYH?= =?us-ascii?q?/DBTF2BPOusV6xgIh7PG1t4Vn7YeTo6Q3mLNqSFQUHEYHEqp594/q6SXydOXV4?= =?us-ascii?q?1h19IFF09/vDF1Q2ruJcdpeRndvTh9R8yuMFde1iMS46ut4VhI1j75OY0MGUfh?= =?us-ascii?q?HN1pzyP83aouCEA/3DyEQnYnpVXaQfYQPp/Ig6Jdo5W7rPHbtFoxQTG7U1TIYm?= =?us-ascii?q?N2fr+6F+NBlzfRLJZLSonsnqofqGZoNTp3/S9F0wNinduxoHyvy6VgF7apeqh3?= =?us-ascii?q?LpIJ8uWj1BtdptCgB9HItOHcMAoBCrA5mOmKG0k9Wx4V91u/cWsarsDfDHzNq5?= =?us-ascii?q?0Jt1X5hb/UyEIi3cBahqgkRgi+S9nO3A0p3vBs/4ftMETud7SHbfarDaBoW/Ni?= =?us-ascii?q?6OOsXkdk9I676cyrN5XQmPay3iWqqGtTGkNO967kkhzYx4ZuXTxiQ3777HwNvy?= =?us-ascii?q?e31bpiC7oH6OMJtQ8kfHBfTaXx1OUvqF7GdlErELbYvu6ugBL8YuwN6C7Alv9D?= =?us-ascii?q?5CyteKI7C9rk/Q3UJ2bZbbLErv2yYkVogGORC/MUo3gW/FsXTQGnVcIdKiKclq?= =?us-ascii?q?mtqVCQbt50Zpk2E3emFBAnboRcuWOWUDwMKxegmK9ANND9YekO+7fkE2trGySe?= =?us-ascii?q?Z2IJVKh/2qu68cnNZqNS7PXs5aMD/ULLBtIzpRAf/DpF8yYh4Lq7I1QJs6ZYCS?= =?us-ascii?q?IEMbN0eN0SbywhHe3k30dtys0qGJLT0I8nVGybLKzzxMpwi/ufaEjczvSrfZbI?= =?us-ascii?q?v5XPTKKioqSimaRSguEUau4VqkueALvPmfIWgEuV0UfySSCBITpqBosNjQAW/T?= =?us-ascii?q?mfF5cJ0Mmv+aRzj6SDdkm6oqGiZLqUeMTuIMFQbMdHDhmmtctxKmJvJX43Lla6?= =?us-ascii?q?eXxrFUW+wLGIdMdOOWQ8fAc/BEOzgojikZOPq7f9DErbY511XITXEDE6nJ712T?= =?us-ascii?q?V0iWTeaZxz31XIUZpY80ujAn+tjIhC94D7zIP6qDpz6p6oO4lyiYuejCWWQsYE?= =?us-ascii?q?E4m/wCD3ebwBlBKWAEDNcVtFvrQqGee0ZGzGgphv522x8QZARzVWVj0n9RnPa7?= =?us-ascii?q?Hs1UUlsUg32zT/0Ia1B3Fi8/8lGQ7g30f9MApZObe2gL7bYISIwAPNE0+YLXP+?= =?us-ascii?q?0W2/9v0zV48wIgtCDILVpYgxnN2KPKAK9mjulA+mIx5e0sdl2eSDPYNG7cw8yp?= =?us-ascii?q?DNwZlnQmmmzty8eB5rMlD7BdvYwsRQ1SDA=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2FQBACe9M9Y/wHyM5BdGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgyaBWRKOZagzJokSVwEBAQEBAQEBAgECaCiCMyKCQQYBAiQTFCAOAwkBA?= =?us-ascii?q?RcpCAgDAS0VEQ4LBRgEiVINqSQ6JgKKRY9jEQGGAQWBKwGHcZMuApJDAoprhj6?= =?us-ascii?q?TWFh8CBoJAhQlUGaDcR2BYh1Zh0WCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 20 Mar 2017 15:28:35 +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 v2KFSRld031411; Mon, 20 Mar 2017 11:28:30 -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 v2KFIa9i194196 for ; Mon, 20 Mar 2017 11:18:36 -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 v2KFIa8O027563 for ; Mon, 20 Mar 2017 11:18:36 -0400 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 1/3] libsepol/cil: Allow hexadecimal numbers in Xen context rules Date: Mon, 20 Mar 2017 11:18:57 -0400 Message-Id: <1490023139-12045-2-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1490023139-12045-1-git-send-email-jwcart2@tycho.nsa.gov> References: <1490023139-12045-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 Allow the use of hexadecimal numbers in iomemcon, ioportcon, and pcidevicecon statements. The use of hexadecimal numbers is often the natural choice for these rules. A zero base is now passed to strtol() and strtoull() which will assume base 16 if the string has a prefix of "0x", base 8 if the string starts with "0", and base 10 otherwise. Signed-off-by: James Carter --- libsepol/cil/src/cil_build_ast.c | 30 +++++++++++++++--------------- libsepol/cil/src/cil_build_ast.h | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c index d3d663b..442f100 100644 --- a/libsepol/cil/src/cil_build_ast.c +++ b/libsepol/cil/src/cil_build_ast.c @@ -4228,12 +4228,12 @@ int cil_gen_portcon(struct cil_db *db, struct cil_tree_node *parse_current, stru if (parse_current->next->next->cl_head != NULL) { if (parse_current->next->next->cl_head->next != NULL && parse_current->next->next->cl_head->next->next == NULL) { - rc = cil_fill_integer(parse_current->next->next->cl_head, &portcon->port_low); + rc = cil_fill_integer(parse_current->next->next->cl_head, &portcon->port_low, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper port specified\n"); goto exit; } - rc = cil_fill_integer(parse_current->next->next->cl_head->next, &portcon->port_high); + rc = cil_fill_integer(parse_current->next->next->cl_head->next, &portcon->port_high, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper port specified\n"); goto exit; @@ -4244,7 +4244,7 @@ int cil_gen_portcon(struct cil_db *db, struct cil_tree_node *parse_current, stru goto exit; } } else { - rc = cil_fill_integer(parse_current->next->next, &portcon->port_low); + rc = cil_fill_integer(parse_current->next->next, &portcon->port_low, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper port specified\n"); goto exit; @@ -4538,7 +4538,7 @@ int cil_gen_pirqcon(struct cil_db *db, struct cil_tree_node *parse_current, stru cil_pirqcon_init(&pirqcon); - rc = cil_fill_integer(parse_current->next, &pirqcon->pirq); + rc = cil_fill_integer(parse_current->next, &pirqcon->pirq, 10); if (rc != SEPOL_OK) { goto exit; } @@ -4604,12 +4604,12 @@ int cil_gen_iomemcon(struct cil_db *db, struct cil_tree_node *parse_current, str if (parse_current->next->cl_head != NULL) { if (parse_current->next->cl_head->next != NULL && parse_current->next->cl_head->next->next == NULL) { - rc = cil_fill_integer64(parse_current->next->cl_head, &iomemcon->iomem_low); + rc = cil_fill_integer64(parse_current->next->cl_head, &iomemcon->iomem_low, 0); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper iomem specified\n"); goto exit; } - rc = cil_fill_integer64(parse_current->next->cl_head->next, &iomemcon->iomem_high); + rc = cil_fill_integer64(parse_current->next->cl_head->next, &iomemcon->iomem_high, 0); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper iomem specified\n"); goto exit; @@ -4620,7 +4620,7 @@ int cil_gen_iomemcon(struct cil_db *db, struct cil_tree_node *parse_current, str goto exit; } } else { - rc = cil_fill_integer64(parse_current->next, &iomemcon->iomem_low);; + rc = cil_fill_integer64(parse_current->next, &iomemcon->iomem_low, 0); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper iomem specified\n"); goto exit; @@ -4689,12 +4689,12 @@ int cil_gen_ioportcon(struct cil_db *db, struct cil_tree_node *parse_current, st if (parse_current->next->cl_head != NULL) { if (parse_current->next->cl_head->next != NULL && parse_current->next->cl_head->next->next == NULL) { - rc = cil_fill_integer(parse_current->next->cl_head, &ioportcon->ioport_low); + rc = cil_fill_integer(parse_current->next->cl_head, &ioportcon->ioport_low, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper ioport specified\n"); goto exit; } - rc = cil_fill_integer(parse_current->next->cl_head->next, &ioportcon->ioport_high); + rc = cil_fill_integer(parse_current->next->cl_head->next, &ioportcon->ioport_high, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper ioport specified\n"); goto exit; @@ -4705,7 +4705,7 @@ int cil_gen_ioportcon(struct cil_db *db, struct cil_tree_node *parse_current, st goto exit; } } else { - rc = cil_fill_integer(parse_current->next, &ioportcon->ioport_low); + rc = cil_fill_integer(parse_current->next, &ioportcon->ioport_low, 10); if (rc != SEPOL_OK) { cil_log(CIL_ERR, "Improper ioport specified\n"); goto exit; @@ -4771,7 +4771,7 @@ int cil_gen_pcidevicecon(struct cil_db *db, struct cil_tree_node *parse_current, cil_pcidevicecon_init(&pcidevicecon); - rc = cil_fill_integer(parse_current->next, &pcidevicecon->dev); + rc = cil_fill_integer(parse_current->next, &pcidevicecon->dev, 0); if (rc != SEPOL_OK) { goto exit; } @@ -5364,7 +5364,7 @@ void cil_destroy_ipaddr(struct cil_ipaddr *ipaddr) free(ipaddr); } -int cil_fill_integer(struct cil_tree_node *int_node, uint32_t *integer) +int cil_fill_integer(struct cil_tree_node *int_node, uint32_t *integer, int base) { int rc = SEPOL_ERR; char *endptr = NULL; @@ -5375,7 +5375,7 @@ int cil_fill_integer(struct cil_tree_node *int_node, uint32_t *integer) } errno = 0; - val = strtol(int_node->data, &endptr, 10); + val = strtol(int_node->data, &endptr, base); if (errno != 0 || endptr == int_node->data || *endptr != '\0') { rc = SEPOL_ERR; goto exit; @@ -5390,7 +5390,7 @@ exit: return rc; } -int cil_fill_integer64(struct cil_tree_node *int_node, uint64_t *integer) +int cil_fill_integer64(struct cil_tree_node *int_node, uint64_t *integer, int base) { int rc = SEPOL_ERR; char *endptr = NULL; @@ -5401,7 +5401,7 @@ int cil_fill_integer64(struct cil_tree_node *int_node, uint64_t *integer) } errno = 0; - val = strtoull(int_node->data, &endptr, 10); + val = strtoull(int_node->data, &endptr, base); if (errno != 0 || endptr == int_node->data || *endptr != '\0') { rc = SEPOL_ERR; goto exit; diff --git a/libsepol/cil/src/cil_build_ast.h b/libsepol/cil/src/cil_build_ast.h index 825029e..5466203 100644 --- a/libsepol/cil/src/cil_build_ast.h +++ b/libsepol/cil/src/cil_build_ast.h @@ -221,8 +221,8 @@ void cil_destroy_src_info(struct cil_src_info *info); int cil_fill_cats(struct cil_tree_node *curr, struct cil_cats **cats); void cil_destroy_cats(struct cil_cats *cats); int cil_fill_context(struct cil_tree_node *user_node, struct cil_context *context); -int cil_fill_integer(struct cil_tree_node *int_node, uint32_t *integer); -int cil_fill_integer64(struct cil_tree_node *int_node, uint64_t *integer); +int cil_fill_integer(struct cil_tree_node *int_node, uint32_t *integer, int base); +int cil_fill_integer64(struct cil_tree_node *int_node, uint64_t *integer, int base); int cil_fill_ipaddr(struct cil_tree_node *addr_node, struct cil_ipaddr *addr); int cil_fill_level(struct cil_tree_node *sens, struct cil_level *level);