From patchwork Wed May 10 20:25:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9720635 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 59E1760236 for ; Wed, 10 May 2017 20:25:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6FBA3201BD for ; Wed, 10 May 2017 20:25:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 614712863E; Wed, 10 May 2017 20:25:41 +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 78127201BD for ; Wed, 10 May 2017 20:25:40 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,320,1491264000"; d="scan'208";a="6869185" IronPort-PHdr: =?us-ascii?q?9a23=3Ayf4/NRY7mTQqVlik5CZ6UUr/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoc26ZB7h7PlgxGXEQZ/co6odzbGH7Oa4AidZvcnJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBe7oR/NusQYjoduN6k8xxnUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU2/nvXishth6xFphyvqQF0z4rNbI2LKPZye6XQds4YS2VcRMZcTyxPDJ2h?= =?us-ascii?q?YYUBDOQPOv5Yoovgq1YAsxS+HhKhCP/zxjJSmnP7x7E23/gnHArb3AIgBdUOsH?= =?us-ascii?q?HModvxLqgSVP66zLLVxjjddfxWwyv955bSchs8pvyMX7xxftbLxkk1CwPJkE6d?= =?us-ascii?q?qZDlPjyJ1uQNtHKX7+x7Ve21kWInpAZxoia2y8oql4LHhZoVx0jZ+Sh2z4s5P9?= =?us-ascii?q?21RFNhbdK6H5ZcqTuWO5ZwT8g/WW9nojw6xacDuZOjeSgKz4koyADHZvycdoiI?= =?us-ascii?q?/grjVOGMITdknH5leKywhxK18UW41u3zTNO00FdXripeiNXMqnAM2ADT6siAUP?= =?us-ascii?q?d9+Fuu2S2T2AzJ7+FEIEQ0mbLaK54n3LEwioIevVnMEyL5gkn7jLKael869uWn?= =?us-ascii?q?9ejreKjqqoeZN4BuiwH+Nqoumta4AeQ9KgUORHaU+eC91L3l4E34T6xGgeYxkq?= =?us-ascii?q?nEtpDVOdoUprWiDg9J0ocs9xa/DzC83NQehnkINkhJeB2Aj4j3I13OOuz3De+j?= =?us-ascii?q?g1Swlzdm3/LGPrrnAprXMnjDkK3ufbBm5k5ezwozy9Vf6IhPCrEdPv3zQFTxuM?= =?us-ascii?q?bfDh8jPAy+2/znB8ll1oMCRWKPBbeUMKHQsVCS+u0vIPKMZIgTuDb8Nfgo/PDu?= =?us-ascii?q?jXskmV4SZqapwJ0XaGylHvh8JEWZe3XsiM8bEWgWpgo+UPDqiFqaXD5LeXm9RL?= =?us-ascii?q?wz5jc6CIK6CofOXYGtj6Kf0yilBJFWYXpGCl+UG3fya4qEQ+sMaD6VIsJ5jzME?= =?us-ascii?q?Ur6hS4k82h6wsA/6yqFqIfDK9S0CspLvzt915/fclRsq7zx7E9yd032RT2Fzhm?= =?us-ascii?q?4HWiM207ploUFm1liD1q14jOBCGtxI+/NFSAE6OoDAz+ZiEdD9RhrBfsuVSFah?= =?us-ascii?q?WtimADcxTs4vzN8KfUl9HsutjgzZ3yuqGLIVkKSLC4Iy8qLZxXfxJsJ9xG3B1K?= =?us-ascii?q?gulVUmRdFPNWK+jK5l6wfTH5LJk1mel6uydaUd3SnN9GGYwGqLuEFUSQ9wUaPf?= =?us-ascii?q?UXAZfETWt9f55kLcT7CwE7gnNBVOydKaIKtQdtLplUlGROvkONnGfW2xg32/BQ?= =?us-ascii?q?yJxrOXd4fqY38S3D/cCEgfiwAT+WyJOhQgCSu7pGLeFjNuH0r1Y0zw6el+tG+7?= =?us-ascii?q?TkgswgCEbk1h07+19QAPhfGHRfMcwK8LuCA7qzpuBFa9xdXWC9ieqAV9YKVQe9?= =?us-ascii?q?Q94E1I1WjBrQxyIoSgL7x+hl4Zawl3sVnu2A9xCopckMgqt2gnzA9qKaKZyV9B?= =?us-ascii?q?bD2Z3YvqNr3QMGny8wila7TK1VHGzNaW5qAP5ew7q1r5vwGpEVci/m5k09ZP0H?= =?us-ascii?q?uc4YjKABAVUZLrXUY97wJ6qK3CYikh+4PU0mVhPrOpvT/Y2tImGvElxw26cNhD?= =?us-ascii?q?NaOIDgjyE9cVB8K2Muwlh0Cpbg4YPOBV7KM7I9mpd/+Y166wIOZhnDWmgH9c4I?= =?us-ascii?q?9h00KD6Sx8SvLJ35kf2f2Y2BWIVyvkhle7rs/3gZxEZS0VHmen0ijkCpRRZqpp?= =?us-ascii?q?fYYXEmquOMu3xtJwhp7oQXFY8kSvB1UY18+1YRCSdUDy3RVM1UQLpnyqgSW5wC?= =?us-ascii?q?ZwkzE1sKWfxjfOzv/8dBUZIG5EX3RijVL2LYizldAaU1CibxI1mxu9+Ub6269b?= =?us-ascii?q?qbxjL2bOXEhIfjL5L2V5X6SssbqCZtJA54kzsSVLSui8Z06VSqLlqRsAzyzjB3?= =?us-ascii?q?dexCw8dzyypJX5ngB1iH6aLHZptnbWZcFwxRDZ5NzTXvNR2jsGRC9ihjnNAViw?= =?us-ascii?q?Jd6p/c+bl53bqOCxS3qhVoFPcSns1Y6AsCq75XZ2ARGmhPC8hNnnEQk80S/m2N?= =?us-ascii?q?hnTj7IrA79Yont1qS1LflnclNuBFDi98pwApt+nZcohJEMxXgagY2Y/WAAkWf3?= =?us-ascii?q?NdVUx7j+Y2YKRT8F2NPV+xXl11F4Ln6TwIL5THqdyNN7Z9amemMWxj4978dSBa?= =?us-ascii?q?eM9rNEgC91rkCiog7Levd9mTMdyecp6H4cmOwJvRYhziOaAr8OB0VYOzLjlwiQ?= =?us-ascii?q?5dCksKpXfHqvcaS31EdmntCuEreCohpHVXb6ZJgiGzRw7sNhP1LQynHz7ZvkeN?= =?us-ascii?q?bIZ9IJqhKUiwvAj/RSKJ8pjvoFnzdnOWbjsn090eE7iwBu0o+gvIWcNmVt57y2?= =?us-ascii?q?AgRDNjHvfMMT/SztjbxCkcmI0YCvGY9hGjoVU5fyS/KnDi4Sv+z9NwmSCD08tm?= =?us-ascii?q?ubGb3HEA+B7kdpsmnCE46tN36KJHkV19NiSweBJEZHmgAbQC06noIlFgCt3MHh?= =?us-ascii?q?aF125i0V5lPjthRMy/5oNhnmXmfRvgiobC04SJ+FLBpZ9gtC/VvaMdSC7uJvGC?= =?us-ascii?q?FV5p6hrQyJKmOFfAlICGYJWkKKB1/9Irmu+dnA8++dBuWgNffOZ6uBqfBGXfeS?= =?us-ascii?q?2Z2vypdm/yqLNsiXMHltFfs72lZEXXB8AMnZlSsARDEQlyLXdcGbvA28+ip1rs?= =?us-ascii?q?+h7PvrRBjj5YyVC7tdKd9v4Qy5gb+fN+6MgyZ0MSxY2okCxHPSzbgQxloSiyZu?= =?us-ascii?q?djS2C7sPqSvNQLjXmq9NAB4RczlzO9dQ76IgwglNPtbWit3v1rFmk/E1EE1KVV?= =?us-ascii?q?r9msGufswHOHuyO0/CBEqRM7SGPzLLydntYaygUb1QkPlUtxqotDadCU/sJCyD?= =?us-ascii?q?lyHyWhChMOFMljqbPABQuIG8dBZiE27jQ87nahKhNN97lzo2wac7hnnSL24TLS?= =?us-ascii?q?B8c19Rrr2X9S5Xn+5/FHJb4XpqN+mLgTiZ4vLDKpkMsvtrHz50mPhA7HQ+1rtV?= =?us-ascii?q?6jtLROZslCvOqd5uoFGnku6VxjphThVOti5BhJiXskV6JaXZ6p5AVG7C/BIM6W?= =?us-ascii?q?WQDwoFp8B+B9L1pa9Q0N/PmLj0KDdY/NLe5dEcCNTMKMKbLHohNgLkFyXVDAsK?= =?us-ascii?q?Sj6rM3rSiFFDn/6J932atJ46poLrmJoURb9RTEY1Ge8CCkR5ANwCJ496USkrkb?= =?us-ascii?q?GBks4H+2GzrB7JRMpEuJDHU+idAfTrKDmCirlFaAEEwbTiLYQcLof7wVBtakFm?= =?us-ascii?q?nITWHErdRcxNoipkbgMuukVN93l/QXM1203+cAOt52EcFf2vkxEqjQt+ZPgi+y?= =?us-ascii?q?3341crPFbKojU/kFUpk9X/nT+RaCLxLLu3XYxODSr7qVI+MpfgTgZ2ag2yhlBk?= =?us-ascii?q?Oy3CR7JKjLtgdHpniAnCtptTAfRcV7FLYAcMxfGLYPUlyU5cpTu8xUBZ/+TFE4?= =?us-ascii?q?dtlAsxfJG3rnJAwR9sbNk7JazIPqpG0FhRiriIviC2yuA72BUeKFoV8GOOZC4I?= =?us-ascii?q?v1QFOaQ8KCq2/+xj9BeCliBZd2gWTfoqpfxr9lgjNOuc0iLgyb9DKlyxNuCFKa?= =?us-ascii?q?OWpXTAn9aSQlwszkMIi1VF/b9u3McndEqUTV4gzL2QFhQOLsfCJgdVb9dI+HjU?= =?us-ascii?q?ZyaOvv3HwYhpMIWlCuDoUeiOub4Pgk26GAYpHoIM7tkOH5S3zE7YKsLnI6Ifxh?= =?us-ascii?q?U2+ATnPlOFA+pVeBiTijcIv9m/zINr3YlaPjwSHHlyMSCw5rbRug8mneGOXMko?= =?us-ascii?q?bXcAX4sFN3U2WMugly5foXtAECG90vgFxwia8z/8uiPQASH/b9p5ZPabfxVsCM?= =?us-ascii?q?22+Tgk/Ki2jkbX/YnEK2H8K9tipsfF6fkGqJafF/NUUb59vl/Am4lZQnyqVHLP?= =?us-ascii?q?Ed61JpXrdoYsbNz1BWyhXVCljTI6UdvxNs63LqeUmQHoWZpUsI6D0TAsL8+yDD?= =?us-ascii?q?ceGwtrquEC46J9awsDY4Y7YRH2tgQ+MbC/LxmC0tm0RWaiNydWReFFzeqmf7xX?= =?us-ascii?q?0zYsbuiixXQ6SpE6zvW4/lAVS5EPjhDew/GjZ49EXiXoAXNdeh/ApSwgm2hvK+?= =?us-ascii?q?Y+2OE/zw3UsVMEKTCEaPRpaHBYv9E7HV6dOmt5CmwjSlCGkIXD/BCj36oJ/yRH?= =?us-ascii?q?hdZV0fdJsH/kvp/QeDisQrCkqY3Jsyo8atgru7dxMYriIsSatJPemTjfTILIvA?= =?us-ascii?q?OcTSC0DeZXlN9LLS1ER/lInH0qNtYduYpd80YxUNkxJ6BXAqk2ur+qcSZkDTIV?= =?us-ascii?q?zSIBS4yA3iYNjfun1rTGkReQdJAiMB0av5VYntsSTTJ5YiMEqK+kTYXWmHeOSn?= =?us-ascii?q?IXLwcL8QRM+AUAm5dqfu//+orIS4RDxiVKo/JuSCTLCIdn91/6SmGQjlj4TPSh?= =?us-ascii?q?k+Op3QJOwvLjyMMbWBtlBUhb2elWilMiKKtrJKkIoo7KrjiIeFv0vW731OSmJF?= =?us-ascii?q?hRycjVd1LiD4rIrmv8XTMC9nIKX4NPz2vfFZsKmQpjdKkrvElMIJyhekvm/zwk?= =?us-ascii?q?wIBpEKOiVcGlwFYlqXgGSjyvE9pGDOFmq0zYVyF/Y5Css5XlIJRSQmlf+JGHrF?= =?us-ascii?q?dZikptOTajyZVAM8FN/iIMXD9XrDqHptuyVctD1dV1D5IXI9d/unb9GL9fN5SL?= =?us-ascii?q?pX05pKDvwGfD+z8gqFe62CmzG6igQuJF+G0eHx4kJ3iCpkkqFOQg6GHS/U7Rsl?= =?us-ascii?q?ps5edUGqCPjVltoDZ6Bp1OBixG1Wq/IFR3UXZLqPhVJ7rNc8xEXfYyYQGgOwYk?= =?us-ascii?q?Gf4hxUyJ8ll+nW3lbCxqqgta5yfdUhE2VSkSnLjggiARpd+8OTAEUZJIcSsuYD?= =?us-ascii?q?rfJwKdhy9XoA5Va1t2VJABHtZF57Yb0JNP8crMVUmgNSMIUAFsOw8jzfVfkktD?= =?us-ascii?q?v1mCdiDGEQqkb/DPvQNrfc2Jts6mMOz5/BtbioPgqO047bsMSGCmmQK3XdDTtI?= =?us-ascii?q?v8ttqUtkSQaqv3L+q8bmLfQzTWixC/m6skBYHQ/yfPKApbN4V6yX08bJj5Em7L?= =?us-ascii?q?IQ5JKL8HJ0dATqB6bshGovpGaMB6fqYJ5bVtCQiDRh/1H4yvtvZGJE7JRTvCNy?= =?us-ascii?q?WB7vC/oYXL4LzBU+jveNKDyGvcTqJqOpd69SP7FK300Y9f/Ur23uli9l9gRVjB?= =?us-ascii?q?KSCBo8zrJhkX68m6akviopopECvTAJhqlHrtwl9Pd9YLQyKw6psV05VZ52jsSe?= =?us-ascii?q?Jjzkf8qvVS+Kd+5Ykx/b9p1d++Jb3OJvRCrU9nHh+UCx1o9po3Gmh/QHtRYusL?= =?us-ascii?q?J/fPZqkZiN3uq+TrF6wW9BKV+vZWad3cJ03bncm/ED6cQwRenAgdsT4aMhec1/?= =?us-ascii?q?mdlq92U8mlo+b52lgq41ejMBEL16xt6p2C+qqTo+/bdR3RwqYYWqLyXMP8sqws?= =?us-ascii?q?u1+O5f0jjLMOdXF1YwyjEOgZSMEdw3ztwr00wi03EsPMBbTg9OREV3IjkTLqg4?= =?us-ascii?q?p9EEkOGvMIAbqL+pxTnmE8m+HCN90WdKVClnyOFR6iHL8C02Sk6zCLIGl/nxHB?= =?us-ascii?q?zw3wQX6p7FDotyN4RjHMz9j7mEpPSra3HVtSXzauOUJgtTOPOwzotMb4uasr90?= =?us-ascii?q?w2N23ku8iLlGS/JLNWEcr/JMafISkvvl4XioM+RsC304ABBdW9OMsR8G15bvbG?= =?us-ascii?q?8WOkjjJOrrxIh4rb7cCZ4PPXEme8j6eCsbWC2ChYymQkvVE48t2gMurO59iKTv?= =?us-ascii?q?mz2WYeUTpwuwzbXxGvsrzbtVcUOU6V30jXhIwGJNZZ3WM31kv+/ugsXMoz9BlC?= =?us-ascii?q?FobHf/4Cvir8OCXuzlaQfd03TTKT0yBNEVLrC1Z4F7Yz2HnqsMLPi3jQ50UiRp?= =?us-ascii?q?NseEz/mRx3E4I4JFov6FgWxyoOCg0NZg6bDb62H0TlLI0EVUcZZRSBwre6Zr89?= =?us-ascii?q?3VdvzbO3+O/Tcet8CrIMNvdclAGBhkRUF4kNsaIAXLJzZUNS+LTQpgj4BIjtR+?= =?us-ascii?q?LmmmYoNf2pXsBa9tgUuGAj4gakSRuv85VD77cHiJCQbKFEfJzMsdtg4Edg+DEA?= =?us-ascii?q?aDZCgAVljxO+S+ATvvrv4t/BsJqn8uyuTroiR/0L9xgoAGRzl4Pwj0o/od7L1+?= =?us-ascii?q?ddRIrViZ788AxUOH6FpoLa0xh6KeoTJIOmZ65g+G8bJycCJ3IPM92Wa+M/4yN3?= =?us-ascii?q?MzXc+UZCAsUSatMcJsbNnhpUikLxUrFJ6sXbAkOYC5t0d80w82r30i468Z8mXe?= =?us-ascii?q?bm9jC7Po3Q71BCP/NCkCVjjsnCq/IPwfrPEiQX52eWawRtyCOY15aNE+rw/fmL?= =?us-ascii?q?yNzMWFMJBDQ2XJlBJDqC4gGnQuu1lIn3XQOU8MDznYk+eFiWRnOvgKQPqrxMHv?= =?us-ascii?q?JYiiXnwjheEZj4h/2LvNqq9GtXsVpHHIFo7RLbHKVfP5N7OQn3l8SwQkhzGDH/?= =?us-ascii?q?ecHOeRY0vuqZ2PsM6f1kN0TifY8bPg4Ey7Xi5HpTTwthVLn2vlKDUuIKftdmSf?= =?us-ascii?q?TErndO6YJ7MKIPOVeQpZPwojdPslA2DxcjaKUsoTxCaknOgApVVr77uLEckQsc?= =?us-ascii?q?Ssd1t1JDF2y2OWI+4SfHVKtOgameDfwa6DOTQbIUX0VvKCN+TAu/2I9ydLuxgf?= =?us-ascii?q?BHrmRGkzt/oPgt0zxmQgGwtjHsp6IJxDIv5bC5tDQHuXxeTeWekjzFCUtCzPQU?= =?us-ascii?q?l6gcD2vt6V2mbHkFcoTy/KFtJd78+ok5/3Q/fRIjcjUHXeS+ES7wibiFAoiSsN?= =?us-ascii?q?1BhR6Nv97OYaW0LSgIObQ30QjjSGRl0gjCgBZo93MGQje+498qKoW9Pd0oxySy?= =?us-ascii?q?FmjdalkM/rlFsM3vul4XVOE2c09uwH1/0sibQS0AXMPPG2Iyjgkqd2pEdJZD5A?= =?us-ascii?q?QBF6kvhDaIv7VJ8hsSYDjKDoSv4pPQktvQ2XkhUddqwXrbpq+FhpIqyH1lnNd0?= =?us-ascii?q?7i+SuHsMbOHYVs5sAmTp1ohB0+D+YO+tsu8fQot81LuhSOMCMtWk+WauxJVqW0?= =?us-ascii?q?qly68CH1q4LOADxanUUyO/RW2eR+uLb3CGnywlPU7q+RmoMlo3Zd9Pr088MevC?= =?us-ascii?q?hZlcmhbjUbxuRSWQolnbw3IlMe8AcQI5ppuncRQQTOENf+icOfQuwPomBVQXcX?= =?us-ascii?q?DJGzd2BvStsV6pm4h7J2lg4Vvkbuvw6AzmN8GSGhYcG47AspFx4eC6Rn6GOXJ4?= =?us-ascii?q?wh19Ik109+bHF1svreJdcpeRnd3Vh9tly+4Fc+liPTc6ut4JlYJp8ZOU39uScR?= =?us-ascii?q?HN0pbyIsnYo/aAA/3FzkQlZn9VX6EcYQP0+4U6JMA2V6fUHbtDshQWHbI6T4A5?= =?us-ascii?q?N2ft6KF0Kxt+cgnVZLuqmcTqvuaLaYFPp3/K71I/MDvcuwcdxfOqVwB7aY6lh2?= =?us-ascii?q?nqKpAqWj1Bt8FtCgdhHIZXH8MArgynA4Obma2ij9+x+lh6u/MRsafrC/DFztK5?= =?us-ascii?q?34JrU5hd/0yLMy7bBLN3jUR9kuSynvDA34HqCcz8fdMEVe57QnPKa7PBEYu/Nj?= =?us-ascii?q?KONdzme0FY676Tyql0UhaPayDjWaqJqimkO+554UU00IB4e/DTzDM15bHBxNTy?= =?us-ascii?q?f31bpjukrXORMZtQ9kDFBezfXxJSTvqI63hlHawRbYTq8OcOMNoiwMWT4gVp6z?= =?us-ascii?q?RCysSFKbC7rkDQwkJ7aY7bLEzx1iY7Q4YKIxO/PlA3jG/ErHTdHXRcLs+5Kcli?= =?us-ascii?q?gNaVEgbh509vlmExfmRBAHbnRc+NOWgH3MKzfBaF+xlMA9YHnu63YlI4traoRe?= =?us-ascii?q?lzJJpKhf+mtK4ZntZtKiHPQtVaPi7LIbBqPjtRFPjPpEMybh8Kqbc1Rpw1ZZ+I?= =?us-ascii?q?IE8dN0eA0yzyxxPY0ULob9ysyLqJICEO/3VI1b3KyiJMpwintvadmcDjTrTZY4?= =?us-ascii?q?vtXP7TLSopTDeaSiouEUyx41erp+IEvOaEIWcYul0UYCeSCAkJpqB1rNjQFXTe?= =?us-ascii?q?met5c50Pmv+aWjr8SCpilKo9HixLr1yDQ+IfFQnKaH/smHFcuAKnJvBQ/H/obK?= =?us-ascii?q?aVxrRLVOwMA4tNc/qZQ93CdfBYOTgoimZRBOHpZNDYrrAkwnrUXGAZFO/O71TY?= =?us-ascii?q?Q0mIEdKGwDe+f4wQspN8kSMy5t/K1nt1DK/BJarFjyK/+Y6/yiCDsKvRUXd7MB?= =?us-ascii?q?99u/4LHGTUmEoIE2oDEdxA/Ru1Tw=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2GAAgCYdhNZ/wHyM5BcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwEpgVwSjnSheIZnKIsHVwEBAQEBAQEBAgECaCiCMyKCSAIkVQMJAhcxC?= =?us-ascii?q?AMBbAWIA02BPw20KjomAop9iD2NbAWBLAGIF5REApMODYsZhlJIk3tYgQomCQI?= =?us-ascii?q?eJ4FCg0WCX1qJGQEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 10 May 2017 20:25:38 +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 v4AKP2aU016573; Wed, 10 May 2017 16:25:10 -0400 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 v4AKOx5o199440 for ; Wed, 10 May 2017 16:24:59 -0400 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 v4AKOxqQ015937 for ; Wed, 10 May 2017 16:24:59 -0400 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH v2] libsepol: Expand attributes with TYPE_FLAGS_EXPAND_ATTR_TRUE set Date: Wed, 10 May 2017 16:25:44 -0400 Message-Id: <20170510202544.2338-1-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.9.3 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: Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Commit 1089665e31a647a5f0ba2eabe8ac6232b384bed9 (Add attribute expansion options) adds an expandattribute rule to the policy.conf language which sets a type_datum flag. Currently the flag is used only when writing out CIL policy from a policy.conf. Make use of the flag when expanding policy to expand policy rules and remove all type associations for an attribute that has TYPE_FLAGS_EXPAND_ATTR_TRUE set. (The attribute will remain in the policy, but have no types associated with it.) Signed-off-by: James Carter --- v2 Just check if each attribute should be expanded in type_attr_map(). No need to destroy the types ebitmap. libsepol/src/expand.c | 76 ++++++++++++++++++++++++++------------------------- libsepol/src/link.c | 8 +++--- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index 54bf781..c55226b 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -2337,13 +2337,20 @@ static int type_attr_map(hashtab_key_t key value = type->s.value; if (type->flavor == TYPE_ATTRIB) { - if (ebitmap_cpy(&p->attr_type_map[value - 1], &type->types)) { - goto oom; - } - ebitmap_for_each_bit(&type->types, tnode, i) { - if (!ebitmap_node_get_bit(tnode, i)) - continue; - if (ebitmap_set_bit(&p->type_attr_map[i], value - 1, 1)) { + if (!(type->flags & TYPE_FLAGS_EXPAND_ATTR_TRUE)) { + if (ebitmap_cpy(&p->attr_type_map[value - 1], &type->types)) { + goto oom; + } + ebitmap_for_each_bit(&type->types, tnode, i) { + if (!ebitmap_node_get_bit(tnode, i)) + continue; + if (ebitmap_set_bit(&p->type_attr_map[i], value - 1, 1)) { + goto oom; + } + } + } else { + /* Attribute is being expanded, so remove */ + if (ebitmap_set_bit(&p->type_attr_map[value - 1], value - 1, 0)) { goto oom; } } @@ -2513,46 +2520,41 @@ int type_set_expand(type_set_t * set, ebitmap_t * t, policydb_t * p, unsigned int i; ebitmap_t types, neg_types; ebitmap_node_t *tnode; + unsigned char expand = alwaysexpand || ebitmap_length(&set->negset) || set->flags; + type_datum_t *type; int rc =-1; ebitmap_init(&types); ebitmap_init(t); - if (alwaysexpand || ebitmap_length(&set->negset) || set->flags) { - /* First go through the types and OR all the attributes to types */ - ebitmap_for_each_bit(&set->types, tnode, i) { - if (ebitmap_node_get_bit(tnode, i)) { + /* First go through the types and OR all the attributes to types */ + ebitmap_for_each_bit(&set->types, tnode, i) { + if (!ebitmap_node_get_bit(tnode, i)) + continue; - /* - * invalid policies might have more types set in the ebitmap than - * what's available in the type_val_to_struct mapping - */ - if (i >= p->p_types.nprim) - goto err_types; + /* + * invalid policies might have more types set in the ebitmap than + * what's available in the type_val_to_struct mapping + */ + if (i >= p->p_types.nprim) + goto err_types; - if (!p->type_val_to_struct[i]) { - goto err_types; - } + type = p->type_val_to_struct[i]; - if (p->type_val_to_struct[i]->flavor == - TYPE_ATTRIB) { - if (ebitmap_union - (&types, - &p->type_val_to_struct[i]-> - types)) { - goto err_types; - } - } else { - if (ebitmap_set_bit(&types, i, 1)) { - goto err_types; - } - } + if (!type) { + goto err_types; + } + + if (type->flavor == TYPE_ATTRIB && + (expand || (type->flags & TYPE_FLAGS_EXPAND_ATTR_TRUE))) { + if (ebitmap_union(&types, &type->types)) { + goto err_types; + } + } else { + if (ebitmap_set_bit(&types, i, 1)) { + goto err_types; } } - } else { - /* No expansion of attributes, just copy the set as is. */ - if (ebitmap_cpy(&types, &set->types)) - goto err_types; } /* Now do the same thing for negset */ diff --git a/libsepol/src/link.c b/libsepol/src/link.c index f211164..52770f4 100644 --- a/libsepol/src/link.c +++ b/libsepol/src/link.c @@ -467,8 +467,8 @@ static int type_copy_callback(hashtab_key_t key, hashtab_datum_t datum, state->cur_mod_name, id); return -1; } - /* permissive should pass to the base type */ - base_type->flags |= (type->flags & TYPE_FLAGS_PERMISSIVE); + + base_type->flags |= type->flags; } else { if (state->verbose) INFO(state->handle, "copying type %s", id); @@ -890,7 +890,7 @@ static int alias_copy_callback(hashtab_key_t key, hashtab_datum_t datum, return -1; } - target_type->flags |= (type->flags & TYPE_FLAGS_PERMISSIVE); + target_type->flags |= type->flags; base_type = hashtab_search(state->base->p_types.table, id); if (base_type == NULL) { @@ -938,7 +938,7 @@ static int alias_copy_callback(hashtab_key_t key, hashtab_datum_t datum, base_type->flavor = TYPE_ALIAS; base_type->primary = target_type->s.value; - base_type->flags |= (target_type->flags & TYPE_FLAGS_PERMISSIVE); + base_type->flags |= target_type->flags; } /* the aliases map points from its value to its primary so when this module