From patchwork Tue Jan 31 19:41: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: 9548303 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 D663660425 for ; Tue, 31 Jan 2017 19:44:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7AAC27F81 for ; Tue, 31 Jan 2017 19:44:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB61528304; Tue, 31 Jan 2017 19:44:14 +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 C5FB627F81 for ; Tue, 31 Jan 2017 19:44:13 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,315,1477958400"; d="scan'208";a="2769902" IronPort-PHdr: =?us-ascii?q?9a23=3A8gxYFRdppr36xMfBEA77lQJdlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcq4YBKN2/xhgRfzUJnB7Loc0qyN4vymBzFLuMzf+Fk5M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFRrwLxd6?= =?us-ascii?q?KfroEYDOkcu3y/qy+5rOaAlUmTaxe71/IRG5oAnLt8QbgYRuJrsvxhbIv3BFZ/?= =?us-ascii?q?lYyWR0KFyJgh3y/N2w/Jlt8yRRv/Iu6ctNWrjkcqo7ULJVEi0oP3g668P3uxbD?= =?us-ascii?q?SxCP5mYHXWUNjhVIGQnF4wrkUZr3ryD3q/By2CiePc3xULA0RTGv5LplRRP0lC?= =?us-ascii?q?sKMSMy/2/Nisx0kalVvhSvqRJiyILQeY2ZKuZycqbbcNgHR2ROQ9xRWjRBDI2i?= =?us-ascii?q?coUBAekPM+FaoInzv1sDrwayCAejC+zzxTFHmGT20LYm0+kjCwzKwBYtE84QvH?= =?us-ascii?q?nSsd77NL0SUeewzKTQyTvMdfZW1inm6IPVbB0uu+uMXa5ufsrL1EIiEAHFj1uM?= =?us-ascii?q?poP/JTOVyvoBvnOH7+tgSe2vi2knpxt3oji03MggkIbJhoULyl3d8yhy3YU7Jc?= =?us-ascii?q?WgRUJmbtOpH4FcuiGHO4dsXM8vTH9ktDwnxrAApJW1ZjIFyI49yB7ac/GHdo+I?= =?us-ascii?q?7Q/9W+uJOjd4gW5leKq4hxav7Uis0u38Wdew0FZNtidFjsPDtmoM1xzO8ciLUO?= =?us-ascii?q?d9/0e91jaP0ADf8OdELlwvlaXHMZIhx78wlp4LvUTCGC/5hln2gbeLekgr9eWk?= =?us-ascii?q?8eTqbqj8qpOCOIJ4lBvyPrk2lsy6G+s4MwwOX2aB+eS70b3u5Vb5T6tOjv03lK?= =?us-ascii?q?nZrZ/bKd0Aqa6+Hg9V1Jos5AikDzq9zNQZnWUILFJCeB6diYjpIEvBLOr3Dfe4?= =?us-ascii?q?nVSgiC1ryOzePr39HpXNKWDOkLXmfbZ78UFc1AozwspZ559PCLEBJ/TzWkrru9?= =?us-ascii?q?zDEh82LRa0w/39BNV6zIMeVnqFArWFP6PKrV+I+uUvLvGOZI8XojnyN/sl5+Xp?= =?us-ascii?q?jX8/mF8dY7Kk3ZUTaHClEfVpOFiZYXzwgtccC2sKuRA+TOPygl2YTTFTf2qyX7?= =?us-ascii?q?475jwjBoOmDIPDRoWzj7ybxyq7EINZaX1BClCWC3job5+EW/AOaC2MPsBhjiYI?= =?us-ascii?q?Vb+7S48uzRuurhP1y6J7LurI/S0VrY/s28Rw5+3UkxEy6SF4At+D026TVWF0n2?= =?us-ascii?q?IJRzgw3Kxlp0xy1EuD27Big/NEDdxT++9JUgAiOJHB0+x1EcryVxndcdeOTVap?= =?us-ascii?q?Xs+pASotTt4rxd8BfVp9Ec24jh/fxyqqH6MVl7uTCZ0086Pc2H7xKt14y3bCza?= =?us-ascii?q?Uhjl8mTtFJNWK8nK5/9AnTB5DXnEmDkaala7gc1jbX9Gif1WqOoF1YUAloXKrb?= =?us-ascii?q?RXAQfFHWrdXi5k7ZV7+hE64nMgpayc6aLqtFcMHmgktcSPfkItTebHq7m32sCh?= =?us-ascii?q?aQ2rOMcI3qdn0T3CXHEkcElRwc/XedNQUlAyehu2PeACV1FVPheEPg6+5+qGm0?= =?us-ascii?q?TkUs1QGFc1Vh16ap+h4SnfGcSOkc3rEDuCc8sDh0H0yy39HRC9qdvQZhe79cYd?= =?us-ascii?q?wl6lddyW3ZrxB9PoCnL616nFERbh53v0Lw2BVtEYhPi9QlrHYwwAp1M6KY30tL?= =?us-ascii?q?dymE0pDoJr3XNm7y8Qiva6HI3lHe1NGW97wL6PQlt1XjuwSpGVA4/3VgydlV3G?= =?us-ascii?q?OW5o/WAwoKTZLxTkE3+gBhp7HUeCk94JjU1WF3PKmvtD/C3NwoBO4/xRamZdtf?= =?us-ascii?q?Nr2LFBPqGc0AG8euMPAqm0Subh8cMuFd7qo0P9+4ePucw66mJ/hgkyy8jWtc/Y?= =?us-ascii?q?B911iA9y1mSu7Hx5wF2e2X3hObVzfgi1esqtz3lp1ZajETBGW/zTPpC5JWZq13?= =?us-ascii?q?YYkEE3yuI9GtytV4mZHtR2ZS9ES/CFMexM+pZR2SYkT73Q1R0UQXpWKomTCjwj?= =?us-ascii?q?NujT4ptK2f0DbJw+T4exoNInRLS3V6jVfwPYi0iMgXXFapbwc1iBul4lz6y7JH?= =?us-ascii?q?q6R/KGnTR0hIcjPyL2FjVKu/rKCCY8lV5JMvqyVXX/y2YUqGRb7lvxsazyTjEn?= =?us-ascii?q?NaxDA6bDGqpoz1nwdkh2KZLXZzqmfZeM5ryBfE/NzcRPhR3jsaSyljkzXXAEaz?= =?us-ascii?q?P8Wx99WOi5jDqvy+V36mVpBLaynryoeAtC+l6m1wHRK/mP6yl8b8EQgnzSD7zM?= =?us-ascii?q?NmVSLSrBbzeoPrzbi1Mfp7fkl0A1/x89J6FZtjkos0np0fw2IWiY6S/XoDjWfz?= =?us-ascii?q?NtNb1Ln7bHYRQz4LxMLa7BLj2EJ9MnKD35j5WWmFwst9e9m6ZXsb2iEj4MBME6?= =?us-ascii?q?eZ979EkjVzolqjqwLef+R9ki0ayfs0534Qm/sJtxY1ziWBHrASGlFVPTLqlxuV?= =?us-ascii?q?9N2+sqNXa3uvcbSq0kpxg8yhBqmYog5AQHb5ZosiHSho48VnKl3MzXnz55r4d9?= =?us-ascii?q?nRcdIStgSYkxnagOhTMp4xkeAKhSV/M2LnoXIl0/I7jQBp3ZyipIiIMXht/Kan?= =?us-ascii?q?DR5ALDL1Yd8T9S/3jatFg8aWxJ6gHo96GjkRR5voSu+oECgOuvv5OQaOFyc8qn?= =?us-ascii?q?iFFrbFGw+Q9ltmpWrVE5+3L3GXOGUZzdJ6SRmTPkNfhhwUXDI/npMiGACl2tHu?= =?us-ascii?q?cEBj5j8L/l74sBxMyuB2OBbjTmfTvgCoai07SJKHNhpZ8hlC51vJMcyZ9u9zGj?= =?us-ascii?q?tX/pmlrAOTNmybex5HAnsSV0yCGV/jIqKu6sXa/OiAGOWyNf3ObquSqeZGTfeH?= =?us-ascii?q?2Yqv0pd6/zaLLsiPJGNuDvMh1kpGR395H8PZmjUURiMNiy3NatSXpBCm+i14ts?= =?us-ascii?q?q/6ujkWBrz5YuTDLtfKdNv+wqsjqebL+6dnyh5KTdC1pMX2X/Ixrkf3FgIhCFo?= =?us-ascii?q?azatEK4PtSrXQKLXgK9XAAYRazlvO8tQ86I8wg5NNNbDitzrzbF3kPg1C1ZZVV?= =?us-ascii?q?zmgcypZNIFLH+jO1/dA0aLLruGLyXRw87reaO8VaFQjOJMuhKrojmXFEvjPjWY?= =?us-ascii?q?lzn1TBCjK/pMgz+HMxBEo4GybBJtCWnlTNL7ZRy2K8N4jD0swb0pnXPGL2AdPi?= =?us-ascii?q?Jgc0NWqb2Q6zlUgvJlG2xO9nBlN/WLmz6F7+nELZYbqeBrDT5ql+1A73Q11aBV?= =?us-ascii?q?4TpfRPNvhivdtNFurE+9kuWVzDpoTgZOoC5RhI2XpUViJbnZ9p5YVHnf/RIN4m?= =?us-ascii?q?KQCxIRqtR4FNLgoKFQxcLJlK7pLzdC6d3U99MGB8fIMMKHLGYhMR3xFTHOAwsK?= =?us-ascii?q?VyCrOn/EikxaiPGd6HuVrp0gpZjtnJoBUbhbVVMvGvMdEERlE8QIII1rUTM8jb?= =?us-ascii?q?6bkMkI6GKirBnWQcVWpIrHVvWTAPrxLjaWlqNEZxwWzrP7NokcKor720l+ZVZg?= =?us-ascii?q?h4TKB1DcXdZTrS19dgU0ullC8GBiTm0v3ELocgCt4X8XFfGqhRM2jwx+Yeoj9D?= =?us-ascii?q?jy/1c3OlrKpCw1kEYvg9nlhy6ecCLpJqeqQY5WEzb0t1Q2Mp7jRQZ6cxe9nUh/?= =?us-ascii?q?OTfHQLJRlKdgenptiA/HuptPGORQTatabx8M3fuXfekn0UxAqiW7wk9K/fHFBo?= =?us-ascii?q?V5lAQ0a5GstW5P2wJ4YdEuJKzQPrdGzl9ehqKWpC+nyOAwzBUYJ0kT7GOYYDQI?= =?us-ascii?q?t1AQNrk6Oyqo+fRh5hGFmztFfmgDSuQlovZr9k4mIeuP0Tjg07lZJkC2LeyfIL?= =?us-ascii?q?uTu3Lcms6QXlMwykQImlFY8rdsz8cjclebV1s0wbSLDRQJL83CKA9Ob8VM6HfT?= =?us-ascii?q?YDyOseTRwZN1JYm9EP7nTfOWvqYOnk2kBBopH5gL7skZA5asy1/XIt3oLL4f0x?= =?us-ascii?q?ot+h/mJE6fA/RKZRKLii0Ir9u7zJ9q24lSPCsdDXxhMSWw5bbWpggqjOCFXNgo?= =?us-ascii?q?fncQRpEEOW4uWM2mhy5ZuGxNDDet0u0H1QeC9CXzpiLMDDn7dNpuf+2bag9pCN?= =?us-ascii?q?2s/jU/6ae2g0bN8prCP2H6KchiutjX5OMeoJaHEe1bTb98skfbgIRYSHqqU3PV?= =?us-ascii?q?Hd6yPZjwZJEmbcboBXaiTly/lzU1Qt/qPNmzKqiIgAfoRZtbsYSAwD8jMsq9GS?= =?us-ascii?q?0EFBdru+EP/qR8ahMfY5Ajex7nqxw+N7CjIAefytiuQHytKDtMQPlZ0eW6Z6da?= =?us-ascii?q?zyUrbu+i1HQsVJc6wPer8UQVXpEFkgnexeq/Z4lZSSXzBn1dewDIpSoll2hgNv?= =?us-ascii?q?0/zfo+wBLIq1YTKCqHdOp3Z2xYp9s8H0+dIW1qCmokQF+RlZDM4gqt378O4SRS?= =?us-ascii?q?h9NU0O1DsHj5uJ/QeimhV7eqqZrPtSosdNYmo7BrPYzlPMSGqIvUnibDQ5nIrg?= =?us-ascii?q?2FTCm6GuJBlddOJiJVW+NHlnw7OcMYo4pB8lA+Vt0+JrBVD6ksvL+qYyJ+DSEO?= =?us-ascii?q?1S8ZS5+A3Dsaj+ezxrvalxOQcJA8PxwBq5hNn8USXDV3YiwEoq+vTYLWl3WLSm?= =?us-ascii?q?ITOgcc8RxM5B4clo93Zu3l+ozITJ5QxD5WpPJ0VjDLGIFx+VXmUG+bnV/2Re69?= =?us-ascii?q?nOyu2AJd0Ojj0sIHWBJlD0hS2fpWnFMyKL5rM6kQopLKsjiQeEPgoW3i1fCrJF?= =?us-ascii?q?ZUyczbbVH4CpTKtXbkWC0G5XIUXZNPyG3YFZkKiQp2crwrpFJXL429Zkb+/SYr?= =?us-ascii?q?x5p3ELm8VMCrwVklrXIHRyelE9pBF+9mv0jNWD1geZyrrovqO4lKSG9K5JKds0?= =?us-ascii?q?tZkFlqMyOhx5tQMd1C4j4NXDhKoDWSptiyRdZC2cBoEZADPM1zu3DnGKNLIJKR?= =?us-ascii?q?uWE5uqTzyn/F/DAxqE21xC+uG6++Ve5Z/HYTGgQoJ2SftkkgFPEg8mHM/VDRql?= =?us-ascii?q?p05ftUBqCTjUVtpzZwBpFOBjBV1X+7K1R8UnxGvPtGKKTPc81RWP4yZQexNBw4?= =?us-ascii?q?EP4pxU2J/UVvknf+bC1+rAxa+zrSXwMsTykanq/tmSECqsGgITIaRIhIYi8nby?= =?us-ascii?q?fZMA+bmCdXvRhZa0F2W5AWHNdF+7cH3YRK5MrOU0CsJj8ZXBZ6LAI3zeJflVJf?= =?us-ascii?q?sEWfYS3dEQ2odfPUvx1rYcuRqdWmIO7//AhZloPtqPo4+LkbR326hQ2tRsjTr4?= =?us-ascii?q?/mud2QrESOcLr3PvahbnDfVDjMlQ6/hbM6AJnQ5STTNxBbK5Ziw3o+fZfhEXLL?= =?us-ascii?q?PQhBJ68DJUpbUr51ZM5bre9EfM9rZrwJ+bNzCR2aXB/vHpKgrOVeJFbJWTveNz?= =?us-ascii?q?mB8vC4oY/L9rPdR/TvatCOynraTa96JYt16T7+G7j2y4Be4Vb21u1r9kxkVVjM?= =?us-ascii?q?KzqBo8j5JgMX+MmicVPvvoc3EjzLAJd/imbty1pEd8oQXS2l7ooUx49e6HntV+?= =?us-ascii?q?10yE7zv/NO97N884k4/6hpyduoJafVMflaqVRnAgSOCQp36pUgG3N/R2dMYu8L?= =?us-ascii?q?NPjeY6IZjdz0q+/tE6wb8hqV+/ZWadHfPUHOhtG/Ci2ASRxDhAoBtSQaIRWC2P?= =?us-ascii?q?GYgKJ0VMKlpfTj2k03/Vi+LxkGzLRz6oeY4KaIo/XXbxTJx7geRqfqXt/zrqgr?= =?us-ascii?q?u06K+PIkkqQBd3dobA2hCucRTMkdxn3vzaoy1yIjD9vDH678+P5ET385nCjvm4?= =?us-ascii?q?p6H1UNHvMbB6SL8J9bnmcln+zZKtwWfbxDmmmVEx6kCaUOyXmx6yuYOGNlmA3B?= =?us-ascii?q?0wnsQWOv61/7tS14TjHKz9ftiEpVUaS4CllJUiq1I0B4tiiPPA3yuNrxp6s18F?= =?us-ascii?q?k8Mnb4u9KViGuhJLRXEtX5JNyYOiQ0pVQXjJgrStyu34AbF8C9L80K8HFidPve?= =?us-ascii?q?9n+kkzNco6ddmYXS+MaV+u/YHXO4la2Vt62NxCxEyng/pVw/7NGgOe3J592OWf?= =?us-ascii?q?uozHwdTyZ4uwvGRB61safWr1UbNE2EykvLn5YKPt5B13kiyk7m/PQjQM409AhG?= =?us-ascii?q?ConPffcCqi7oODvowVefZMk6VjKC3DtWAF31F0V4GKkm127qusLGi2vQ8UUyRo?= =?us-ascii?q?Zsb0znmQB3D4IgJEIp81gXxyoOHBMDaR+FEb6oAl7lIpEcVUgZbhSH3qa1dbsr?= =?us-ascii?q?3UFpxbOv/uDTZ/RmB6URLvZdkhKOnF9DF5IUsK0eRalxe1pD+6/XuAfiEYnnX/?= =?us-ascii?q?7plXYqM/26XNxa+9gDt3Q++ga/Wwag6ZBb4rYaiZGHbLRLboTXscBn8Uhn+SAA?= =?us-ascii?q?eTBXjBh4lRO5XvgWpPr/7djDrJqo9uGuWb42SOUW7Bg1CX5xj5nxgFA/udHYzf?= =?us-ascii?q?pcSonOhIvj9wBCPmCFt5zH0xlmLuoOMZikcKxn93UdKCgUP2gOMsaOa/kg/y9t?= =?us-ascii?q?Ny3e50RYDcMQedwYPMTMmQdOik3qQb1T7dTUGluZC4d1asAp4HH6yCgv/psgTu?= =?us-ascii?q?ng6DG3JZfF71FOJf9DjztjlMjEpOcLxfreEi8X4WOWaxJt2CON14GNC+rs/eWL?= =?us-ascii?q?0NzUS0kGETAyU4hHIjqN5xeqSfe0lJXmUwOU9tX8gIkke0KKW3y9hqIFvbhQEe?= =?us-ascii?q?RYkCX0wiBeFpzph/KSq9es53FYtkdZH4Zv7R3IA6FfPpRnORvmlsmkXFV8BjDl?= =?us-ascii?q?dMHSaBUupPKcxv0Q7OVmK0v+eYgbLwoLy73k73pVUgxuSLnxslaCQ+0RYNpmSP?= =?us-ascii?q?XZrnFa8o9gL7EAPEKdpZPwtDtIrk45ABMxYr8qsjNablXOnBFSW6vspLEAiBET?= =?us-ascii?q?XsJitEBQHmKwPGY+5zvZWqRPkKmeFuAa8jWJQqwJSUVoPTt0Qwmp15V2Z7upgf?= =?us-ascii?q?dHv3tDniN6pvgqzzNmSwWntC3ppqICwzQg96+ktDQPvnxFVOaekzzSBVVF0vsK?= =?us-ascii?q?kb8WC2z+5lykfHkDcIzy7aFoJcv87okh+G0zbwgscSMAXOSgDTzwjqyTD4yAtd?= =?us-ascii?q?JTnhiNt9vUYb+0NygSOaw3yQj/SHhlzgjegBFo/XMJQjWn7N8kIp+xNtolxiqs?= =?us-ascii?q?BGjUaVcN4qJPsMvqtl4LTfA7aU1gwGV9yMeHQjACRM3VF2YzkAckdX1OcIhf5h?= =?us-ascii?q?8CC6konjGIs7FH/gEKejjUFJ+o+o3NncjV2Hk9SsxqynjRpq2fiZMgyGdllM9s?= =?us-ascii?q?7i6SpHQScPTVU81yDXj92IdfzffzZvu3veABVoRm1K6tUPkcPcm/4WG2wollWl?= =?us-ascii?q?e5xrQCGFq0KOADxrPcUyarV2KYXeCLfnOXnzY+NE7y5AWnIkcxaMhUs083KvHC?= =?us-ascii?q?iYJElw39TbN0QT2dpV3bzG0jKeMacAY2uIa7ewMUV+MRYumcJfQ0wPIgElcMaG?= =?us-ascii?q?XJHSRuAe+srVGthJR7O2ln4UjifeTt8wXmPcCOGhkFDYHarYB++figSmKHJ3Bg?= =?us-ascii?q?0AV4PFNo+OfHC1Qxquhcfo6UndjRhNR70ukFeuxvMSInud4TnYRj5peS0MuQdx?= =?us-ascii?q?He0IryL8nPoveEG/3f01gqemZCX7UCfwz14Zk6M8UiW73XGrtZoQgcBbYkT5M8?= =?us-ascii?q?LWvx87t0LAxreA7LeLu0mtXqpv6MZpZMv3/W6VYwIz3GuxwNzfy0SQJ7Youvh3?= =?us-ascii?q?X1J5AwXSxOoMF3ChthB4tPAMIArwyoA5KOn6G7kdCx8Vtgu+AWqarwFuzK1NOh?= =?us-ascii?q?0oV/QZda4U2LPC7PC6Rwg0Vlj+GygvLe3ZnrDcPtZ8kIVO9hQm7KcrXGBJmwKi?= =?us-ascii?q?qSOsLgfE5L67Cd0KpjUhWQeC/2QbGLtCilNPV4+0U01JZ0fO3JzDwi97vbwsf9?= =?us-ascii?q?Z3lHpie/qn6ELJxf7FjUCuHFRxJUTeCK8H15Ha0WcYT06P0OPsI8z9SG5Ql88i?= =?us-ascii?q?hC2tOfI6e9tk/Mxl57dZXDIUvt2iY5X5QKIRumPUsogG/ZsWjdAW9HI8ilM8Zt?= =?us-ascii?q?htGVAgbq50lrlmEnfnRBFXbwRdeNJWgb3NqzZBaU+wJPDtYDmfO3eEE/uqO9Ve?= =?us-ascii?q?loOotKmf+0u7Ufi9lkMCLPS9ZAPyHWMrB2OiFeDvjApFQyZR4Eqbc1UJ8vZZeS?= =?us-ascii?q?OEMHLFuAySTqwAvHy0L7a9ys1KePICYR6XhH0bPF0T5SqAm9uPaZhNDjUb/DYJ?= =?us-ascii?q?HxRv7SPzIvViuGSjQqDUap5VCktuIGvPWCImcfpUsbbzmPCA4VuqBvrd/QDnLc?= =?us-ascii?q?me1jYJ0GnvaaVD7sSCdgjqo9Gj5LtVyQQ/oEDQTWYGXuj3FGuAyjOPBM+Wnob6?= =?us-ascii?q?OcxqVPQOwWA5ZMfuefQ9TGZfBUPy0omSkBOOagY93cqK400lDNTWseCanI7lye?= =?us-ascii?q?TFWNT/ya3T3rWJsav4kutiov4NLQkTd9E77UMLaHuz6u7om4gT6Due3QU2kif0?= =?us-ascii?q?04jeEZDWmf3hZAMmAECtASuEHrWKKAYVhD1G4xg+J0xxAMYBhzUmFp0nBOnva9?= =?us-ascii?q?HctZSVoPgWOrXvIJcV53DDQq/UCW/AL+e9oAtt7PRzwWyrxZUocZLf81+KHLKa?= =?us-ascii?q?AQx7Avxzsgrysk4AuHCFYIrAuA/rGYN6tm2rBYrT064Pp/RF3Vay/OeWjAjIy9?= =?us-ascii?q?AoRAwjk48iOs7Nbdou04bOgSnIp+GlpfRHguKw=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2GnAwDo55BY/wHyM5BdGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgyiBWRGOUahOJog6VwEBAQEBAQEBAgECXyiCMxuCHAYBAiQTF?= =?us-ascii?q?CAOAwkBARcpCAgDAS0VEQ4LBRgEiUANrgc6JgKLPY9YEQGGAQWBKwGHV4cviyM?= =?us-ascii?q?CkX4CgXeIVoYpiCaKWVh2HgcCESNKXoNeHIF/V4V9gi0BAQE?= 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:12 +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 v0VJiBdC019991; Tue, 31 Jan 2017 14:44:11 -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 v0VJfhQB015605 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 v0VJfgGD019171 for ; Tue, 31 Jan 2017 14:41:43 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 4/5] checkpolicy: Cleanup error messages Date: Tue, 31 Jan 2017 14:41:57 -0500 Message-Id: <1485891718-18829-5-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 Add the new function print_error_msg() to print an error message based on the local error number and symbol_type. Remove the duplicate switch statements used throughout module_complier.c to display error messages. Signed-off-by: James Carter --- checkpolicy/module_compiler.c | 213 +++++++++++++----------------------------- 1 file changed, 64 insertions(+), 149 deletions(-) diff --git a/checkpolicy/module_compiler.c b/checkpolicy/module_compiler.c index 90e82c2..7b35b56 100644 --- a/checkpolicy/module_compiler.c +++ b/checkpolicy/module_compiler.c @@ -51,6 +51,34 @@ static scope_stack_t *stack_top = NULL; static avrule_block_t *last_block; static uint32_t next_decl_id = 1; +static const char * const flavor_str[SYM_NUM] = { + [SYM_COMMONS] = "common", + [SYM_CLASSES] = "class", + [SYM_ROLES] = "role", + [SYM_TYPES] = "type", + [SYM_USERS] = "user", + [SYM_BOOLS] = "bool", + [SYM_LEVELS] = "level", + [SYM_CATS] = "cat" +}; + +void print_error_msg(int ret, uint32_t symbol_type) +{ + switch (ret) { + case -3: + yyerror("Out of memory!"); + break; + case -2: + yyerror2("Duplicate declaration of %s", flavor_str[symbol_type]); + break; + case -1: + yyerror2("Could not declare %s here", flavor_str[symbol_type]); + break; + default: + yyerror("Unknown error"); + } +} + int define_policy(int pass, int module_header_given) { char *id; @@ -246,23 +274,10 @@ int create_role(uint32_t scope, unsigned char isattr, role_datum_t **role, char *role = datum; *key = id; } else { + print_error_msg(ret, SYM_ROLES); free(id); role_datum_destroy(datum); free(datum); - - switch (ret) { - case -3: - yyerror("Out of memory!"); - break; - case -2: - yyerror("duplicate declaration of role"); - break; - case -1: - yyerror("could not declare role here"); - break; - default: - abort(); /* should never get here */ - } } return ret; @@ -385,23 +400,10 @@ int create_type(uint32_t scope, unsigned char isattr, type_datum_t **type) *type = hashtab_search(policydbp->symtab[SYM_TYPES].table, id); free(id); } else { + print_error_msg(ret, SYM_TYPES); free(id); type_datum_destroy(datum); free(datum); - - switch (ret) { - case -3: - yyerror("Out of memory!"); - break; - case -2: - yyerror2("duplicate declaration of type/attribute"); - break; - case -1: - yyerror("could not declare type/attribute here"); - break; - default: - abort(); /* should never get here */ - } } return ret; @@ -499,23 +501,10 @@ int create_user(uint32_t scope, user_datum_t **user, char **key) *user = datum; *key = id; } else { + print_error_msg(ret, SYM_USERS); free(id); user_datum_destroy(datum); free(datum); - - switch (ret) { - case -3: - yyerror("Out of memory!"); - break; - case -2: - yyerror("duplicate declaration of user"); - break; - case -1: - yyerror("could not declare user here"); - break; - default: - abort(); /* should never get here */ - } } return ret; @@ -842,50 +831,29 @@ int require_class(int pass) if ((datum = calloc(1, sizeof(*datum))) == NULL || symtab_init(&datum->permissions, PERM_SYMTAB_SIZE)) { yyerror("Out of memory!"); - goto cleanup; + return -1; } ret = require_symbol(SYM_CLASSES, class_id, datum, &datum->s.value, &datum->s.value); - switch (ret) { - case -3:{ + if (ret < 0) { + print_error_msg(ret, SYM_CLASSES); + free(class_id); + class_datum_destroy(datum); + return -1; + } + + if (ret == 0) { + /* a new class was added; reindex everything */ + if (policydb_index_classes(policydbp)) { yyerror("Out of memory!"); - free(class_id); - class_datum_destroy(datum); - goto cleanup; - } - case -2:{ - yyerror("duplicate declaration of class"); - free(class_id); - class_datum_destroy(datum); - goto cleanup; - } - case -1:{ - yyerror("could not require class here"); - free(class_id); - class_datum_destroy(datum); - goto cleanup; - } - case 0:{ - /* a new class was added; reindex everything */ - if (policydb_index_classes(policydbp)) { - yyerror("Out of memory!"); - goto cleanup; - } - break; - } - case 1:{ - class_datum_destroy(datum); - datum = - hashtab_search(policydbp->p_classes.table, - class_id); - assert(datum); /* the class datum should have existed */ - free(class_id); - break; - } - default:{ - abort(); /* should never get here */ + return -1; } + } else { + class_datum_destroy(datum); + datum = hashtab_search(policydbp->p_classes.table, class_id); + assert(datum); /* the class datum should have existed */ + free(class_id); } /* now add each of the permissions to this class's requirements */ @@ -908,13 +876,13 @@ int require_class(int pass) ("Base policy - require of permission %s without prior declaration.", perm_id); free(perm_id); - goto cleanup; + return -1; } allocated = 1; if ((perm = malloc(sizeof(*perm))) == NULL) { yyerror("Out of memory!"); free(perm_id); - goto cleanup; + return -1; } memset(perm, 0, sizeof(*perm)); ret = @@ -924,14 +892,14 @@ int require_class(int pass) yyerror("Out of memory!"); free(perm_id); free(perm); - goto cleanup; + return -1; } perm->s.value = datum->permissions.nprim + 1; } if (add_perm_to_class(perm->s.value, datum->s.value) == -1) { yyerror("Out of memory!"); - goto cleanup; + return -1; } /* Update number of primitives if we allocated one. */ @@ -939,8 +907,6 @@ int require_class(int pass) datum->permissions.nprim++; } return 0; - cleanup: - return -1; } static int require_role_or_attribute(int pass, unsigned char isattr) @@ -1065,30 +1031,13 @@ static int require_bool_tunable(int pass, int is_tunable) &booldatum->s.value, &booldatum->s.value); if (retval != 0) { cond_destroy_bool(id, booldatum, NULL); - } - switch (retval) { - case -3:{ - yyerror("Out of memory!"); + if (retval < 0) { + print_error_msg(retval, SYM_BOOLS); return -1; } - case -2:{ - yyerror("duplicate declaration of boolean"); - return -1; - } - case -1:{ - yyerror("could not require boolean here"); - return -1; - } - case 0:{ - return 0; - } - case 1:{ - return 0; /* boolean already required */ - } - default:{ - abort(); /* should never get here */ - } } + + return 0; } int require_bool(int pass) @@ -1138,30 +1087,13 @@ int require_sens(int pass) free(level->level); level_datum_destroy(level); free(level); - } - switch (retval) { - case -3:{ - yyerror("Out of memory!"); + if (retval < 0) { + print_error_msg(retval, SYM_LEVELS); return -1; } - case -2:{ - yyerror("duplicate declaration of sensitivity"); - return -1; - } - case -1:{ - yyerror("could not require sensitivity here"); - return -1; - } - case 0:{ - return 0; - } - case 1:{ - return 0; /* sensitivity already required */ - } - default:{ - abort(); /* should never get here */ - } } + + return 0; } int require_cat(int pass) @@ -1191,30 +1123,13 @@ int require_cat(int pass) free(id); cat_datum_destroy(cat); free(cat); - } - switch (retval) { - case -3:{ - yyerror("Out of memory!"); - return -1; - } - case -2:{ - yyerror("duplicate declaration of category"); + if (retval < 0) { + print_error_msg(retval, SYM_CATS); return -1; } - case -1:{ - yyerror("could not require category here"); - return -1; - } - case 0:{ - return 0; - } - case 1:{ - return 0; /* category already required */ - } - default:{ - abort(); /* should never get here */ - } } + + return 0; } static int is_scope_in_stack(scope_datum_t * scope, scope_stack_t * stack)