From patchwork Tue Jan 31 19:41:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9548297 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 47D0A60425 for ; Tue, 31 Jan 2017 19:44:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 398D126CF9 for ; Tue, 31 Jan 2017 19:44:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2E30A28304; Tue, 31 Jan 2017 19:44:02 +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 4571E26CF9 for ; Tue, 31 Jan 2017 19:44:00 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,315,1477958400"; d="scan'208";a="2769871" IronPort-PHdr: =?us-ascii?q?9a23=3ATQj8kx9EyCLGh/9uRHKM819IXTAuvvDOBiVQ1KB5?= =?us-ascii?q?0e4QIJqq85mqBkHD//Il1AaPBtSHrawZwLOM7ejJYi8p2d65qncMcZhBBVcuqP?= =?us-ascii?q?49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6?= =?us-ascii?q?JvjvGo7Vks+7y/2+94fdbghMizexe7J/IRW5oQnMqMUbgJZpJ7osxBfOvnZGYf?= =?us-ascii?q?ldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2Yu5M32rhbD?= =?us-ascii?q?VheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RSiu4qF2QxDmki?= =?us-ascii?q?cHMyMy/n/RhMJ+kalXpAutqwJjz4LRZoyeKfhwcb7Hfd4CRWRPQNtfWSJCDI27?= =?us-ascii?q?bYQPAfIBMORFo4TzqFQBsRSwChe3BO701j9FhGX70bEg3ug9Dw3L2hErEdIUsH?= =?us-ascii?q?TTqdX4LKMcXvqwzKbW1jXIcu1b1i3n6IjUbB8hu+yHULVyccvf1UYgDRnFjkmO?= =?us-ascii?q?pYH+IzOU1vgCs2ic7+Z6U+KvkHQopxt+ojio2Mchk4/EjZ8WxFDc7Sh13Yk4KN?= =?us-ascii?q?KiREN7fNKoCoVcui6EO4dsX88vRXxjtjwgxb0co5G7eTAHyJEgxxHCdfOKa5OI?= =?us-ascii?q?4hf/VOaJJjd4mW5ldKq/hxms9UigzfXxVtWu31ZQrypFj8LMumoR1x3T9seHSv?= =?us-ascii?q?x98l2n2TmTzADc9vtIIUU1larfM5Ihw7gwmYQPsUnbAyP7l0r7gLWWe0k54OSk?= =?us-ascii?q?9evqbqv8qpOBL4N0jxvxMqUqmsyxG+Q4NQ0OUnCA+eui0L3j/Ev5QKhFj/Evia?= =?us-ascii?q?bZt43aJcIHqaGnGA9YyZoj6hajADem19QUh38HLElfdx6dgIjpPE/OLOjiDfij?= =?us-ascii?q?m1SsjCtrx/feM73jBZXNKGLMkKvhfbln7U5R0wgzzddZ55JREL4BO+7zVVHrtN?= =?us-ascii?q?zDFBM5NBa0w+n/AtVnyoweQX6PArOeMK7Ks1+I5PggLPWPZI8Ovzb9Lfkl5+D1?= =?us-ascii?q?gH83nV8dYKao0oAKaHC+AvRmPl+VYX32gtcOCW0KpBYxTPT2iF2eVj5ef26yUL?= =?us-ascii?q?wn6T4lDoKmDJvDRoe2jbyAwii0AINZanpBClCWHnfib5+EVOsUaCKOPs9hlSQJ?= =?us-ascii?q?WqWmS48n0xGhqRH1y75mLufP4CIXq4jj1N9v6+3UjxEy+iR+D96B3GGVU2F0gm?= =?us-ascii?q?QISicr06Bju0N90EyO3rR/g/xdCdNc/ehJUhsgOZ7a0eN6F8j4WhjdcdeRVFam?= =?us-ascii?q?XtKmDCkwTtI3398BfUJ9FMunjh/dwyqqGb8UmqeMBJws7K3c2X3xKNx8y3bCz6?= =?us-ascii?q?YhiFYnTtFINW28ia517xLTCJLRk0WFi6aqcrwR3S7M9WeEy2qDp0RYUAppXaXE?= =?us-ascii?q?W3ATfE3Wos7j5kPBTr+uF6ooPhFHycGcNqtAcsfpgkleRPf/JNTeZHq8lHyrCh?= =?us-ascii?q?qPwrOMbZHqe3kG3CnHE0gLjRwc8WydNQcgAiehomTeDCFhFF/0f0zt8fN+qG6g?= =?us-ascii?q?TkMuwQCFdVFh16Gy+h4Tn/CcTOkT3r0csic7tzp0BEq9387RC9eYuQVhZL9TYc?= =?us-ascii?q?k84Fdczm/ZrxZyPoahL6B5nl4edx54sF/w2BltDYVAi8cqpmswzAVuMaKYzE9B?= =?us-ascii?q?dzSA0JH+O73XLmzy8w61a6PN1FHRzsuZ+qAV6Psis1XjpgapFkg8/Hp7z9lZyX?= =?us-ascii?q?yc5o/FDAAKS5L+Tl439wRmp7HdeiQ96ZnU2mdqMaaosz/CwMkkBO49yhahZttf?= =?us-ascii?q?K62FFBToH80dHciuJ/Qgm0K1YRIcIOBS6Kk0Mtuld/Sc266rO/tgkSmljWtd44?= =?us-ascii?q?B91V+M+zB7Su7S0JYP2+uY0RefVzfgkFehtdj6lppZajEIH2qw1zLkCZVLaaJu?= =?us-ascii?q?eIYHE2CuI9e4xt9mnZ7iR2ZY9EK/B1MBwMKmZQCdb1jj0g1LyUQWoXunlDCjzz?= =?us-ascii?q?NokjEmsKyf3DDPw+v4bhYHPHBERHV6h1f2PYe0l8waXFSvbwUxlBuq+0L6x6xc?= =?us-ascii?q?pKlkK2nTXFtIfy/zL254SKewsaCCY8FX4pMyrSpXSPi8YUydSrPluBsa3TnjH2?= =?us-ascii?q?xFxDAnbDyqoZP5nxt0iWKYNnlzqmDVecduyhfD/NbcX+Je3iIaRClkjjnaHla9?= =?us-ascii?q?MMOt/dWIiZjDqPu+Wnm/VpJNaynk1p6AtC6h6W1tGx2/kOi5msf7HggizS/7y9?= =?us-ascii?q?5qWD3UrBnhf4br1r61MeZ8c0Z0A1/87tZ1FZtlkossnp0Q32YVhomN93odjWjz?= =?us-ascii?q?Kclb2b75bHcVQz4LwtrV4Az71014NX+G3Zz2Vm+awsd7YNm6eGwW0Don789WEK?= =?us-ascii?q?eU8KBEnSxtr1qmrALefeR9njAHyfc09HEag+YJuAwiziiGBrASHE9YMjb2lxSP?= =?us-ascii?q?9dy+q79XZGm3e7iqyEV+hcyhDK2FogxEXHb5e4wiHTNp4sVkLl3M1Hzz6of5eN?= =?us-ascii?q?jfdt8TrQWUkxbGj+hUNJ0xjeAGhSx5NmLhpXcl0fI0jQRy3ZGmu4iKM39t/KW9?= =?us-ascii?q?Ah5cKDL1fd8c+jbjjKtFhcaWwpygHo57FjUMRpvoQuqiECgOuvT/KwaODDo8p2?= =?us-ascii?q?+DGbXFAA+f7F1qoGjVH5+wMHGXIGUZzdJkRBSGIUxTnAYUXDImkZIjEACl2tDh?= =?us-ascii?q?el9j5j8N/l74tgdMyuVwOhn8TGjfohyoZyw3SJeBKhpW9QdC6FnJMcCE6eJzBS?= =?us-ascii?q?5Y9IW7rAORMmybexhIDWYRV0ycHV/jI72u6sfY8+eCAOq+M+XBYa+VpOxDTPeH?= =?us-ascii?q?24iv0pB88zaXMcWPI2NiAOEl1UpNWnB5AcvZlCsVRywRiS3Nc9aRpA2g9S1vss?= =?us-ascii?q?C/7PPrVRrx5YuJFrRfKstv+xarjqeDLeKQgjh2KSpA3JMW2XDI0KQf3EIViyx2?= =?us-ascii?q?bzmiC6kAtSrWQa3Mm69XEx4aZzp9NMRS6aIwxA5NOdTUitntzL53kuY1C0tZVV?= =?us-ascii?q?zmgsypZswLI2WjO17cAUaLM7qGJTPVzMHrfaO8SbpQjOBKuBGqvzaUDVPjNCyZ?= =?us-ascii?q?lzb1TxCvLf1MjCaDMRxQoo69dAptCW/mTN/9ZB20LsJ4jToswbIunnPKL2kcMT?= =?us-ascii?q?pifExRsr2c9yRYgu9wG2ZZ9HpqMfGEmzqF7+nfMpsZrP1rDT5vmu1H5nQ10aFZ?= =?us-ascii?q?7CZeRPx6gCHStMJho0m6kumTzTpqSABOpixFhY6RuEVtI6HZ9p5AWHvf5h0C8W?= =?us-ascii?q?CQBw4Np9t/Bd3lo7pQxcTXlKLvNDdC9MrZ/c0GB8fOMMKHKGEsMRToGD7OFwsF?= =?us-ascii?q?UTCrNWDZh0NHlvGd6nyVoYI+qpT2n5oOULBbXkQvFvwGEkRlAMACIJBvUzw5ir?= =?us-ascii?q?6UktQH5XWkrBbLWsVXpYvHWeiRAfXyMjaWl6NIZx8VwbP+N4sTLJT321Blall5?= =?us-ascii?q?nIXKHFDcXdZTrS19dgU0ullC8GBiTm0v3ELochii4H4cFf6zmB47kRZxbvo2+z?= =?us-ascii?q?ft+Vg3IEDGpCwqkEk+gd/lmyyecCbtLKesWoFbEzD7t0crPZPlXQl4dgqynVR6?= =?us-ascii?q?OzfCQrJelbpgdWRwhw/btppDA/lcTbdLYBUI3/GYe+0o0UhAqiWg3UJH+ezFCZ?= =?us-ascii?q?54mAswdp6trmxP2wR4Y94vIqzfOqlJw0NMiaKJuy+nyvo+wBQCJ0oX9mOdZjII?= =?us-ascii?q?slQSNrY6Pyqo4vBs6QualjtFZmcDTf4qr+lp9kM6IOSA0zjv07hYKkCyNuyTNa?= =?us-ascii?q?WZtHbclcSQWFM/ylsIl1VZ/bhxycojaVSbV1sxw7SLDRQGKcrCJBpOYMpT7njc?= =?us-ascii?q?YCGOsevVwZJvIYq8FvrkTemQu6YImkikBhomH5wQ7sQdGZmhyFzXIt35LL4E1B?= =?us-ascii?q?ot/x/mK0+fDPRTfxKKniwHrN+jw59qx4ldJy0dAGVnPSWx+LnXuhcggOCfU9cu?= =?us-ascii?q?fncaQowEO2o4WM2ghSFWom9AAyOx0uIFzwiC9CTxqT7MAzn5ddZjY+2UZRx0At?= =?us-ascii?q?Gs5To/67S2iULQ8pjGI2H6Ms5itcHJ6eIboJaKEPxUTb9gs0vGnIlYXXOqWXbV?= =?us-ascii?q?EdGpP5jwd5UsbdvsB3ahTFO/jzM1T8HsPNeiNaWHnQboRYNIv4aBxzAjKdWxFj?= =?us-ascii?q?cAFBdsv+sD/r5zZRUfY5onZh7lrxkxOLC6IAef1NWuX3uhJCBIT/ZB1+W6Zr1W?= =?us-ascii?q?zy0qbuOgznsvUI06xfGt8UERXJEKkg3exfG7aoldSyjyGmZSewPTpSo5jGVhOe?= =?us-ascii?q?Eywv8jzx/St1kTLSyLfvRzaGNYp9E8GU+SIXJuB2okRl+ciI3D4hKs37ES5CZS?= =?us-ascii?q?gtdU0O1fv3flpJPfZiyjWLCzo5XPryUgdcQmo7F2MYH7LcuGronRnjrDTJTLsw?= =?us-ascii?q?2FVyC7F/xGmthQPi1YQf9ImX07Nswco4ZB71Q+VtsmLbxVFKYsvqyqaSZjDSMK?= =?us-ascii?q?1yAZU4KA0yAcjeik3rvblhGQcJMkMBMeq5hNmdodXDRwYi8Hqq+jSp/al2maRW?= =?us-ascii?q?gXOA0T9xhD5Boclo9seeDo+JHHQ4FKyzNNuf17TzXLGYdy91vgUG6Wm1j5RO+m?= =?us-ascii?q?k+yz0gJY1Ojs3cUDWB5jFUhdwP5bllEuKLF2N6YQvonKsjuTdU3ipWzj1fGoKU?= =?us-ascii?q?VWx8DPa1L4C4/FunbmXS0H5X0YX4lPx2/DFZ4KiQp2dL4rpElQIIChYkvx+z4k?= =?us-ascii?q?yJ51ELSjSc+rwFIlrXIHRyi0CdpBF/9pv07XWDF/ZJCrsprlMY1IQmBM4J2dt0?= =?us-ascii?q?tZkEJ1Pi6j05VcMcZN7SUXUThTuzWSpsWyR9NH2c93CZ8MLdN/u3byGKNEJJiR?= =?us-ascii?q?rWc5uqbqynPD/TAzrku6zi2pG6CkV+JZ43EeGgIxKmWQsEUgE+ss8mbX8lDMqF?= =?us-ascii?q?90/PxWBrmRgkpvvjlxBJdOBixG1Xq9NVR8UGFGs/lGKKTSa8FcW/4yZRu1NBwk?= =?us-ascii?q?G/8m2EiJ/U9vkHf8ZCxysRBa9D7BUAkuUikVmaztmTwYqsGoIzMaTIhIbTo5ZS?= =?us-ascii?q?ffNw2bgTxXvApYa0xyQZ8ZGMtF+7cB0YtX5cfCSEesKSAZXBN5LA441+RQlVJb?= =?us-ascii?q?ukWCZS/dFRaoderIshBvYceRq8upIe/l/Atbj4Poq/o096MdSH26gQetW8zRr5?= =?us-ascii?q?fgtt2WsUuDbKf4PPemYXDbSDjDkAu9iqo6AJnS5yjcLg5bJIdgyXY+ZpjhE2HL?= =?us-ascii?q?NwxcJ60HP0pbSbx6adJer+BYYM9rZr0E9rJzCRKcWBzvApCvo+dbIVrJQzTRMT?= =?us-ascii?q?mB+PSloY3P9bzdVfTgZsuUynncTaJ4Iot25DvmF7rkyoJR5k322vJx+UxgUljG?= =?us-ascii?q?LzqNrNL/KQMX/MOibFftvoU1HTPKB5d9iGDtyV9deMoXWSKq7I8VyJde6HbuV+?= =?us-ascii?q?10zFT8sOpP+LZ684U35a5mydusL6fINftaqVNnAgSTBghy7pUtG3R/SHpMbe8N?= =?us-ascii?q?M/rRZqMZjd30q+/rCaMX7gGV+/ZDZtvDPU3BndO/Cj6EQxxegAgBsSIaLheb1/?= =?us-ascii?q?Odh690U9iqqvbk1U82/li+KgIGzKp36oea+6qIo+vXYAXNzbQeXajqXMzzpKw2?= =?us-ascii?q?u0yO/f0kiKIOemttbg2iCucdUsodyXn8zaA21y0jCdjOH7T+9/5fTHI2gijvm4?= =?us-ascii?q?hjEFkMHPMbA6aL95xEnmgkg+zZKsEWcqdal2aNDxGkCLgCyWWv6ySNPmlomRTO?= =?us-ascii?q?0wz0QWOv7V/5sS54TjHKz9f4iEZVUaO3BUhKVSqzJUB4qC+PPBbvtNfvu6Q69k?= =?us-ascii?q?c2MmL+tNKKiWSuJqhaH9HlK9yaOik0o0gbjJsvSdyzwYobA8ayIM8N8HFiafvT?= =?us-ascii?q?82yrkzJAo6dDg4rR/MSV9+7KEna+lKKaqq+CxDZCxng/p1E/5ciqNuvS6N2SX/?= =?us-ascii?q?Soy2ERQj95uwvFRBO1q7rbr1UONUyK1kfLlpYKMctC3XkkzEHm+fQsQM4u9AVE?= =?us-ascii?q?CInMffQCpSr8ODHs21aQf8o3VjWC0ztQBl/1FF54GK4g2GL/os3EjnLQ+1wySY?= =?us-ascii?q?l2aUPnmRJ2D4IiKUIu81gb2CwDHhYRaRqDFrGnGVzlLZcYVUgEcRmHxqW1dbos?= =?us-ascii?q?0E18x7Ou6/XfbepiCKoRLvxdlBKBnEBHGpIKtq0TWLZ8e0RY9KPXvQXiBZboUO?= =?us-ascii?q?XhlXoqL/K1Wtpa8ccbt3Q8/gm/WwCs6ZBZ77YUkJqIbLJLYYDQvMBg6Edq/SUP?= =?us-ascii?q?eTZTgBdlgBO2T/scqfv44tfBrpqn8OmuW7g2R+kN8Rg7GXh+hYPqgF8/udHXy/?= =?us-ascii?q?tcSorNhIT98QBNJmWHuIPE3Bh8N+UOMYOrfLBv93kdISgROW4ON8KMa/Yg+y9t?= =?us-ascii?q?LCnT51taD8MNZNIXJtDClhxPh03yRr5T6tTUFUOCB4d0bcAo4HL9yCop/pskTu?= =?us-ascii?q?bg9Di2KIjE4FFMJPNCgj9jlNDDpOgJ2frdEjUX4X2CZhdpxSON1oeCBOzt/eWW?= =?us-ascii?q?z9HUTUkJEjQxU4dHKzqI4RanSfatlJX1TgOU7df+gIoke0KMWnOxnKoEsqFWEe?= =?us-ascii?q?5Dkyn7xSZRFoT0h/KTrtqt53BatkVdH4Zv8RLFGKtePpJhORT7jMWrRVZzBjH5?= =?us-ascii?q?eM7Kchoiou2Wxv0D4+9mLUvxeZcbIg4Yy7L98XdVUhFuR6DyvlmDW+IeesBrR+?= =?us-ascii?q?7FrnBa6IJgN7UAPEOHq5zwszdEslY2DxE1aLUotDxValHOnBFJW6bzoLMAhRET?= =?us-ascii?q?UcRntk9QGWK9I2Y+5zvbVatLjKmeEuEV8i6JQqwITUpoLjt0Qwmp15V2Z7upgf?= =?us-ascii?q?dHv3tJnixjpvgqzztmRBy7tS33ua0N3TMg+LeltDQOonFFSvuRkz3ICFpZ1vgK?= =?us-ascii?q?i7kTC2r641ymfHYDdJfy4KVgJcn484kh4mgwYRInfyIcRuSsESDwj6SPAoyUq9?= =?us-ascii?q?JRnxuNtcrBbLOpKigSLLs9wwr5R3dhygjegApo8GwTTzWv8NAkP569Nd84yCSn?= =?us-ascii?q?H2bbdVAM4r5Gscbqul4LSfE5aVV/z2l51ciHXCINTtTVG2kplggkdXlEcJVb5B?= =?us-ascii?q?8YEKkogjCIsrNa8QEUZDfUD5mq+4jRncfOwnk9TtZqy3nIpq2EmJMlynlllM51?= =?us-ascii?q?7iKUvnQdafDYWdd2Anfvzodf1fD+Z/K1v+AGVotp0rKhXeQGMsm+5GS22ZJqWl?= =?us-ascii?q?S/yrQZBVq5P/cJxq3HXCe9VW2YReOLfnCOnzknPE7y6x2oI0Y5achQqU8yLPfC?= =?us-ascii?q?ioRalwL/TbN+Xj+QqkPDzGw/LeMacBo7uIijewwNQu8eeeycJew1zf0lD1sMaX?= =?us-ascii?q?7JEjdsB++wr1GtgJBxO2987kXifeTt7gfmPcOQGhkEEY/atplx+fi7RmKdJ3Bt?= =?us-ascii?q?1xhyPEho9+fFCVs9rOhcc4yendLIndR0zfYFd+txMS06otMThoNj6YyP3ceWcB?= =?us-ascii?q?He0pXyKs/RovSCBf3Q0VgqcHlAUrUFeQP1+5k6PtkhVr3WHLtZvhccBa8hTZwj?= =?us-ascii?q?LWjx96Z0LAVtfQ7Xfri0hNflpv6TbJtOu3DW9k4wLDvbuxAb0fO7Uwp7b4yxin?= =?us-ascii?q?XpJJAwQS5Br8FzChR4AYRDAcQArxCoA5SMgqG0l8ex+19mu+8NqafwBO7F1NC4?= =?us-ascii?q?34VpQZdX/k2KPDfUBKlunEtllOCyjena3pn2E8PidssOVPJnTW7ddr/GAoK/Jy?= =?us-ascii?q?qAO8LkYU5G8qKT36xiXxWUZSD5Q7CGuzO+OPVj+0U7xZRyfPDPwzw187HbxNzy?= =?us-ascii?q?anlcpiens3GEL4Nf7FjQCuzFQxJUSOaK8Hp/HaIJc4T47uEOPsI+wNKE+Ql88C?= =?us-ascii?q?xC0NeZI6imtkLM3kN7dZTGLErmwio5XYgKIA+jMUs3mmLZq27SAXJbLsS+Lslt?= =?us-ascii?q?mtmVBAT350ZtgWEtenJBGm3wSNeKJ2cb38O+ZAuX9ANECNoNkPK3eU4mua2oV+?= =?us-ascii?q?ZoIo9KlP6ptLoZi9ZpLT/ARMxBMCHNI796JD1RDv/ApFIweB4Lr6A1WpspZZiJ?= =?us-ascii?q?OE4HNV2Pxj/yzQvD1030cMeh1LiIICYQ7HpHy7PF0T5Rpwi2o/qZhdfjUL/BZp?= =?us-ascii?q?HsQPHSKDYlVi2dRTkqE0am41Sku/0fs/eDPGcfpEwUYiKVCA4OqaBvrcTQAnXV?= =?us-ascii?q?meJ9YJ0AnOqaVDzoSC1kiKoyAT5GtU+WTPUYDwnWbmHugG5HtQy8Iv9D52nlb7?= =?us-ascii?q?yFxqZPXewZHJdMeOWDQ9TEYfBeOysoljIBNea+et3cqKw50kjJTWsCCKTI8keR?= =?us-ascii?q?TEuITfyd3T7rWp8Vv4cssCoy5t3QhjN3E7jPP7uHvD6u/Iu4gzqZtODdTWQtfV?= =?us-ascii?q?I6gPgDAGiAxxlALnsIC9cLt0HxWqSAfVpD1Go1ieJy3B8BYAZzUnpo0n1Sh/u9?= =?us-ascii?q?H9NWRkMajGOpWv0JcE54ACk2/UCU/g2hKeAH7NveQ25Y66skVZsWLP5u7pLefq?= =?us-ascii?q?QX3qUHxjVj9Q4ztiiGR3hUlB6I6eKEHr13z6dev0Ek7vp2WQeJWDqZfW/ZnNn1?= =?us-ascii?q?Q/lTzDtj9Ci3n/HfufpgYf4A/4w=3D?= X-IPAS-Result: =?us-ascii?q?A2HQBADo55BY/wHyM5BdHAEBBAEBCgEBFgEBAQMBAQEJAQE?= =?us-ascii?q?BgyiBWRGOUahOJog6VwEBAQEBAQEBAgECXyiCMxuCHAYBAiQTFCAOAwkBARcpC?= =?us-ascii?q?AgDAS0VEQ4LBRgEiUANrgc6JgKLPY9YEQGGAQWBKwGHV4YxfosjApF+AopNhim?= =?us-ascii?q?Sf1h2HgcCESNKXoV5V4V9gi0BAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 31 Jan 2017 19:43:59 +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 v0VJhufw019686; Tue, 31 Jan 2017 14:43:57 -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 v0VJfhXb015596 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 v0VJfgGA019171 for ; Tue, 31 Jan 2017 14:41:42 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH 1/5] checkpolicy: Create common function for type declares and requires Date: Tue, 31 Jan 2017 14:41:54 -0500 Message-Id: <1485891718-18829-2-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 Move common code out of declare_type() and require_type_or_attribute() into the new function create_type(). Signed-off-by: James Carter --- checkpolicy/module_compiler.c | 142 ++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 80 deletions(-) diff --git a/checkpolicy/module_compiler.c b/checkpolicy/module_compiler.c index 6e5483c..0c76bfb 100644 --- a/checkpolicy/module_compiler.c +++ b/checkpolicy/module_compiler.c @@ -305,67 +305,83 @@ role_datum_t *declare_role(unsigned char isattr) } } -type_datum_t *declare_type(unsigned char primary, unsigned char isattr) +int create_type(uint32_t scope, unsigned char isattr, type_datum_t **type) { char *id; - type_datum_t *typdatum; - int retval; + type_datum_t *datum; + int ret; uint32_t value = 0; + *type = NULL; + id = (char *)queue_remove(id_queue); if (!id) { yyerror("no type/attribute name?"); - return NULL; + return -1; } if (strcmp(id, "self") == 0) { - yyerror - ("'self' is a reserved type name and may not be declared."); + yyerror("\"self\" is a reserved type name."); free(id); - return NULL; + return -1; } - typdatum = (type_datum_t *) malloc(sizeof(type_datum_t)); - if (!typdatum) { + datum = malloc(sizeof(*datum)); + if (!datum) { yyerror("Out of memory!"); free(id); - return NULL; + return -1; } - type_datum_init(typdatum); - typdatum->primary = primary; - typdatum->flavor = isattr ? TYPE_ATTRIB : TYPE_TYPE; + type_datum_init(datum); + datum->primary = 1; + datum->flavor = isattr ? TYPE_ATTRIB : TYPE_TYPE; - retval = declare_symbol(SYM_TYPES, id, typdatum, &value, &value); - if (retval == 0 || retval == 1) { - if (typdatum->primary) { - typdatum->s.value = value; - } + if (scope == SCOPE_DECL) { + ret = declare_symbol(SYM_TYPES, id, datum, &value, &value); } else { - /* error occurred (can't have duplicate type declarations) */ - free(id); - type_datum_destroy(typdatum); - free(typdatum); + ret = require_symbol(SYM_TYPES, id, datum, &value, &value); } - switch (retval) { - case -3:{ + + if (ret == 0) { + datum->s.value = value; + *type = datum; + } else if (ret == 1) { + type_datum_destroy(datum); + free(datum); + *type = hashtab_search(policydbp->symtab[SYM_TYPES].table, id); + free(id); + } else { + free(id); + type_datum_destroy(datum); + free(datum); + + switch (ret) { + case -3: yyerror("Out of memory!"); - return NULL; - } - case -2:{ + break; + case -2: yyerror2("duplicate declaration of type/attribute"); - return NULL; - } - case -1:{ + break; + case -1: yyerror("could not declare type/attribute here"); - return NULL; - } - case 0: - case 1:{ - return typdatum; - } - default:{ + break; + default: abort(); /* should never get here */ } } + + return ret; +} + +type_datum_t *declare_type(unsigned char primary, unsigned char isattr) +{ + type_datum_t *type = NULL; + int ret = create_type(SCOPE_DECL, isattr, &type); + + if (ret == 0) { + type->primary = primary; + } + + return type; } static int user_implicit_bounds(hashtab_t users_tab, @@ -934,55 +950,21 @@ int require_attribute_role(int pass) static int require_type_or_attribute(int pass, unsigned char isattr) { - char *id = queue_remove(id_queue); type_datum_t *type = NULL; - int retval; + int ret; + if (pass == 2) { - free(id); + free(queue_remove(id_queue)); return 0; } - if (id == NULL) { - yyerror("no type name"); - return -1; - } - if ((type = malloc(sizeof(*type))) == NULL) { - free(id); - yyerror("Out of memory!"); + + ret = create_type(SCOPE_REQ, isattr, &type); + + if (ret < 0) { return -1; } - type_datum_init(type); - type->primary = 1; - type->flavor = isattr ? TYPE_ATTRIB : TYPE_TYPE; - retval = - require_symbol(SYM_TYPES, id, (hashtab_datum_t *) type, - &type->s.value, &type->s.value); - if (retval != 0) { - free(id); - free(type); - } - switch (retval) { - case -3:{ - yyerror("Out of memory!"); - return -1; - } - case -2:{ - yyerror("duplicate declaration of type/attribute"); - return -1; - } - case -1:{ - yyerror("could not require type/attribute here"); - return -1; - } - case 0:{ - return 0; - } - case 1:{ - return 0; /* type already required */ - } - default:{ - abort(); /* should never get here */ - } - } + + return 0; } int require_type(int pass)