From patchwork Wed Nov 16 19:12:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Roberts, William C" X-Patchwork-Id: 9432419 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 D2DE560476 for ; Wed, 16 Nov 2016 19:14:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF7A829119 for ; Wed, 16 Nov 2016 19:14:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3CB92911D; Wed, 16 Nov 2016 19:14:53 +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 7DCD329119 for ; Wed, 16 Nov 2016 19:14:52 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,649,1473120000"; d="scan'208";a="827861" IronPort-PHdr: =?us-ascii?q?9a23=3AgHfe2Rx4Ebaz1gnXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?1ekTKvad9pjvdHbS+e9qxAeQG96KsLQd16GP6fqocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDSwbalvIBi5ogndq9cajZV/Iast1xXFpWdFdf?= =?us-ascii?q?5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPGAz/83rqALM?= =?us-ascii?q?TRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VSi+46ptVRTnhj?= =?us-ascii?q?0HNzok+2/JjMJ+gr9QrBa4qxBi34LYZYeYP+d8cKzAZ9MXXWpPUNhMWSJPAY2y?= =?us-ascii?q?aIkAD+QZPetasoXwqVQBogexCwayH+Pi0SNIi33s0KEmyektDR/K0Qo9FNwOqn?= =?us-ascii?q?TUq9D1Ob8cUOC0yKnIyTTDYOlT2Tvn9IfEaAohofaXUr1ua8rR1VIvGhjEjlWW?= =?us-ascii?q?tYzqITeV2v4RvGic6uptU/+khW0/qwxpvzSiycghhpPJi44I0FzI6yp0zJgvKd?= =?us-ascii?q?GlUEJ3fNqpHZhKuy2HNYZ7QtkuTmVstSogxLALuZi2dzUQxps93R7QcfmHfpCN?= =?us-ascii?q?4hLkSemePy91hGlgeLKjnxay9lWgyvHkWsm0zllKqi1Fn8HQtn8XzRzT69WHSu?= =?us-ascii?q?Bn8ke92TeAywDT6uZeLUAyiaXbMIIuzqQ1lpoStUTPBi72mEPog6+Kbkgo5+el?= =?us-ascii?q?5uv9brjmu5OQLZF4hw7gPqg0h8CzGeE4PRIPX2if9+S8zrrj/UjhTbVRkPI2lq?= =?us-ascii?q?jZsJbHJcUUv6K2GAhV0psl6xmjETimy88VnWUHLV1ZeBKHiJLlO1fVIP/iF/u/?= =?us-ascii?q?jFOskClzy/DcIrLhGonNLmTEkLr5Zrly8ElQyA4yzdBE+5JUEasNIOntVUDtrt?= =?us-ascii?q?DYFQE2Mwi1w+bhFdV82ZgTVn6PA6+DLaPSqkWE5+w1LOmQf48VvzD9J+Ii5/70?= =?us-ascii?q?gn8zgUUdcrWx3ZsLdHC4GexrLFuBYXX2mNcBEHwKsxEmTOPwkl2CUCVTZ262X6?= =?us-ascii?q?0m+j40FpiqDYDZRoCimLaBxju0HoVKZmBaDVCBCXnpd4SAW/cJdi2SONRskjIa?= =?us-ascii?q?Wre8TI8hzwuhtBfgy7pgLOrb5DEXtY752Nhy/e3Tmgk49SZoAMSFz2GNU2Z0k3?= =?us-ascii?q?sGRz8sxq9/p1ByylaY0aVjhvxYDd1T6+pSUgY0Lp7Q1et6C8r9WgjZZNeGVE6m?= =?us-ascii?q?Qsm6ATE2Vt8xwMUBY0V6G9W/lR3D3DClA7wSl7yWHpA09bjc33fpLcZn13nGzL?= =?us-ascii?q?Uhj0UhQsZXL2Kpm7R/9wnNCI7TiEiWjbqldaEG0C7K7meDwnKEvFtEXw5oTaXF?= =?us-ascii?q?QXcfa1PKotvj4kPNUaSuCagnMwtG0sOCMbdFatz3glVAWPfjOc7Rb3i3m2iuGR?= =?us-ascii?q?aC3qmMY5bye2UBwCXdD1AJkwAN8naCMQg+ATyso2bDDDxyElLvZlnj/fN5qHOh?= =?us-ascii?q?QU8+1xuKYFF517qp5h4VguSRS+gd3rIevychsCl0EU2m39LQDNqBqQ9hc79aYd?= =?us-ascii?q?8n5ldIy37ZvRRnPpO8N6BimkIecwNvskLgzRp3DplAntYwrHMx1wdyN7yX0Ela?= =?us-ascii?q?eDOF2JD8ILrXKnP9/Bq3ca7Zxkne0MqK+qcI8Pk4t0jssxyoFkU493VqyMVa03?= =?us-ascii?q?yZ5prWFgUSSo7xXlwx9xdku7HQejM96J/M1X1wLam0tSfP29QoBOshzhavYcxf?= =?us-ascii?q?PbieGwDsCc0aANKiKOswm1imdhgEJvxd9LYoP8O6cPuLwLOkM/x8nD28k2tH7o?= =?us-ascii?q?9831mQ+Cp8UOHIxYoFzO+C3gedUTfzkkuhuNjtmY9YfTESAna/yS/8CY5PZ619?= =?us-ascii?q?YZoLCWC0I8Gt2tp+h5ntW3hX9FO4A1MG2cmpdgCIb1z6xwFQ0l4XoXO/kyui0z?= =?us-ascii?q?N0iy0prraY3CHWx+TidQEHOnJSSGl5k1jsJYm0j9YHXEmndAUpjwOl5Uf8x6ha?= =?us-ascii?q?uKt/NHPfQUFWcCjqN2tiSLe/tqKeY85T75MlqT9XUOO4YVCeVLH9uQcV0yTtHm?= =?us-ascii?q?ZF3zA7ai2luo7jkxx9kmKdI255rGDFdsFo2Rff+NvcSOZJ3jUcWSl4jSPbCUKm?= =?us-ascii?q?M9ay+tWUk4vDsue4V2+6U51fbS/rzYScuyeh421lHwG/leipmtL7CQg6zTP719?= =?us-ascii?q?5yWCXNqBbwe5fk16KhPOJ5YEZoAFv85NRgGo1klIs/mo0Q02AAhpqJ5XoHjXvz?= =?us-ascii?q?MdJD1KL9cnUNQyULzsXW4Af73k1jNXSJyJzlVnmHxcthfda6aHsM2i0h98BKFL?= =?us-ascii?q?uU7LtckCttuFW4sAbRbuZlnjgHz/su9GAVg/sStQow1SWSHKoSHVJCMSz3kBSI?= =?us-ascii?q?8sq+o7lJa2ahdriwzkV+ks67ALGEvA5cRG7zeo0+Ei9o8sV/LFXM3WXt6oHiZd?= =?us-ascii?q?bddswTthuJnBfAleRVLow+luYSjyp9JW39pWEly/I8jRF2xZG1ppWHK2F28a2l?= =?us-ascii?q?Ax5YKj30a9od+j73i6ZShMGW35qgHp95ADUEQIPoTe60EDIVrfnnNAaPEDkipX?= =?us-ascii?q?qAHLrfGgGf6El4oHLTD5CrN3aXJHwHwtl4QhmSOlBfihgOXDomhp45ChyqxMv5?= =?us-ascii?q?fUd3/D8R4EL4qhxJyu9zORnwTHrQpACyajguUJifNh1W7gNc6EjJLcyS9OVzHz?= =?us-ascii?q?tX/pe5tgyCNnSbZxhUDWEOQkGECFDjMaW05djA6+iYGu2+IuDIYbqQtexeTOuH?= =?us-ascii?q?yoi30oR45TqMMNuAPmV6Bf0hxkVDRWx5G9jemzgXViMXkTjCYtWGqxe64CJ7tM?= =?us-ascii?q?e/8O7kWAj3/4uAF6NSMclz+xCxmaqDLfOfiztiJDZX05MNymXEyL4B014Okytu?= =?us-ascii?q?bSWiEawctS7RS6LdgrVXAwQVai9pMctH9aY83g5NOMPAkNz6yrt4guQyC1dfWl?= =?us-ascii?q?zrgtupatASI2GhKFPHA16GNLKcJTLR28H3ebixSbNRjOVOrB2wpTibE07lPjuZ?= =?us-ascii?q?kTnmSxGvPvtIjC2BOxxeoo69eA53CWf/VNLmdgG7MNhvgDIr2r07mGnFNWEGMT?= =?us-ascii?q?dmbUNAtaaQ4jlbgvViAWxO9GBpLe2Zmyaf9ebYMI8asedsAiR3l+Na5242y71L?= =?us-ascii?q?4yFYXPZ1gjfdrsZyo1G6lemC0iFoUBtBqjZMgoKGplhtNrvC+ZlBQ3nE+ggB7W?= =?us-ascii?q?KKCxQFv9FlEMHgu7hMytjTk6L+MC1N893O8ssCGcfZM8WHMGI/PhrvHT7bFgoF?= =?us-ascii?q?TTqwOmHYiE1RivaS9mearpIisJjjhIIOSqNHVFwyDv4aFkNlHNkYLJdtWTMlkK?= =?us-ascii?q?CUjMgT6nqkqxneWsZas4vbWfKVBPXgNCyWjaJYZxcSx7P3M5gTPJXh20N+cll6?= =?us-ascii?q?gJjKG03IUNBNvi1hbgg0oEBX/3hlVWAz3kPlah+34HAND/K0mQQ2igRma+Q36D?= =?us-ascii?q?js+0s3JkbNpCYolkk+h8/qgTSKfT7yK6ewRp1WBDDyt0gqMZP7Qhx5bQuskkx4?= =?us-ascii?q?LD3EXa5ej6N8dWB3jw/RoYFPFuBHTaJaehAQ3+2YZ/Uz3FtHqyWn31JI5ezLCZ?= =?us-ascii?q?t6jgslb56to2hG2w19cN4/PbbQK7ZRzlhMmqKOuTel2f0rzw8AJkYC7XiSdTUS?= =?us-ascii?q?t0wSLLkmICSp/vdy5gOehjtDYmkMV+Yqo/5w8EMyJfiAxTr607FfMkCxK/CfL6?= =?us-ascii?q?SBtmjOj86HXE4/1lgSmElD4bh21twjflGOWE8zybudDRMJNdDNKQtNdcpd6GDT?= =?us-ascii?q?fTqSseXK2Z91O4K9Fvr2Qu+ItacUhVmpHAkvH4QR9MgBGYOs0E7AJ8f9MLEF0Q?= =?us-ascii?q?kt5BjsJFidF/RGZhaLkDYBo8Giw556xpVSJjYYAWphKyq3/arXqhUsgPWdQNc8?= =?us-ascii?q?em0aUZccNnIqRM26nDZUsGlcAzmy1eIZzhSC4yLnqyTOEjb8ddtjZfaTZRNqEt?= =?us-ascii?q?22/ysw87Sug17N7preP336NchlutLX6uMavZaGBOlSTblhs0fRgIZYR3uyU2HT?= =?us-ascii?q?C9K1IYb/a5U0Z9zuFnm6SkC/iy4yT8rpINatL62IgQb0RYZUsIiWxy0sNc69Fz?= =?us-ascii?q?4EABh8vecD67xgZQcbeZo0fQbotxgiN6y4OAqY3c+uTHyrKTtKVPRfzOK6ZrJR?= =?us-ascii?q?zyowbu+11nogTpcmz+ap604BXpcKgQ/Cxfy7fYlRTTDzGmBBewXIvSc2jWxhNu?= =?us-ascii?q?cuzegh2BzItFkdMzaMdOxvcmNJpMozBVKILnVwE2Y4SUKcgZDF4gGyw7AY5zFd?= =?us-ascii?q?kMpM0e1ZrHj+uYfSbymyV6ytspjaqTcvbcY4rK1rKozsONGGtZPEkjzYVpnQvR?= =?us-ascii?q?WPUDSmGPpChthQPCVYTeFSmWEjOMwJpYpB6U01VsclP7JBEbQiqKq2ZDRjFiMd?= =?us-ascii?q?0SgZV4ac0zMYmee8x6HWlhGOf5Q+KBYEqolNgsMBUy5qZSMTvLOsV4fMmGCYUW?= =?us-ascii?q?UEPAAT7QBI5AIBiIBwZPzl75TUQ59M0TJWpOh0UiTTHJly61T7Un2WgUT/SPi5?= =?us-ascii?q?ieymxxhSzPX33dQARB5/E1JSx/hImUssKbF3LaYQvorLsj+HdUP6oGztx/G8JF?= =?us-ascii?q?lU08HUcUP3DJbdv2rmTiIc4WEURZNIyHzHFZUdiRF5Z7wupFVNJoCrYUf+5yA+?= =?us-ascii?q?yIRyA7a3T9qnx1A7onYaXy2qCcZOC/l6sFLLXz1oe56qpI/5NJVSQ29Q/ZydpE?= =?us-ascii?q?1akEh2Mi6214RTJN9X7j4LRjhPri2XvMGuR81bxc92E5gML89nu3f6HKNLIoKR?= =?us-ascii?q?onMxurzrxH/U4DU8sFC9xDWoBaC3U/hZ/2oFGgUyJmSerEYvA/Er8mfI/VDHqk?= =?us-ascii?q?p08PtDBriTkUVxpy5wEYpUBjZU03CpNVdzQWJHs+VbKaTVb9dTT+M0ZRCxJxw0?= =?us-ascii?q?DeQm0FCR/UFogXf5ZDR/thdd+yDYRAQ0STUZgrL2ljEErMGoJyMaQYpSbTo9dy?= =?us-ascii?q?fFNx6bmSdPsRZfcU5qQYoWAtJY9LwAwIRb4NLCSV6yJiEBQhNiLBg00f1FlU5M?= =?us-ascii?q?qE+YYzzSDRK0dfbTtR16ZceRrMm3I/T34ghHkJjqsOEm+KodWXKqgwqtQcrRr4?= =?us-ascii?q?XkrN2FqlOOdLvkM+27eXLBTj/Mgg6riLg5EZbK5DbcMBBHK5Zk1HUoe57hBnDX?= =?us-ascii?q?PR5ePaIUO1JbVbxmadVBuu1VfMFkd7oV9aJvGx6KSAjiF5CorPlDMlncXy/eLz?= =?us-ascii?q?mb/uy5v43T8aTXSfL8acyU23bHX6V3M49g6TblBrjq0ZVR+lbt1/dp8UN6V0bJ?= =?us-ascii?q?Pz6do9TmOwwE+tOudk38sZ01BTnWGot/kGLxxkFccMoaWzWq8I8EyJxD9XnwVf?= =?us-ascii?q?l10lP0sO1P7blr9Zc447Z1yceuP6jSLe5WsUh9AhibHg9q7IkiAHBjR2BNZe8c?= =?us-ascii?q?MOvRfb4Hgs/wtu/6DLEX6BmJ++xDc9THOUDBms67Cj6CVRxIhgABqSQVLgGEzf?= =?us-ascii?q?6Kh7d0Sdq5pej+wk8t5kKxLhoCzL9z+YeE5rCHq/XMYhvX07cERrPqSd/pobQ0?= =?us-ascii?q?pUye//skm6ASemZteQ2oDPAdVtIBxmfn1a0qzzgjE9nEH7L7/P5MTWw5kynlm5?= =?us-ascii?q?BgG1UWBvIUEqaK/YtEmGc4gPbVNtoMcqBNgmyPDwKrEqceyX637CuaOGtljQvI?= =?us-ascii?q?0xH+W2Oz60L5ojFjTCvQ1djjlFFVVr6tCUdUQSWpJVdysCmTMwrwqNr3paM14V?= =?us-ascii?q?k5Mmz5tdKNkG+hN61SH8DkOdOTPzI7pFMNg503XNCv3pobGdWlKtcL7H5+dufe?= =?us-ascii?q?63+skyJZpadHg5HT4sCT+vXSB3Wgjquaq7uXxD9C0Xg4oUs/6s28OfHS+t2KWe?= =?us-ascii?q?qn23wWTydltAvLRwS1paDDr1AIJUyL11/GmIkNPtFfwXk42V/p6fMmQNIy7gpe?= =?us-ascii?q?EJjPZ+8MpDD0Ijv0wk2fb8gxViaAzztdBkj1HkVgGKggxGLwu9rElXPL+10tRo?= =?us-ascii?q?R9bELnigJqAIU/M0Ii8kAXwjAEEQgPdx+UEK2oCV7iLYseWkgJcQ6H06Sieqcr?= =?us-ascii?q?wU1zxaui5OrXbeNiAqoNMehSjgqVkVhUBJ0WtrYeQKpmdF9B9a7YvAziC4nhX/?= =?us-ascii?q?j6i3UwMfm1QsFV8c8HsXst/hiwSwCm6Zhd87YRkIqIebJcYZjQoMB86F9q5SUV?= =?us-ascii?q?eSxTmhd/gA22UfsHqeD4+NfbroCn6umwW6Y2XekX8QY7B3hmhZvqnF8juc3X1/?= =?us-ascii?q?tbSoDNi4T/8QVNLmWPuInE0xhzN/AOK4OtfLZv7XkHITYRJ24WN9qMd/Y8+zNt?= =?us-ascii?q?MCnU51FaA8MNZMkXM9DRlg1PkU3mRq1T+dTHFVOCDIdzbc8o5XLtyD8p6Zs8Tv?= =?us-ascii?q?rg6DiuKJ/E7lFNJP1Cgz9ulNLDuOgV2eDdCDUT4XSCdxd1xT6NxIeXBPbt5+WM?= =?us-ascii?q?z8vUWEkcEi4xSYddKyKI+Ra7SeqtiJXpTgSU59frgJ0kaEKfWnyxnaoCsqZWEu?= =?us-ascii?q?5Mkz770SZaFoD0gfKVrtWt5XBPtlJdDIZ88R3FGatYPpVhOhT0jMqrSVZmBiv5?= =?us-ascii?q?Zs7UcgAiuO2MxucD++9+LVfxZZcHIhIYzLL38WZVThFwR77ypFmZW/weacB7R/?= =?us-ascii?q?PFoXBV6J5gJLUUPFeHvpzqsy1EqFYoDw81cLUwtCBVdlHSnA1JXKb5oLEAhREG?= =?us-ascii?q?UdFnpU9MGXm9OGY/5zrbS6tVjLOeCOEO8jmJSKwBTVloODtkQxypwJVuZ6epnf?= =?us-ascii?q?dfv2NJgCx9puQq0zthRBe7oi3juaYN2TMm+LGluzQMonhFQfuEkybIE1pP1vIK?= =?us-ascii?q?grkAC3z681yzfGEDbJfu4LlgPcng84gh7Gg4YRUnZSIGRv6sCyD3j6OPGYyPq8?= =?us-ascii?q?lRhBuCtcTBd7OzKjISNrslwxL5W3d9yhTenApv8GYTTTWv8MQkJJ6kNcg4ySSm?= =?us-ascii?q?H2nbdFAR4qJGq8bxulsLQ/EwaVx/2mlj1dKHRiIVTszVB2k1lhQkaXlDcJ9b6x?= =?us-ascii?q?8aEKkogjCSsqZa/gEUZCrUHZmk+4nRm8fIwno9TdZxy2LIp62FmIkl0Hl4lNN1?= =?us-ascii?q?9CKOvmodd/DAWc92HnfzzptfyfD5Z/i1s+AHVpFpyLK6Xf8GL8ms5Gq22JJxWk?= =?us-ascii?q?O/wbQeBVW5OvcZxrjHSyelVXGYWeOTfmiOgTk5PEDy5R2zI1w5cshKqVEyMvfY?= =?us-ascii?q?ip5aiQLhTat+Rj+Mql/D0GwjLeQaeho5uIejfAwLQvAeZ+yYJeU12/0+D10Mb3?= =?us-ascii?q?7VEidsDe+5r0KtlpBhO3p8+UX6ffjt8gf+PduQGhkFEZbarpl1+fy7WmKOJ2Rt?= =?us-ascii?q?zBhzPElo7efQCU49tuhGc5aehdLQnch00fYZd/dxNi0wosITmoNm6YSPzMeKcA?= =?us-ascii?q?3ezpXsKtHRuPSYBePQz1gycGFATrUZeR/155k9PtMhXr3THLhZvRcbBaUhQpwu?= =?us-ascii?q?LWTx9KZyLAxtdA7dfrK0jdf2puiTfJtbu2fW7k4sLCfboxAM0eK7TQpnb52xnH?= =?us-ascii?q?XyJJcwRi5dr91zFBRpAZFDG8QarwqoG5SUgr20i8et+0NmvO8HqaTwBe7O1NS4?= =?us-ascii?q?x4V+QYNX5E2KPDbUAalknF5ljuCsjfva1ZnxE8zic8seVOdnWm7FdqPGHoKnJz?= =?us-ascii?q?OAIsL8YU9G/KKC379iVxWRZTz5X7CYuyG+M/Vk+0o7wJRifOXP1Dwt863b2Nzq?= =?us-ascii?q?amFcoiess2WENINb7FPQHuzeQxNURuaZ8GZ/A6IYc5H49OEQPtw+2NKc+RV87C?= =?us-ascii?q?xe0MuZJKistkvM2kN9dZLGI0rlwiI5WYgRIBSjKkshmm7ZpW7bAXRbNMSkLtNt?= =?us-ascii?q?gNmNBBz3+0ZxgX0tZnJGGmfwXteeJ2wb28O4ZA2X+wNHCNkNn/K3eUEmrK29V/?= =?us-ascii?q?FoNY9elOWpqroHi9BpJD/LRMdBIiHQI6V6Pj1LDuXAvFIoeAILs6ApWocpYpiD?= =?us-ascii?q?OEcHMEabySPu1gbD0FT0d9q226qTJiYZ7GlHxarf0TdQvwm5peqZgsr7XbDcdp?= =?us-ascii?q?75QP7SMCsjVjGdXjkyD0ep+VG6tPoAvfqYJ3ofo18ObiKVEg4TqbhlrcLMAW/L?= =?us-ascii?q?he1jYJoKieiYWy/qSy14k7E9Cz1WtUCKX/oDFQ7Wb2LugGpcpAyuPPlM8mz5b7?= =?us-ascii?q?eA3KpaR/QWApdQcv2eW9bYdupRKCwyljUYJum8e8bRr6g90l3SVmsZErTI+EeY?= =?us-ascii?q?TEGIXvyW3yjrUpkNv4gopioo/crdni1yE6TPJbafvT+u8pWjgSaeo+LeU3ciY0?= =?us-ascii?q?0vjOIFGmmBzwFKKHsYBNENpEHtXqmAal5S23IrjuJu2xkMeB90Un1oyXBWk+y9?= =?us-ascii?q?GtBHSVEKlmOiWvsGY05rDDko50+F/hXyYcAcucDUX2Je7bUMSY8BI/Qp64TaI7?= =?us-ascii?q?UQz+gz3DJnoS06tCOdA0lbjg2b76raBLh8yaFa5Wkk4/F2WVmCQzHYcmjBzoqr?= =?us-ascii?q?EMdPyjlzrnDq0MrUpPxiO6VAq4F/HlgKHXE+GteI5jxaeX3l0wu1+RCgFXKRJy?= =?us-ascii?q?xdqC0GIS0Da/Zd0/5wsBGOcM3Ir0yXqfEPskyuXBmKDr610ZkNAYfz0g+1czVQ?= =?us-ascii?q?WTStC51y7P1KkYVBKZg7bJSzVgiSZjP1CRiV7mVVrBU=3D?= X-IPAS-Result: =?us-ascii?q?A2HWBADcrixY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgww?= =?us-ascii?q?BAQEBAR+BWKRMkByGRiSIFlMBAQEBAQEBAQIBAl8ogjMaghwCBAECJBMUIA4DC?= =?us-ascii?q?QEBFwghCAgDAS0VEQcHCwUYBIhLtD49KgKLNwEKAQEBI4hBhnARAYV9BYhRhwy?= =?us-ascii?q?KZZBoAooXhgpJkQ5VXUaFPlEBhTyCLQEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 16 Nov 2016 19:14:50 +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 uAGJEjvS014329; Wed, 16 Nov 2016 14:14:47 -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 uAGJD274154254 for ; Wed, 16 Nov 2016 14:13:02 -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 uAGJCwBc014137; Wed, 16 Nov 2016 14:13:02 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CtAwCjrixY/yNjr8ZeGgEBAQECAQEBAQgBAQEBgzcBAQEBAR+BWKRMkByCOIQVhiECghBTAQIBAQEBAQJihRECBCdSECAxVwcSiGy0Pj2LYwEBAQEBAQQBAQEBI4hBjH8FiFGHDIplkGgCkCFJkQ5VhmEdNAGHaQEBAQ X-IPAS-Result: A1CtAwCjrixY/yNjr8ZeGgEBAQECAQEBAQgBAQEBgzcBAQEBAR+BWKRMkByCOIQVhiECghBTAQIBAQEBAQJihRECBCdSECAxVwcSiGy0Pj2LYwEBAQEBAQQBAQEBI4hBjH8FiFGHDIplkGgCkCFJkQ5VhmEdNAGHaQEBAQ X-IronPort-AV: E=Sophos;i="5.31,649,1473134400"; d="scan'208";a="5827987" Received: from emsm-gh1-uea11.corp.nsa.gov (HELO emsm-gh1-uea11.nsa.gov) ([10.208.41.37]) by goalie.tycho.ncsc.mil with ESMTP; 16 Nov 2016 14:13:01 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3AEho7uRz4ZzC3VxXXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?2+ofIJqq85mqBkHD//Il1AaPBtSArasYwLOM6ejJYi8p2d65qncMcZhBBVcuqP?= =?us-ascii?q?49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6?= =?us-ascii?q?JvjvGo7Vks+7y/2+94fdbghMijexe65+IRq5oQnMqMUan5ZpJ7osxBfOvnZGYf?= =?us-ascii?q?ldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2Yu5M32rhbD?= =?us-ascii?q?VheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RSiu4qF2QxLzli?= =?us-ascii?q?wJKyA2/33WisxojaJUvhShpwBkw4XJZI2ZLedycr/Bcd8fQ2dKQ8RfWDFbAo6k?= =?us-ascii?q?b4UBEfcPM+hboYf6pVQOowCzCRWwCO711jNFnGP60bE83u88EQ/GxgsgH9cWvX?= =?us-ascii?q?XardX1MKMSUeGvw6nN1znMc+la2S366IfTbB8hu+2MXalrfMrQz0kvCx3KjlGK?= =?us-ascii?q?pYP5ODOV0+IAuHWY4ep4Te+jlmoqpgJrrjSyxMohipPFi4YRx1ze+yh0wIA4Ls?= =?us-ascii?q?CiRkFhe96rCp5QujmaN4RoRsMiRHlluCg/yr0dvJ67czIFxIg7yxLBcvCHcpSH?= =?us-ascii?q?7Q75WOafJDd0nnNleLSjhxms9Uis0PHzVs6x0FpSrypFlMfDtmwV2hDO7sWKSe?= =?us-ascii?q?Fx8lqj1DuPzQze7uVJLVo6mKfbM5Ihx6Q/lpsXsUTNBC/2n0D2gbeYd0Ul/uio?= =?us-ascii?q?7+Xnba/jppOGK4B4kBv+MqM1lcOhG+Q4LhMOUnOa+eS6yL3s40n5TK9Wgf0xl6?= =?us-ascii?q?nVqIraKtgDpq6lHw9V1Z4u6w2iADe9y9kYgXkGI05FeBKAlYTpPUrOL+riAfew?= =?us-ascii?q?hFSsji9hx+raMb35HpXNMn/Dna/6fblj705cyQwzzc1Q5p9PFrEAIO78Wk/2tN?= =?us-ascii?q?DCCB85KBa7z/zoCNV6yINNEV6IV7SVK4vOoFSI4aQpOODKa4gL/H7mJvwk4eP+?= =?us-ascii?q?pWMokl8aO6+y1N0Yb27rMO5hJhCGYH7og94EV2xMpA00Qfb2k3WDVyJeYzC5WK?= =?us-ascii?q?dvtXkAFIu6ANKbFciWi7ub0XL+R8UOaw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0FMBADcrixY/yNjr8ZeGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwwBAQEBAR+BWKRMkByCOIQVhiECghBTAQEBAQEBAQE?= =?us-ascii?q?CAQJfKIIzGgGCGwIEJ1IQIDFXBxKIbLQ+PYtjAQEBAQEBBAEBAQEBIohBjH8Fi?= =?us-ascii?q?FGHDIplkGgCkCFJkQ5VhmEdNAGHaQEBAQ?= X-IPAS-Result: =?us-ascii?q?A0FMBADcrixY/yNjr8ZeGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwwBAQEBAR+BWKRMkByCOIQVhiECghBTAQEBAQEBAQECAQJfKIIzGgGCG?= =?us-ascii?q?wIEJ1IQIDFXBxKIbLQ+PYtjAQEBAQEBBAEBAQEBIohBjH8FiFGHDIplkGgCkCF?= =?us-ascii?q?JkQ5VhmEdNAGHaQEBAQ?= X-IronPort-AV: E=Sophos;i="5.31,649,1473120000"; d="scan'208";a="827747" Received: from fmsmga002-icc.fm.intel.com ([198.175.99.35]) by emsm-gh1-uea11.nsa.gov with ESMTP; 16 Nov 2016 19:13:00 +0000 Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga002-icc.fm.intel.com with ESMTP; 16 Nov 2016 11:13:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,649,1473145200"; d="scan'208";a="32083548" Received: from wcrobert-mobl1.sc.intel.com ([10.3.137.21]) by orsmga005.jf.intel.com with ESMTP; 16 Nov 2016 11:13:00 -0800 From: william.c.roberts@intel.com To: sds@tycho.nsa.gov, selinux@tycho.nsa.gov Subject: [PATCH 2/2] expand_avrule_helper: cleanup Date: Wed, 16 Nov 2016 11:12:51 -0800 Message-Id: <1479323571-8501-2-git-send-email-william.c.roberts@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479323571-8501-1-git-send-email-william.c.roberts@intel.com> References: <1479323571-8501-1-git-send-email-william.c.roberts@intel.com> 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 From: William Roberts General clean up for expand_avrule_helper: 1. Stop converting AVRULE specification to AVTAB specification, they are the same. 2. Clean up if/else logic, collapse with a switch. 3. Move xperms allocation and manipulation to its own helper. 4. Stop checking handle for NULL, handle must never be NULL. Previous code and current code use ERR(), which depends on handle. 5. Only write avkey for values that change. Signed-off-by: William Roberts --- libsepol/src/expand.c | 124 ++++++++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 65 deletions(-) diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index 3e16f58..81a827e 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -1781,6 +1781,41 @@ static int expand_terule_helper(sepol_handle_t * handle, return EXPAND_RULE_SUCCESS; } +/* 0 for success -1 indicates failure */ +static int allocate_xperms(sepol_handle_t * handle, avtab_datum_t * avdatump, + av_extended_perms_t * extended_perms) +{ + unsigned int i; + + avtab_extended_perms_t *xperms = avdatump->xperms; + if (!xperms) { + xperms = (avtab_extended_perms_t *) + calloc(1, sizeof(avtab_extended_perms_t)); + if (!xperms) { + ERR(handle, "Out of memory!"); + return -1; + } + avdatump->xperms = xperms; + } + + switch (extended_perms->specified) { + case AVRULE_XPERMS_IOCTLFUNCTION: + xperms->specified = AVTAB_XPERMS_IOCTLFUNCTION; + break; + case AVRULE_XPERMS_IOCTLDRIVER: + xperms->specified = AVTAB_XPERMS_IOCTLDRIVER; + break; + default: + return -1; + } + + xperms->driver = extended_perms->driver; + for (i = 0; i < ARRAY_SIZE(xperms->perms); i++) + xperms->perms[i] |= extended_perms->perms[i]; + + return 0; +} + static int expand_avrule_helper(sepol_handle_t * handle, uint32_t specified, cond_av_list_t ** cond, @@ -1790,44 +1825,20 @@ static int expand_avrule_helper(sepol_handle_t * handle, { avtab_key_t avkey; avtab_datum_t *avdatump; - avtab_extended_perms_t *xperms; avtab_ptr_t node; class_perm_node_t *cur; - uint32_t spec = 0; - unsigned int i; - if (specified & AVRULE_ALLOWED) { - spec = AVTAB_ALLOWED; - } else if (specified & AVRULE_AUDITALLOW) { - spec = AVTAB_AUDITALLOW; - } else if (specified & AVRULE_AUDITDENY) { - spec = AVTAB_AUDITDENY; - } else if (specified & AVRULE_DONTAUDIT) { - if (handle && handle->disable_dontaudit) - return EXPAND_RULE_SUCCESS; - spec = AVTAB_AUDITDENY; - } else if (specified & AVRULE_NEVERALLOW) { - spec = AVTAB_NEVERALLOW; - } else if (specified & AVRULE_XPERMS_ALLOWED) { - spec = AVTAB_XPERMS_ALLOWED; - } else if (specified & AVRULE_XPERMS_AUDITALLOW) { - spec = AVTAB_XPERMS_AUDITALLOW; - } else if (specified & AVRULE_XPERMS_DONTAUDIT) { - if (handle && handle->disable_dontaudit) + /* bail early if dontaudit's are disabled and it's a dontaudit rule */ + if ((specified & (AVRULE_DONTAUDIT|AVRULE_XPERMS_DONTAUDIT)) && handle->disable_dontaudit) return EXPAND_RULE_SUCCESS; - spec = AVTAB_XPERMS_DONTAUDIT; - } else if (specified & AVRULE_XPERMS_NEVERALLOW) { - spec = AVTAB_XPERMS_NEVERALLOW; - } else { - assert(0); /* unreachable */ - } + + avkey.source_type = stype + 1; + avkey.target_type = ttype + 1; + avkey.specified = specified; cur = perms; while (cur) { - avkey.source_type = stype + 1; - avkey.target_type = ttype + 1; avkey.target_class = cur->tclass; - avkey.specified = spec; node = find_avtab_node(handle, avtab, &avkey, cond, extended_perms); if (!node) @@ -1839,13 +1850,15 @@ static int expand_avrule_helper(sepol_handle_t * handle, } avdatump = &node->datum; - if (specified & AVRULE_ALLOWED) { - avdatump->data |= cur->data; - } else if (specified & AVRULE_AUDITALLOW) { + switch (specified) { + case AVRULE_ALLOWED: + case AVRULE_AUDITALLOW: + case AVRULE_NEVERALLOW: avdatump->data |= cur->data; - } else if (specified & AVRULE_NEVERALLOW) { - avdatump->data |= cur->data; - } else if (specified & AVRULE_AUDITDENY) { + break; + case AVRULE_DONTAUDIT: + cur->data = ~cur->data; + case AVRULE_AUDITDENY: /* Since a '0' in an auditdeny mask represents * a permission we do NOT want to audit * (dontaudit), we use the '&' operand to @@ -1854,35 +1867,16 @@ static int expand_avrule_helper(sepol_handle_t * handle, * auditallow cases). */ avdatump->data &= cur->data; - } else if (specified & AVRULE_DONTAUDIT) { - avdatump->data &= ~cur->data; - } else if (specified & AVRULE_XPERMS) { - xperms = avdatump->xperms; - if (!xperms) { - xperms = (avtab_extended_perms_t *) - calloc(1, sizeof(avtab_extended_perms_t)); - if (!xperms) { - ERR(handle, "Out of memory!"); - return -1; - } - avdatump->xperms = xperms; - } - - switch (extended_perms->specified) { - case AVRULE_XPERMS_IOCTLFUNCTION: - xperms->specified = AVTAB_XPERMS_IOCTLFUNCTION; - break; - case AVRULE_XPERMS_IOCTLDRIVER: - xperms->specified = AVTAB_XPERMS_IOCTLDRIVER; - break; - default: - return -1; - } - - xperms->driver = extended_perms->driver; - for (i = 0; i < ARRAY_SIZE(xperms->perms); i++) - xperms->perms[i] |= extended_perms->perms[i]; - } else { + break; + case AVRULE_XPERMS_ALLOWED: + case AVRULE_XPERMS_AUDITALLOW: + case AVRULE_XPERMS_DONTAUDIT: + case AVRULE_XPERMS_NEVERALLOW: + if (allocate_xperms(handle, avdatump, extended_perms)) + return EXPAND_RULE_ERROR; + break; + default: + ERR(handle, "Unkown specification: %x\n", specified); assert(0); /* should never occur */ }