From patchwork Wed Jan 18 20:53:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9524775 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 D399F6043A for ; Wed, 18 Jan 2017 20:54:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C262E285F0 for ; Wed, 18 Jan 2017 20:54:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B6F372861D; Wed, 18 Jan 2017 20:54:25 +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 (emsm-gh1-uea10.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 ECAC7285F0 for ; Wed, 18 Jan 2017 20:54:24 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,250,1477958400"; d="scan'208";a="2940270" IronPort-PHdr: =?us-ascii?q?9a23=3ADC+d0BUmksSvYJDGC/+rk0/YErTV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYYhaDv6dThVPEFb/W9+hDw7KP9fuxBSpbsN3Y6yFKWacPfidNsd?= =?us-ascii?q?8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3wOgVv?= =?us-ascii?q?O+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIhi7qQrcutMYjIZmJao91xXEr39VcO?= =?us-ascii?q?lK2G1kIk6ekQzh7cmq5p5j9CpQu/Ml98FeVKjxYro1Q79FAjk4Km45/MLkuwXN?= =?us-ascii?q?QguJ/XscT34ZkgFUDAjf7RH1RYn+vy3nvedgwiaaPMn2TbcpWTS+6qpgVRHlhD?= =?us-ascii?q?sbOzM/7WrYhNZwjKZGqxy/oRJxzZPfbIWMOPZgYq/ReNUXTndDUMlMTSxMGoOy?= =?us-ascii?q?YZUSAeQPPuhWqJH9qlkToRawCgajGOzhxSFThnLtwa030f4sHR3c0QA8Ad4Dtm?= =?us-ascii?q?nfotXvNKcVVOC41K3Gwi/Gb/xIwjf29ZbFfQo7ofGQQ71wa9faxE4tFwLLklqf?= =?us-ascii?q?s5blPy+L2ukWr2ia7/ZvVeKoi2I9rQFxuSKgyt0jionOmIIY01bJ/jh6zoYtPd?= =?us-ascii?q?C0VUF2bNG+HJZQqi2WLZV6T8w8T21ypSo3zKANt4ShcygQ0psnwgbSa/mAc4eV?= =?us-ascii?q?/B3uTP2RITJkhHJ9f7K/mgqy/VCgyuLiUsm0105HrjZfndnWt3ANygfT5tKbSv?= =?us-ascii?q?p94kih2TGP2xrV6u5YOkA7ibDXK5sgwr40jpYTsELDETHqmEjukaObeUop9vKo?= =?us-ascii?q?5uj6eLnquJCRO5Fuhg3jKqgun9awAeU8MggARWib/uG82aX4/ULnRLVKj/s2kr?= =?us-ascii?q?TWsZzDPssbobO5AwlJ3Yk98BayFCum0dQEknkHK1JJYhSHj5PzNF3UL/D4Cum/?= =?us-ascii?q?j0y2kDh33/DGIqHhApLVI3jBl7fhe6xy61JcyAUpy9BS/JBUCrYHIPL2QEDxr8?= =?us-ascii?q?DYAQEjMwyv2ernD8991owGU2KVHqCZKL/SsUOP5u83IemMZpUatyr+K/g+4P7u?= =?us-ascii?q?i345mUEGcKmn2ZsXdX+5Ee97I0WffXrsn80NEWAQvgoxVObqkkGNUSZPZ3auWK?= =?us-ascii?q?Ix/j86CIOiDYfGWI+tmqeM3CmlEZJLYWBGEEqDEW/yd4WDWfcDdj6dItN7njwD?= =?us-ascii?q?T7ihRJcr1Quyuw/i17pnMu3U9zUFup3/0dh14OvTlQ0v+TFvEcSSzXuNT2B1n2?= =?us-ascii?q?MPQT86xqZ/rlJhyl2by6h3n+RYFcBP5/NOSgo1KILcwPZgC93pRg3BedKJR0q8?= =?us-ascii?q?TdW9HTE9VNQxzMESY0xlAdWtkgjD3za2A78Sj7GKBJ018qXa33XqIsZ9z2/K1K?= =?us-ascii?q?gnj1U8RMtAL3emhq1+9wjNGYHFiUOZmLi2da4Exi7C6H+DzXaSvEFfSAN/T73F?= =?us-ascii?q?UmoFZkvXttT0/VvCQKW0CbQmKQtB0cqCJbFWZdL3l1lGQ+3jONvGaWKrh2iwHQ?= =?us-ascii?q?qIxq+LbIfydWUdxj/SCE4YnAAS5naLLg0+Bj+go27HFzxvG0nvb1nr8elkp3Ox?= =?us-ascii?q?VlU0wB2Sb019y7q1/QYYhf+GRPMQ2bIEpTwsqzZuE1a+2NLWFsCMpw17fKVTed?= =?us-ascii?q?k9+ktI1XrFtwxhOZytN7ptiUMEcwR2oUzuzQ56BZ9cnsgvtn8qyxByKa2A2lNb?= =?us-ascii?q?azyYxYzwOqHQKmTq/BCgdarW2lXZ0NuN/qcP9eg4q1LmvA6zDEYi9G9n09ZN2X?= =?us-ascii?q?uG+prKFBYSUY72Uksv7Bh6qavaYi4m54PIznBsKq+0sjjM2tIsHuQlzAysf9FB?= =?us-ascii?q?P6OYDAXyCdEVB9CyKOw2nFikdhwFM/pW9K4oIcymbeCG1bW1POl+hjKplnlH4I?= =?us-ascii?q?Vn3kKL7Sp8RfbC34wZzPGAwguHSzD8gU+9ss/qhI9EZCsdHm6kxCf4A45RY7F9?= =?us-ascii?q?cpwQCWeyOcG3wMtxh4L1UX5C6FGjH08G2NOueReKaVz93AlQ1UAJrny8gia31S?= =?us-ascii?q?J7kysurqaF2yzO2evifgIdOmFXXGlikUvsIY+sgtAEXUincxQplBy/5Urg26db?= =?us-ascii?q?pKN/L2/cQUpTeyj2LmdiXbGqtrqFecJP74kosSpPWuSmfV+aUqL9owcd0y77G2?= =?us-ascii?q?texSs7dy2ztpXigRN6jGOdLHBurHvWYsxw3g/f5N3aRf5QwjUGXzN0iT/JCVig?= =?us-ascii?q?J9Op58mbl4/fsuCiUGKsTodTcS7vzYOEqiS7/3FlARqxnv2ogd3nDBQ10TTh29?= =?us-ascii?q?ltTyXIow72YpP32KSiLeJnYk5oCUfk68VgB4F+lpE8i4sK1XcBgZWV+WYHkWD1?= =?us-ascii?q?MdhA3KLycHwNRTkXzNLP5gjqxlFjJGqTx43lTnWd3tdhZ96ib2MVxC096dtKBb?= =?us-ascii?q?yX7LNamyt1uVy4ohzNYfRnmTcd0/Qu4mYAg+4VoAot0jmdArcKEElGOyzjig+F?= =?us-ascii?q?7864rKpKZGaja76w21Rindq5FrGNvhlcWGrlepclBSJw9t9wME/I0HDo9o7kec?= =?us-ascii?q?XQbNIKuh2aiRjAifJZKJUrlvoFnSBnI37yvWU5y+4nihxjxYu6s5WaJGh286K5?= =?us-ascii?q?BxFZOifzZ8wN5jHnlbxekdqO34CzApVhHS0GXIPyQvK1FDIdq+znOByIED0gtH?= =?us-ascii?q?ibA6HSHRKE6Eh4tXLPCIqnN2qQJHkE19VtWAeSJEJYgAAOUzU1gIQ1Fga0y8z9?= =?us-ascii?q?aE15/Cwe5kbkqhtQzeJlLxf/XX3ZpAe0bTc0TYOSLBRI4Q5f4EfVK9aR7vppHy?= =?us-ascii?q?Ff/J2ushCCKnCBawRPF2EJVVSOB0r/Mbm2+dnA7++YC/K7L/TUZbWOrfJRV+uU?= =?us-ascii?q?xZ21yIRr5DCMOduTPnl5E/I0wFJDUm5jF8TfhToPVzQdlzjRYM6DuBe85ip3o9?= =?us-ascii?q?il8PjxVgPj/46PBKFWMdVo+xG7mr2MOPKVhCpjLjZYzJwMz2fSyLcDxF4Slz1u?= =?us-ascii?q?dz61HLQGry7CVrrQmrdMAh4VaiNzLtBI774y3glMP87UkNX12aJ5jvEvD1dJT1?= =?us-ascii?q?vhmtumZcYSOWGyKEvHBFqXNLSBPTDL29/4briiRr1WjeVUqxqwtC2aE0D9IDuM?= =?us-ascii?q?iSPlVxe1MeFDlCubJgBRuJmhchZxDmjuVMnpZQa8PN9zjD022qE0hmjQOW4HLz?= =?us-ascii?q?dzb1lBrqaO4iNcg/V/HXFB73V+IOaYmyeZ9fTYKo0MvfplGCt0i/la4HM8y7dP?= =?us-ascii?q?6yFEXvN1kjPIrtFyu1GmjvWPyj1/XRpVsDlLmpiEvUp8NqXC7ZRAQmzL/AwX4m?= =?us-ascii?q?WfFRsKvMFpCtvxtKBM0tLPjr78KC9e89LI+ssRH9PbKMOIMHomNxrkAyPbAxUe?= =?us-ascii?q?Qj6qL27fgVZRkPaI9n2atpI6sITjmIISSr9HU1w4DukVCkt/E9wcPph6RTQkka?= =?us-ascii?q?aFg84O4HqxthjRRMFBsZDAWfOeG/LvKCyWjbNcfRsH3av4LZgPNo38w0Fidl56?= =?us-ascii?q?nIHQF0rKWtBMozNubgkvr0VX93hxUG4z1ln5ZQOq5X8cCeS7ngUqigdkZ+Qi6i?= =?us-ascii?q?vs6U8tJlXWvCswjFUxmdL9jDCScD/xKLm/UJpTCyrzuUgxPI30QxppbQ2ymkxk?= =?us-ascii?q?MSnLS6hXj7R+aWBhkBXctodXGf5AUa1EZwcdxfeJaPoy1VRRsSanxUhc5evZE5?= =?us-ascii?q?RikhAqcZ2tr35a3QJscsI1L7TKJKVV1lhQmr6Oviiw2+Ar3gAePFgC/3mIeCEU?= =?us-ascii?q?uEwFLaIpJyuy/uNx7gyClSNDeHISWPsquP5q8F0yO/iYxSL6z7FDMlyxN/CYL6?= =?us-ascii?q?6BpmfAksiIQlUt2UwWk0lF/KN73t09fEqOUEAj1ryRFw4GNcDaMwFac9JS9GTP?= =?us-ascii?q?fSaJqejC3Ih6P5u8Fu/1Vu+Dr7wbgli+HAYuEYUM9doOEYWx0EHCLMfnML4ExQ?= =?us-ascii?q?8r5Av1OFWPFO5Jdw6TkDcbv8G/y4d60pRGJj4DG2p9Pj+36azJpgIxm/qMRtQ2?= =?us-ascii?q?YmoAXoQeLH42XNC6myhDsHRaFTW3zuUZyAuC7j/7vCjQCifzb8Z7bveOeRxsEM?= =?us-ascii?q?22+Sk486Wuh17X6IvRKHzhNdt4vN/P9eQap42cBvxOUbZ9tl3Qm45CR3ylS2TP?= =?us-ascii?q?C8K6J4Dsa4kwatz5EnK6Ululiz0rScfwPdGtI7OHgQHuWIZYqo6b3CosNcWlDD?= =?us-ascii?q?ERBw9wp/0f5KJ7fQADeIQ0YRrptwQ4Kqy+LxyV3cmpQ2aoNTRZVeJfzfmga7xR?= =?us-ascii?q?0SUscvewyGE8QZEi0+m37UkNSYkJjhHExfesfY9eUTTzGnFGdAXPojI5mHR7Ou?= =?us-ascii?q?Y03Og/3AvCsUMAPDCTaOxpdGtEsskgBVOTJHV2DXY4R1+cjIfY/wGs3rAT8DFG?= =?us-ascii?q?kNpO1+1KrmT+tIfFYD2wQKyrtYnVsy04YNc8p61xMJDsLdWeu5Pbnj3fSp7Qsg?= =?us-ascii?q?ufXyOhDPVam8JfICRBTPlGhGEpI8oGtpRd6UApTMcxO6RPCLUwprCtcTdrFjAd?= =?us-ascii?q?zSkCWoyawTMCnPmz26HBlhiKapQjMAYIsJJYgtsSSyR2eD8RpLe/V4XKkG+JUm?= =?us-ascii?q?cLIBoS7QRI4AIPiIpwc/v474XWV5BMyiRZo/RuXivMDJlo+EPxSnuKjljgVPWh?= =?us-ascii?q?j+up0BpIzPLq09kURB5/CU9Zx+ZNjkUmMax5JbMMs4DNqTKHaUT6vGfxx+S8P1?= =?us-ascii?q?lR1dfYd1vmA4rZrWD8SDET+WUIRY9Tz3HSDY4SnBBjaKYsv1pBO5ymelzk6Dw6?= =?us-ascii?q?2YtpG7i4Vcakx1YhrHYGSCeqE8ZPC+58qlLXXSdpY5a1p5X5I59SWHNf+IWBq1?= =?us-ascii?q?dFl0VgKyC4xYBAJMFN4z4MWTlPri+evNapSc1Mx9F5AIEWLtd4oXf9F7tOOIKN?= =?us-ascii?q?rH0uprzv1njZ9igmv1eg2TWzHbW0T+FC8m0fGwUpJniepVI1A+sq7GjS7kjHsk?= =?us-ascii?q?po8OdDGriPkUJxrS58HpBIGjZGy3SlIEp2THZYr+VaMqTUftdbQ/kqexCvPRk+?= =?us-ascii?q?GuQn30yN5k50mnj4bzZ1tgtA9CDXRxM0WjUNgrfxhT0erdmqOTAAS51SazUhcz?= =?us-ascii?q?zIKwOcmSFZuhZfd0FqVI4YAtZD57EUw5FU8tDESUmyNSEPRAZiOR4g0fpDiU5D?= =?us-ascii?q?t12VeTzaDQqtbvvPrgF7fcKKo8KzKvT24htHgJv9sO8k76UDW2GmmQq1TNDetY?= =?us-ascii?q?D8rMeFtk+Te6rjLuKzf2fBTCDSghC0m7gkFYPG/y/JMApUM5N602YrYYD9CW7X?= =?us-ascii?q?OhRLP6AbJ01FWq1hdNpJvPtaaNF+eKYV56BiGwiLRhXxF4yztPNGNErcRSzCLy?= =?us-ascii?q?Wd9eyyuZnc7bLBRuT8ZMGA2njKTrlrMZd97Dn0B63l0ZRC+kbs3Pdi6F96Q0Dc?= =?us-ascii?q?My+dtNThOh8L5M66e0v4oJImADPWD41skHf2wkFAcNQXTDO0/JsEz5NW9Wj/Rf?= =?us-ascii?q?h+0kftrO1Y76Nk5pUv47B11ce0Ir/fKexBsU97GBebGxlq+442AGh4WmBRePMe?= =?us-ascii?q?J+nXfaQFl8DhseT3G7YQ6B2P9OxTccHHKF3ZmsmjFjGcTgRJnBsbqTEEMASTyu?= =?us-ascii?q?WIm7JwSca5v+j2wFwt41m5Lh4C0r9t+Z2I+q2SpO/YdxHR16QLWrD2RsPvqbQh?= =?us-ascii?q?o16d5fs+m7MVZ2N1ZReoHPIaVs4HyWfq1boqwj40E8PfA7Lg/+ZOV3AjkTL6nJ?= =?us-ascii?q?B9BFEWFekKHbeQ+IReg2M4m/DYNtIKc6BNgGCPFQW+Hr8F036r5DOdIHN5jRHW?= =?us-ascii?q?zxHwXWSz4Uf0rSBiRyvMwc3jkk1IWbapHkpSQzCmOUljsDOIJgbossT4ubgt5k?= =?us-ascii?q?EsLmPkrM6NlHemOL5PGc3/IMeRISgypFISlpExR9qv2Y4BGdWnO9cR7Gt+bubC?= =?us-ascii?q?5GO3ji9BublIi5DZ4sGP9fXdBWOggLGCq7WR2DBYzWA1vVc+6t+8MfHO48eFQ+?= =?us-ascii?q?+y22YQSCd/vBDBXwWup7zeoF0VNlaH0EDRmIwFJttZx2U31ln65Og/R9I+7BlR?= =?us-ascii?q?GZzEZ/wcvjDzJDv1wVGEbtIsSiae0iVYHlTpEVl5AqcwwmTws9zVlX3I4V0nWp?= =?us-ascii?q?Fwd1D7hRxwF4g4LVkt6F0XzycYHwgCdw2UDLayBUv/NYsET08DaRaZ07emZqc7?= =?us-ascii?q?x0pzwqmg5OXLd+xzG7INNupBjg6JhFVbGJMWsagFTbJ5ZVBc9LDYphLjC4jhUP?= =?us-ascii?q?jqj3wwOuOpQspC68AWq2Mi4hqjRxqn8ZpD7rcah4qSeaFYepXMp95z71t56jET?= =?us-ascii?q?bCBNhwJ/jxyhW+AGuO/j+sTbsIav6uu2T6ktRv4X9hYuCGR8jpvwnEgjrsvK1+?= =?us-ascii?q?dYUYDalYP//x1TLHGQpYbayR58KfAUJI6xe7Zg7XoHLTAEJ30SJdqWd+U84yh1?= =?us-ascii?q?PTXL/VNCHt8DZdMWPcrKgwBUiVTlWKpN+crfG1+YDZpzds8z4mrv0j817YczUu?= =?us-ascii?q?bu6T+xP5Df7EtBP/BdgyV2ktLNuuwVzeDVCCgN7nmTcwJ1zT+ay5mRF/bw+v2B?= =?us-ascii?q?yM3OV1wYGi45SYFdKySZ9AO6R+q1m5TpUh+O5c/omp0+bl+QSma3nKsbrqZGCf?= =?us-ascii?q?RAhTnj3jhCCoD1gOqYs9W252tNqFJHDIZz4AbBGKVeIpV0JxT4mdO2RkhnHCf/?= =?us-ascii?q?ft/bdgY2suqM2ugM+/l+N1f5ZYIDLRIL1bT66WZSTgtpT7L2pUiWXeYQZNtgVf?= =?us-ascii?q?PFoWtY6YZ+JK8VPFmSvobmrjFWp1AqGAUpcqM/riRGdknSmw1YQ7r7uLwahQQA?= =?us-ascii?q?StN2pUhMGWa0OGI/+TXHT7hVg7eNB/wV6DmTSbYOU0pwOCNkXxy1wIlue6eunf?= =?us-ascii?q?1ft2NGmSV9oOQl0zN4Xxa8vCzsqLgL2T0+5LG5ujIBuWZGTuWFiSvID0tMzOgS?= =?us-ascii?q?h6cGF3ni8UC8YGUEbIbq77loOd/g9ZI473oibhsteSwGXeK9CyD/lK6IDYmPv8?= =?us-ascii?q?hahBGTosnOaqWzLScKPLQn1R3jX2R90hTZnBtw8msLRTWg7Nk+KIqhOcYlwjeo?= =?us-ascii?q?FnXadVYN5KNJq8jxtV8QQesoaFNh3n9s0syaSS0MXsDPHXg6jhQ8Y2VebJ1D8Q?= =?us-ascii?q?MaF7UvgjuQv6lG4BsbYDHPH4Sh54nfgMbI2X4mTdtwwWLWvKKFjIsw0HJ5g9N0?= =?us-ascii?q?8jKOuHMKeuzaTcBsDHbz1oNExO3wffqttP4ISJd8xLSnTvACLtGp+XGq15VyRk?= =?us-ascii?q?+l2rMeEkK2MO8HwbfaXTmqSWmcWemQaGiMmDA5Mk/u6hWyKF04dttKpVcnMuTe?= =?us-ascii?q?np5cixHhUbRsSyWSpV/azHQjMeQedwI3pIeoZRcHTOsQZ+iAP+gh3ucyCFwWb3?= =?us-ascii?q?/GBSF2EfO5sUaxnIhnPHVt+Vn6YeXo8g39LNuSGwULEY3EoZ514/C6QHyOOWN4?= =?us-ascii?q?xh1oIEZ07/vfF0g2tuJEdpaRnNvQh9d80eMedfdiKy49utkVmo1974mYysGKfg?= =?us-ascii?q?/NzpzqP9HavuCYA+HDz0QtYmxVSaQWYQXp54ghJd45X7rTHadFvRQCG6c1XYYt?= =?us-ascii?q?N2Dr9KF7NAlzaBLeZKyogsn2oeKGfoNUp3jS7l0qNifdtRoDyvi6TQFgapCqgH?= =?us-ascii?q?LyIIsuST1dtd1tDQBmHJBOG8MGoAqrGZmUmLu0i9Wp4UN1p/cKsbbsCvDNzNm5?= =?us-ascii?q?0Zt+X5xb5UyTIjncH6hqgkVgjuS3nPjAyJ3xBt34ddMDTuh7TXbPaqXaEYWnNj?= =?us-ascii?q?KOJsX8dlZI8r6EyrJ5Uwmeaz7iUqqDtS2kKO9k7lshxox/ZurTwyQn76vH19vq?= =?us-ascii?q?e2FbuiCjoGaONJtb8lPHHvTeXxZORvqe7GZlHLEYbZfu9OgQL9Mu2t6c7Bdv7D?= =?us-ascii?q?5aysuKP7ChrlPQ2kJ8bZ/bKErp2yAkWYgFORi/NUosgXTFqnTGGnlcL9KrKc9q?= =?us-ascii?q?gNqPCRzt/UZxk3k3ZmFdAmroWcuROW8D1sKlegKK8ANLD9Aen++4fkI2ubGySe?= =?us-ascii?q?l2NZVfh+qqrK8InM1qKy7RXshaOT/fLLttMTpMAeXDvl8oYgQLs7ItQIc6eYCO?= =?us-ascii?q?IF8bMEeH0S7yyBHN3lH0d9yt0qaJJz0b8mtGz7LDzzdMowi5ufCEgszsSrzZa4?= =?us-ascii?q?v2XPHKOio/Sj6aXSgyEVqu+Vq8ufoLpvmYIWAErV0PfyKSDhITpqBordjNAW/T?= =?us-ascii?q?mfFjcIcMhP+ERyD6UDd4m7YqBiZXqUCMROIOFQbMYHD6mmpcuRKtJvtX8HL7a7?= =?us-ascii?q?2X3LFVW+0LAodWdP2WXcfYc+hEJzg0jjUZJPq8f9rEorY711LISnEZE7PJ9F2F?= =?us-ascii?q?V0OWROaTxzf1UoUUpYQ0vTAo+t3IlC9tD6vIJ6qfpyKp8oOglyaYt+jeWXUsbk?= =?us-ascii?q?E2m+8CHneOwANBKGAFDNEVvlvhQqieaEZQzHgpk/5h2wcQeARvVX1jyn9WnPG7?= =?us-ascii?q?Gs1dUlMUiX2hT+AIbFBwFjM/4VGF7hf0YdMepcCAD1NZo6ABTYsbMekA9JjcOK?= =?us-ascii?q?xWxu0gmj1hvn8UqSKYWnFUiw+eu4HZBr5x3PUW53Yz9utqBGmTUjjfdS7B0YPg?= =?us-ascii?q?BMVRk3Q96Uv43tbZ67g+fIBRoJt0VRJQWS8=3D?= X-IPAS-Result: =?us-ascii?q?A2HVBACU1H9Y/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgw4?= =?us-ascii?q?BAQEBAR+BWBGOS6g+KIgJVwEBAQEBAQEBAgECYCiCMxuCIwIkExQgDgMJAhcpC?= =?us-ascii?q?AgDAS0VHwsFGASIVQ2yEDomAopKj1QRAWiFGAWBKwGHUocnixoCkWICikSGJQK?= =?us-ascii?q?Sb1hxHgYCECNJXIMYgl1VhlOCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 18 Jan 2017 20:54:23 +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 v0IKrgiW027309; Wed, 18 Jan 2017 15:53:50 -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 v0IKrdIs283724 for ; Wed, 18 Jan 2017 15:53:39 -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 v0IKrdsU027307 for ; Wed, 18 Jan 2017 15:53:39 -0500 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH] checkpolicy: Fix bug in handling type declaration in optional block. Date: Wed, 18 Jan 2017 15:53:49 -0500 Message-Id: <1484772829-15960-1-git-send-email-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.7.4 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 Nicolas Iooss discovered that requiring a type in an optional block after the type has already been declared in another optional block results in a duplicate declaration error. The following policy will trigger the error. optional { type T1; } optional { require { type T1; } } In this case, although symtab_insert() in libsepol properly identifies that the first T1 is a declaration while the second is a require, it will return -2 which is the return value for a duplicate declaration and expect the calling code to properly handle the situation. The caller is require_symbol() in checkpolicy and it checks if the previous declaration is in the current scope. If it is, then the require can be ignored. It also checks to see if the declaration is a type and the require an attribute or vice versa which is an error. The problem is that -2 is returned if the declaration is not in scope which is interpreted as a duplicate declaration error. The function should return 1 instead which means that they symbol was not added and needs to be freed later. Signed-off-by: James Carter --- checkpolicy/module_compiler.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/checkpolicy/module_compiler.c b/checkpolicy/module_compiler.c index 6e5483c..bb60f34 100644 --- a/checkpolicy/module_compiler.c +++ b/checkpolicy/module_compiler.c @@ -647,7 +647,6 @@ int require_symbol(uint32_t symbol_type, } else if (retval == -2) { /* ignore require statements if that symbol was * previously declared and is in current scope */ - int prev_declaration_ok = 0; if (is_id_in_scope(symbol_type, key)) { if (symbol_type == SYM_TYPES) { /* check that previous symbol has same @@ -661,23 +660,14 @@ int require_symbol(uint32_t symbol_type, table, key); assert(old_datum != NULL); unsigned char old_isattr = old_datum->flavor; - prev_declaration_ok = - (old_isattr == new_isattr ? 1 : 0); - } else { - prev_declaration_ok = 1; + if (old_isattr != new_isattr) + return -2; } - } - if (prev_declaration_ok) { /* ignore this require statement because it * was already declared within my scope */ stack_top->require_given = 1; - return 1; - } else { - /* previous declaration was not in scope or - * had a mismatched type/attribute, so - * generate an error */ - return -2; } + return 1; } else if (retval < 0) { return -3; } else { /* fall through possible if retval is 0 or 1 */