From patchwork Wed Nov 16 21:47:38 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: 9432813 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 59AAA60471 for ; Wed, 16 Nov 2016 21:48:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 489C228685 for ; Wed, 16 Nov 2016 21:48:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3CF752869B; Wed, 16 Nov 2016 21:48:10 +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 F3D6D2916D for ; Wed, 16 Nov 2016 21:48:06 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,650,1473120000"; d="scan'208";a="1028214" IronPort-PHdr: =?us-ascii?q?9a23=3A623EoB0zDJ+ofuoJsmDT+DRfVm0co7zxezQtwd8Z?= =?us-ascii?q?sewVL/zxwZ3uMQTl6Ol3ixeRBMOAuqkC0rad6v24EUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6zbL9oMRm7ogrdutQWjId+N6081gbHrnxUdu?= =?us-ascii?q?pM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW814tbrtQTY?= =?us-ascii?q?QguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VDi+86tmTgLjhy?= =?us-ascii?q?kdNz497WrZlMp+gqxGqx6lvhBz3pLYbISTOfFjfK3SYMkaSHJBUMhPSiJPDICy?= =?us-ascii?q?YYwNAOoPJeZVrZTxqlUBohSiCgejGvjvxyRUhnL0x6A2z/4sHR3Y0AEmAtkAsG?= =?us-ascii?q?7UrNLwNKoKX+G1za3IzTHCb/xM3Dfx8pTHfgo7ofGLRr1/b9DRyVU0Fw7ej1WQ?= =?us-ascii?q?r5DlMC2R1ugXr2eb6O9gWOSygGAkswF8uiWjy8gjh4XTho8Z10rI+Tt2zYorP9?= =?us-ascii?q?G0VVZ3bcOgHZZTrS2WKol7T8M4T2xsvCs20LMLtJ69cSMX0poo3QTfZOaCc4WQ?= =?us-ascii?q?5xLjU/ueLilgiXJ+fbK/mw6y8U+9yu3gTsW00EhFri5CktTUqnACzQbT6smaSv?= =?us-ascii?q?tm5EuhxTaO2BzT6uFDO0w0k7bUK4U9zbIqk5oTsEDDEjf3mEXwkqCWal0p9vWn?= =?us-ascii?q?5unoeLnrpoKQO5VqhgzxLKgigNGzDfw9MgcUXmib/eq81Kfk/U38WLhKleM5kq?= =?us-ascii?q?3YsJDcOMQaqbe1DBRS0oY+7RawEymp0M8DkHkbLFNKZBKHj4/zN1HIO/D3F+2z?= =?us-ascii?q?g1urkDd13/zGJKHuAo3RLnjfl7fsZa1y5FVbxAo3zNBf/I5UCqobLPLoRED+qM?= =?us-ascii?q?bUDgQnPAywwubnDsh914wFVG2TAq6ZKr7SsUSS6uMhOeaMeJQVuDH7K/Q/4P7u?= =?us-ascii?q?l3A5k0cHfaa1xZsXdGy4HvN+LkqHeXrjmM0BEWYRvgclVOzlkkeCUT9IZ3aqW6?= =?us-ascii?q?Iz/C00B5y8AYfEXICtj6SL3D2nEZ1OemBGFleMHG/mdoWFX/cMbTydItV6nzwK?= =?us-ascii?q?S7euVogh1Qu0uw/i0bpnKejU9TMEupL/ztR14PfTlR4q/zxuE8udy32NT31znm?= =?us-ascii?q?4QST82xrpwoUphxVeCyqh1mPlYFcRS5/9QSQc7O4Xcw/Z9C9DoVQLLZs2JR0q+?= =?us-ascii?q?QtW6HTExSco8w9wUbEZ+HNWikwvO3ymwDL8WkLyLGYY48qXG33j+P8x90WrJ1L?= =?us-ascii?q?E9j1k6RctCLXepibNl9wjSGYHJiV6UmLy2eqQZxiLN832DzWWWtkFCTAFwSbnF?= =?us-ascii?q?XWwYZkbOsdv2/EfCQKG1CbQ7MgpBztWPKrBWZd3ok1pGQuvjONXEbG6rnWe/Gw?= =?us-ascii?q?qIzKuWbIX2Y2UdwDndCE8cngAT43mGMQw+BiC6rmLaETxuCVXvY0b2/uVkr3O7?= =?us-ascii?q?VEA0xRmQb0J9z7q15gIVhfuERvMI0LIEoiAhqy5oHFumxNLWDd2ApgRkfKpGZ9?= =?us-ascii?q?Mx+lFH2nzFtwZlJJyvM7hihkICcwRwp07v2Q94CoFckcc0tnMq1xF/KbyG31Nb?= =?us-ascii?q?bDyYwJXwNqfQKmno8xClc7TW1U3G0NaK5qcP7+w1q0n+sw60F0ot6XFn3sJJ3H?= =?us-ascii?q?ub45XFEBAdUYntUkot8Rh1ua3aaDEn54zIzX1sLbW0sjja1tIvBeslzhKgcMlE?= =?us-ascii?q?MK6fDgD9DdcaB8+0JOwtgVipYQoOPPpO+64sI8Oma/yG1ba2M+l6gDKpl3pI4I?= =?us-ascii?q?5y00+X6yV8SvTH34wZw/6GxAuLTTH8g0m9ssrvg4BLeSkSHnajySjjHINReKxy?= =?us-ascii?q?cpoXCWepOc273Mlxh57qW35e+16uHFcG2M6veRWIdVz92hdc1UMNoXyogSG41S?= =?us-ascii?q?B7kyk1rqqD2yzD2+DidBscOm5XXWVilknjIYy1j9AcQUipYBMklAC95Ub7wahb?= =?us-ascii?q?pbhwL3LJTUdOYSf2M3loUrGsubqaf85P9JQovD1NUOS7ZVCaTqDyowEG3CPkEW?= =?us-ascii?q?pT3ys7dyy2tZXihRB6j3idLHlrpnrDZc5w3Qvf5MDbRfNJxjoJXjR4iT3NClem?= =?us-ascii?q?JdWm5tKUl5PfsuC5UWKsTZhTfTXtzYOHqCS3/2tqDgOjn/qrgN3oDRA60TPn19?= =?us-ascii?q?ltTSjIqRL8bpD12KS8Ku9nYFdnBFv468VkAIFyiI0wi48M2XICnJWa4WIHkXvv?= =?us-ascii?q?MdVcwa/+b2QCRTgQw9PO4wjqxktjLmmPx43nSnWR2MxhZ8O1YmkOwCIy89hKCL?= =?us-ascii?q?uI7LxDhSZ1ukC3rR/VYfdjhjcS0/0u6GIEjOETowct0z6dDa4IHUlDJyDsjBOI?= =?us-ascii?q?782krKpLemmvf7+w1FBxnd+/Fr2CpB9TWGrhcJc4ASBw9tl/ME7L0HDr9IHkfs?= =?us-ascii?q?TfYMkNth2SjhjAj/JZKJQvmfoWnSBnI37yvWU5y+4nihxjxYm6s5KaK2Vp56+2?= =?us-ascii?q?Hh9YNiH1Zs8K9DHil6BektyR34C1EZVrAi8LU4fwTfK0DDISsuzqNwWOET04tH?= =?us-ascii?q?iWAr/fHQiR6EdosX3PD4yrN3GQJHkc09puXh+dK1JDgAoMRjU1goY5Fhy2xMzm?= =?us-ascii?q?aEp56Coe5ljkqhtLz+JlLBf/XXnCqwevcDc7UoCfLABR7gFA+UjaLdCe4vh0Hy?= =?us-ascii?q?FC8Z2rtBaNJXCDZwRUEWEJXVSJB1/jPray/9nB8/CYBva5L/bVZ7WBt/BeV+yU?= =?us-ascii?q?yp21yotp4SyANsORMXl+F/c7wFZMXWhlG8TFnDUCUzEYlyTXYMOAuRi8/Dd4ot?= =?us-ascii?q?q48PTxVwLl/ZGPBKdKMdVz5xC2hr+ON/SNiylkMjtY2ZYMxHDSxLgZwlESlzlk?= =?us-ascii?q?dyOxHrQYqS7NUKXQl7dNDxIBZSJ/Ls5I4Lg43glKOc/Wkcn62aJ9jvIvDFdFT1?= =?us-ascii?q?PhkNmzZcMWO2G9KE/HBEGTObSAPz3E2dn3YbunRL1ejeVUrQawuSqVE0/iODSM?= =?us-ascii?q?jT/pWAyuMe5WiCGXJhteuJuychx1E2jsUMrmagGnMN9wlTA53KY0iW3QOm4TKz?= =?us-ascii?q?hzaV1No6aL7SxCgfV/BnZB4WB/IemAhiaZ6fPXKowPvft3BSR0lOJb4HMgx7tT?= =?us-ascii?q?8i5EWOR/mDHOod52v1Gmju6PxyJ8XxpPpTZLg4SLsF5/NqrH7ZZAWGzL/BQX4W?= =?us-ascii?q?WXERQKqMNvCsfztKBI1tjPiKXzJS9Y/NLb58QcGdbbJdmAMHo5LxXpHjvUAxEE?= =?us-ascii?q?TT6vLm7fgENcnOuV9n2PoZgwsoLsl4YWSr9HSFw1EesXClhiHNwHOpt3RDQkkL?= =?us-ascii?q?+Fg84O/nW+th7RS9tZvp3cSv2SBvDvJyqDgrlfexsE27X4IpoPNofjwUxtdkF6?= =?us-ascii?q?nJjWG0rXRd1NojFhbg8zoEVI6nd+VXY+20fkagOx+n8cC+S4nhksigtxee4t7i?= =?us-ascii?q?vj408rJlrWoys9iE8xlsv/jjCVazPxL6CwXZpKCyXusUgxKZD7QwdvYQ20g0Nk?= =?us-ascii?q?KC/OR6hNgLt4aWBrlAjctINVGfFCVq1LfgUfxeuLaPUoyllTsSSnxVVa6uvCB5?= =?us-ascii?q?tijBEqfoCsrn5a3QJscsI1L7TKJKVV1lhQmr6Oviiw2+8s2gAeOUcN/36JeCMT?= =?us-ascii?q?okMILKMmJy2m/+x39wONhyZDeHINV/o2ovNm7EU9NPqczyj4yb5MNlixN/CDL6?= =?us-ascii?q?Oeo2XAm9SITU0t2UMTjUZF+6R20cA4c0ePTU8g0L6RGw4ONcrYJgFfd9BS+2TL?= =?us-ascii?q?fSaSreXNxop4P4G6FuDyU+COsqcVgkW/EQYmGYQM894NHp620EHXNc3nNqIKyQ?= =?us-ascii?q?0x5AT3I1WIFO9JdwyPkDcGpcG/0ZB20JJBKTEaBGVyLT+45q3LpgMwhvqMQss2?= =?us-ascii?q?aG8AXoQYLnI2RNG6mylBsntdEDa31+UZyA6e7zPhvSnQEifzb8BiZPaVYhNsDs?= =?us-ascii?q?u6+TMh/KiqkVTX6InRJ3nmNdR+vd/C8eAap4yHCvxOS7l9r0fclpJXR3ytS27A?= =?us-ascii?q?DcS5J57uZIkwddb0EGq1UkSjizIpSMf8JMqtLqmNgQHvWYZUsIma0Ss+Os+8Fj?= =?us-ascii?q?ARAQx/q/sF5K1ieQ0Je4A7bgLwtwQiK6y/Jx+V0tq0Q2m3LztWU+JSzeS9Z71Z?= =?us-ascii?q?ySoscu+6x2UhTpE80+m471QNSIsMjh7A2fapf5NeXjTrGnxBZwXPojI0mHJlNu?= =?us-ascii?q?Yz3ugw3gvHsVwcMjCNc+xpbnZLssonClOTO3p2DHM0R1GBjYbZ5A6jwawS9TNH?= =?us-ascii?q?n9lIye1FrGT+vpjHbT23RqOrr47YvDA9Ytg4vaJxK5fjLdGctJLehDDfS4PQsg?= =?us-ascii?q?KdWi6gC/VagsRQID5fQPRQg2ElP80GtpZB6Uo2Usc+PKRBBrAxqL6wdTdqCjUf?= =?us-ascii?q?wjMeV4OFwDMNmPy826fAmheWbpsiLAQOsI9ejdsFTy52fiQeqbe/WIXUjWCLVn?= =?us-ascii?q?MGLxsU7QRI4AIAl5F/fvr54IXWUJBMyyRao/VuUivEDpNo7Uf0SnmKgVjkT/Ws?= =?us-ascii?q?i/ap0hhIzPLrydYWQwJ/CVJHyOZIiEQoLLB3K68fvo7Osz+IekP6vH7jyOS8Pl?= =?us-ascii?q?lRzNfYd1vmA4rZrWD8SDET+WUIRY9Tz3HSDZQTnBBiaKkxoVVMIYamd13/5zw4?= =?us-ascii?q?3YtpBKW3Wtqxy1Yjs3kGWz+gE8BdBOF+rFLXRDplboilqZn/J5pSQm5Q+Jicq1?= =?us-ascii?q?hDk0VgKC+5xoRCJM5T+DIMWyJPoTqFttuoVMJDwdN2D4MLItpno3f9H6dEN4KL?= =?us-ascii?q?o3w4vbzvznHZ9is5sFe9wzWzALG3QP5D/20ZAQUpPGWeqk8gD+c29WfS6F/NuE?= =?us-ascii?q?hu/+hHHriPkVlxoDFlE59UHDZJyHalI05wTHRdsuVaKaXVc9BHTPUoYx+gJQA+?= =?us-ascii?q?H+Y830OV5UF0gWv5YytquwtG/CDdWhI5VTUJjrfogjISsMenNiEGS5hQdzUucz?= =?us-ascii?q?/FKx6HmSBQpBtfa1tlW4oDDdZB5r4WxpZb8dTaSUa0Ny4FWAJtNhgi3fpYj05D?= =?us-ascii?q?v12SeTrBAgqwafbPrhp3cN+RrM6uMvv58hlIipn8veA56aoMWWOplReqQdDEoI?= =?us-ascii?q?/2rseKuVeWdKfkL+28ZmfMTDrLjR+unrorEofF/zPNPwpBN5l112crbYLnCWHV?= =?us-ascii?q?IRRMP7gbKFZDVaBmddVGpfhXaNRqeKkV5aNgBA+LSx30FYOzq/lGK0rcSi7FLy?= =?us-ascii?q?Wd6OC/p5zc7aDFQ+j6esOM32rHQ75wPppi8zn0Barl0Y9E9Urqwfpt8kR6SUbY?= =?us-ascii?q?PCyfsNvhIR4E69e4ekvkoJIpASvcAI1sn3r12kFAa80XTjWy8JQD1JNW8mv/Sf?= =?us-ascii?q?5j30jot+1S6qNk5pUp7LBv1ce0P73dKfBAvU9gGBiUCR1g9o8xD2hnW2BRfugR?= =?us-ascii?q?Je/NfaQDk8/htf34GrcK6B2R5+xZc8HIJ1/Amsm4DjGTVwBEkB0GqT4AIQuWz+?= =?us-ascii?q?SFlLNsSca5uej53Vog412kIR4CyLBi+5uE+raSq+DNdBbRy6YLWrTxRszvtLss?= =?us-ascii?q?o12d6ecilLEQZmx/exenH/QFVs4B2mfgyrgnzSA2HMPZGLLg4/pDWGgnnj/7np?= =?us-ascii?q?B9AlEWGu8VHbWX/IRRhGE4m/fDOt0RaKBClX6FFQS4Hb8a1X6r9yyXLXFngh7U?= =?us-ascii?q?1RHwT3mz7FjroiBmWibM083skkxOVrmwH0tSWTSmOVNgujOVIAXorMb3ubgy7E?= =?us-ascii?q?wuPWzkqdONlG+lOLxJGs3yP8GTLjcvq1IWlpIxQMaj2YcBGdqyON0R6m1xbuPC?= =?us-ascii?q?62O3lC9Mu6FHh47F78GU/PXXGGOsj6ycq7WD3jBX0GM4vU0l6tC9Kv7O+8CKQ+?= =?us-ascii?q?622GoLSCd/oQTBVQavqrPHt1AUJVCL0EDTlYwPOdFZ22U41k746+U4RdIz9R9R?= =?us-ascii?q?FoDeaPMeqzHzPyH0wVWEY94tUCmRzSdXFErvEVZkAKg8xH7wvMXRmHfU4F0oQ4?= =?us-ascii?q?l9elfphRNpEoo4Llgt50IPwioZFggNaw6UA620BUj/KosET0cDYwyd3LemYqc3?= =?us-ascii?q?wVFzwrS36e/WaexzGa8NNvFDgQ6Kh1VbFYwZsaoFQLJkYVBd6K/XqRLmC4jmWf?= =?us-ascii?q?jmiWQ/NfmxQsBb/sAWqX0i7RqhSBa675dM8aobgoiSdqFYeZjMoNx870B/6D4U?= =?us-ascii?q?bCNNngJwjxynXuAHv+3j+cLUsISy5eahSqktXP8b9x4qCGRil5HwmkwsocnL1+?= =?us-ascii?q?dATY3YkYb/8AFII3ORvYbVzRl9JvQUK4KqerZg+G8LJy4AKHISJdCWceUz4zdx?= =?us-ascii?q?MDXP4FxPGsIMZNICM8XXhQ9ZkVbpV69P9sXFBlCUEYBzd9on72Dv0jA67YM8Uv?= =?us-ascii?q?r86D+xPZ3Q9FBNP+hNjSp2ltLCpfQVweLIBygK5XmUcAR6wiSfxJaTEfnw4P+M?= =?us-ascii?q?yNbOV1wcBCI2VJ1dJDWa8wy9WuW1jInpUh+T6sLrmJIxbl6QSWCxnKULtaZMC+?= =?us-ascii?q?1Ahjzg3jdAEoD1hvSVs8ej6WZMrl1ICppz4gHFGKRROZV7Ixf4mtOoRkdiHCv/?= =?us-ascii?q?ft/bdh40tOqR3OcM7P10N1Hiao8DPhIE17X65GJJTgt0VrH2ukyWXeQPa9Z9Vf?= =?us-ascii?q?zEr39V6YN8K6AVJ1iSvobqripSpFAwHgApdKc6riZGeUnWgA1VR6H0taYPigQG?= =?us-ascii?q?S952p1NMGWKrNWI65jrHSbpajKmLB/wI6TWfVKoOXFt0MilmWRO6xI1ue6e1nf?= =?us-ascii?q?BAqm5GkT1yoP420zxhQxuwvjbsqLwJ2TIh/rG4qToAtGdBTuqAiSfJCU9MwO4M?= =?us-ascii?q?jagCF3bo8Ua8b2UbbIvu/LlnItzt9Y8g43sjZhUjezcJXf+6ByHxiKOIBZePsM?= =?us-ascii?q?lHiR6It8jPYqW/LS8INrQy0RjjXWRy0hDCnBZ092sGWjqg48M/JIWmIMor2yWm?= =?us-ascii?q?F27adFYK/6NIv9D8tVEOTOQsb1Nu3n9v0s+dRi0CXMbPAXo6jhA4aWVYd5JO8R?= =?us-ascii?q?0aF64ogjaOpKVJ4gEUYDPJEou4+4jQnMHI2WI+Tddr3W/WuKyFho0w331hhtx0?= =?us-ascii?q?7zSCuHIMeOzES8VsGGT81p9DyeziYPWgquEHSJV8x7SnS/ICNtSj9na32JVtQU?= =?us-ascii?q?+p3LMeH0C2MOUb3LfUTz+lSXGEWeSMa2WMnSg2MkD85RmsNVA2Zt1Fr0kjPeve?= =?us-ascii?q?nJJckRPuUa9sTCWKuVDb1HAjMf8ddw8ut4enfwsKTeAPaOiYIegj2+Y+CFwKb3?= =?us-ascii?q?/IASR6Eem2vkCxnIJjIXVv/V36Yfjx8gDhKNaSGBkEEI7Crp52/fy6R36BNmF7?= =?us-ascii?q?wR13PUl06/3fGEoruu9baZaRksDah85n3u4da/dtLSo9t8YPmoJi7ImZy9uKcR?= =?us-ascii?q?DNwZbxO97VpuKUA/vBwEQ2YmtaSKYWYRvp54UmOd40Q7jTHbpavRQfAqg3W54h?= =?us-ascii?q?OH3y9KFzKgN8bAjRaK6ygsb0uuKBfoFUqGPO7lIsMCfcvAUOxeeqQgx9c5CnnG?= =?us-ascii?q?7yIJQ3RjJds91tFAVpE5ZVF8MHtQqnDIaemLunhN+p50N6p+gKvLL+Cv/U0NS5?= =?us-ascii?q?3p1xUIZB6E2KPTbRAaxrjVp/juS2nPjMyJ7xCdntedkcTuh0XnbFaqPaHoW4Mj?= =?us-ascii?q?+PNNr8e1RH87GAzr10SRCRZCHlX6qcqiKoLvJk4V80yoZgZurc0CQt763H2Nv1?= =?us-ascii?q?f2xboSOjomCSOZtH6FzFH/feXw5VSfWZ7GZlB7MYYpXu+OcIL9Mi3MCW4xNv4z?= =?us-ascii?q?RazMuFP6+ho1fI2kJ6c5LbMUTo1z89WYkLOxS/LVAsjHTYqnvHB3RcKdKoKc53?= =?us-ascii?q?gNaaFhbt/VV+mXkxZm5dHWrlXcyRNnYf28K/Yg2K6Q1KA9EMke6reU43qLeyRv?= =?us-ascii?q?dwOppfguiqt6sIkcxvKy7RQMhVJDzQLLBsMjpWFOXPq0AiYgQYvLgtRoc1eZ+O?= =?us-ascii?q?LVsDMEeB0iPy0RDP0Eztd9yqzqmFOiAW/Wtbz7jdyzhDuxG5ueqFgs3kSL3ZaY?= =?us-ascii?q?v5U+LSMCokUDGaQi8/EVio+VeipfUEuPuYIWEColEbeC6SDxQTpq93p9jKEmDT?= =?us-ascii?q?gfFjfIENhP2CWSD/Ui54lK0pCStQqECMReYDFQnRb3/8j2pcuBCiKuVK/X37c7?= =?us-ascii?q?2S3rBVVPAOAotQbv2ZRMPVef9EKDgzjDUZOfizf9nHorYn1lLHV3AZE6jV9FGE?= =?us-ascii?q?Sk6ZXOCczSrxXYoJp4g0pjYo+tXIky91FqTIOKyfpySv8o6jlyuYv/fRVmwzbE?= =?us-ascii?q?w0mu4CB3OBwBZYImEeF94VoF3tQrKHZ0tUyn0pi+Vu2x8KeARoVX1u1GZbnPmn?= =?us-ascii?q?Gs1EV14bknmuTOcAbF9pEDM65VWK7RHqYdwcpcDTQHdT9qACSYoYMPYl6YraNb?= =?us-ascii?q?AOwPk3xjJmoS07syKbD19HiAKK7bbQFrpmxrJe/Wk44+12XkaXTjPddWjHzI6m?= =?us-ascii?q?BtlKxShwvH/k2c3UvvpxO7REvY15BkkFAT4lbuzaqCtNSknoyQCyuFC9Bz3YLz?= =?us-ascii?q?UHpH4QKCgEcPtl5/NquxbPMNDa4AWfsLxyhlGsDFOUC76w2ZVOTMqvzwKyZDNX?= =?us-ascii?q?ah2qEYx7rrBGk9NBMusceYGiDgWZfUDFBQWCtnVJrUDn?= X-IPAS-Result: =?us-ascii?q?A2EkBQBJ0yxY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgww?= =?us-ascii?q?BAQEBAR+BWKRMgWSOOIZGJIgYUwEBAQEBAQEBAgECXyiCMxqCHAIEAQIkExQgD?= =?us-ascii?q?gMJAQEXCCEICAMBLRURBwcLBRgEiEu0VD0qAos3AQoBAQEjiEGGcBEBhX0FiFG?= =?us-ascii?q?HDIplkGgCiheGCkmRDlVdRoU+UQGFeIItAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 16 Nov 2016 21:48:04 +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 uAGLlqOi032354; Wed, 16 Nov 2016 16:47:54 -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 uAGLlp2r160485 for ; Wed, 16 Nov 2016 16:47:51 -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 uAGLlmsj032338; Wed, 16 Nov 2016 16:47:50 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CtAwAM0yxY/yNjr8ZeGgEBAQECAQEBAQgBAQEBgzcBAQEBAR+BWKRMkByCOIQVhiECghJTAQIBAQEBAQJihRECBCdSECAxVwcSiGy0VD2LYwEBAQEBAQQBAQEBI4hBjH8FiFGHDIplkGgCkCFJkQ5VhmEdNAGIJQEBAQ X-IPAS-Result: A1CtAwAM0yxY/yNjr8ZeGgEBAQECAQEBAQgBAQEBgzcBAQEBAR+BWKRMkByCOIQVhiECghJTAQIBAQEBAQJihRECBCdSECAxVwcSiGy0VD2LYwEBAQEBAQQBAQEBI4hBjH8FiFGHDIplkGgCkCFJkQ5VhmEdNAGIJQEBAQ X-IronPort-AV: E=Sophos;i="5.31,650,1473134400"; d="scan'208";a="5828413" 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 16:47:50 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3AG9DoVxYZ52S6OTAAXRhlYmf/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZr8yzbnLW6fgltlLVR4KTs6sC0LuN9fm8EjVdud6oizMrSNR0TRgLiM?= =?us-ascii?q?EbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ/iOgVr?= =?us-ascii?q?O+/7BpDdj9it1+C15pbffxhEiCCzbL52Ihi6txjdu8YZjYd/Kqs91gbCr2dVde?= =?us-ascii?q?hR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG87+MPktR/Y?= =?us-ascii?q?TQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD+/4apnVAPkhS?= =?us-ascii?q?EaPDMi7mrZltJ/g75aoBK5phxw3YjUYJ2ONPFjeq/RZM4WSXZdUspUUSFKH4Gy?= =?us-ascii?q?YJYVD+cZPehWsZTzqVUNoxW5BwasCvjixiNUinLswaE3yfgtHR3A0Qc9H9wOqn?= =?us-ascii?q?PUrNDtOaYcUOC1yK3IzTTZYPNTwzvy9JLEcgomof6XQ71wa9bRyVI0GgPEiFWQ?= =?us-ascii?q?tZLqPzeP2usRtGib6uxtXv+shW4/swx9vzyiy8Q2hoXUhI8YykrI+CF9zYovK9?= =?us-ascii?q?C1SEh2asO+HpRKrSGVLY52T9siQ252vCY6zaULuZC+fCgRzZQnyATQZ+Cbf4SW?= =?us-ascii?q?+x7jVfqeLitiiHJrfbKznRey8U68yuLiUsm4ykpFri1AktXUt3AN0QLc6tSfR/?= =?us-ascii?q?dg+kqs2iyD2x3R5+xEO0w5ka7WJ4Qvz7MwjpYTtF7MHi7ymEX4lq+WcUAk9/Cm?= =?us-ascii?q?6uTmZrXmop6cOJVxig3kLqsigNa/AeMjPQcQRWib5f+82abi/U3/XLVFkPk2nr?= =?us-ascii?q?PFv5DdIMQXvrS5DBNN0oY/9xa/CC+r0M8FknkcN19FZBKGgJTpO1HJOvz4C+y/?= =?us-ascii?q?jE62nDdkwPDGIKXrAo/RIXjbjLfhYbF95lZHyAUtydBf5pRUCqwOIf/oRk/wtM?= =?us-ascii?q?DXDh8+MwCuxebnE89y2pkRWWKIHK/KeJ/V5ESE/cozMuKMY8kToz+7JP87o7b1?= =?us-ascii?q?gHs4n0INVbW41psQLnajF7JpJFvKT2Drh4IeEGMOvwM7CuesklqIXCRPfF6zWb?= =?us-ascii?q?4x4ncwD4f1Xs/4WomxjenZj2+AFZpMazUDUwjUHA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GSBABJ0yxY/yNjr8ZeGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwwBAQEBAR+BWKRMgWSOOII4hBWGIQKCElMBAQEBAQE?= =?us-ascii?q?BAQIBAl8ogjMaAYIbAgQnUhAgMVcHEohstFQ9i2MBAQEBAQEEAQEBAQEiiEGMf?= =?us-ascii?q?wWIUYcMimWQaAKQIUmRDlWGYR00AYglAQEB?= X-IPAS-Result: =?us-ascii?q?A0GSBABJ0yxY/yNjr8ZeGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwwBAQEBAR+BWKRMgWSOOII4hBWGIQKCElMBAQEBAQEBAQIBAl8ogjMaA?= =?us-ascii?q?YIbAgQnUhAgMVcHEohstFQ9i2MBAQEBAQEEAQEBAQEiiEGMfwWIUYcMimWQaAK?= =?us-ascii?q?QIUmRDlWGYR00AYglAQEB?= X-IronPort-AV: E=Sophos;i="5.31,650,1473120000"; d="scan'208";a="834594" Received: from fmsmga002-icc.fm.intel.com ([198.175.99.35]) by emsm-gh1-uea11.nsa.gov with ESMTP; 16 Nov 2016 21:47:49 +0000 Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga002-icc.fm.intel.com with ESMTP; 16 Nov 2016 13:47:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,650,1473145200"; d="scan'208";a="32131773" Received: from wcrobert-mobl1.sc.intel.com ([10.3.137.21]) by orsmga005.jf.intel.com with ESMTP; 16 Nov 2016 13:47:45 -0800 From: william.c.roberts@intel.com To: sds@tycho.nsa.gov, selinux@tycho.nsa.gov Subject: [PATCH v2 2/2] expand_avrule_helper: cleanup Date: Wed, 16 Nov 2016 13:47:38 -0800 Message-Id: <1479332858-12948-2-git-send-email-william.c.roberts@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479332858-12948-1-git-send-email-william.c.roberts@intel.com> References: <1479332858-12948-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. Minimize the conversions of AVRULE specification to AVTAB specification, they are almost the same, the one exception is AVRULE_DONTAUDIT. 2. Clean up the if/else logic, collapse with a switch. 3. Move xperms allocation and manipulation to its own helper. 4. Only write avkey for values that change. Signed-off-by: William Roberts --- libsepol/src/expand.c | 131 +++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index 3e16f58..fe8a99f 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -1781,6 +1781,47 @@ 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 uint32_t avrule_to_avtab_spec(uint32_t specification) +{ + return (specification == AVRULE_DONTAUDIT) ? + AVTAB_AUDITDENY : specification; +} + static int expand_avrule_helper(sepol_handle_t * handle, uint32_t specified, cond_av_list_t ** cond, @@ -1790,44 +1831,21 @@ 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 && 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 = avrule_to_avtab_spec(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 +1857,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) { - avdatump->data |= cur->data; - } else if (specified & AVRULE_NEVERALLOW) { + switch (specified) { + case AVRULE_ALLOWED: + case AVRULE_AUDITALLOW: + case 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 +1874,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, "Unknown specification: %x\n", specified); assert(0); /* should never occur */ }