From patchwork Mon May 22 13:08:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9740267 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 89E8C601C2 for ; Mon, 22 May 2017 13:11:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B62128382 for ; Mon, 22 May 2017 13:11:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7034828419; Mon, 22 May 2017 13:11:23 +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, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (smtp.nsa.gov [8.44.101.8]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 771FC2846A for ; Mon, 22 May 2017 13:11:22 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,377,1491264000"; d="scan'208";a="7297841" IronPort-PHdr: =?us-ascii?q?9a23=3APTVRsReR6S10myBkrtUSfUW4lGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcq7bBGN2/xhgRfzUJnB7Loc0qyN4v+mAzNLv8zJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBe7oR/PusQUjodvK7g9wQbVr3VVfO?= =?us-ascii?q?hb2XlmLk+JkRbm4cew8p9j8yBOtP8k6sVNT6b0cbkmQLJBFDgpPHw768PttRnY?= =?us-ascii?q?UAuA/WAcXXkMkhpJGAfK8hf3VYrsvyTgt+p93C6aPdDqTb0xRD+v4btnRAPuhS?= =?us-ascii?q?waOTE56mXXgdFugqxdrhyquhhzz5fJbI2JMfZzeL7Wc9EHSmpbRstfVzJPDJ6y?= =?us-ascii?q?YYUMCOQOP+hYr5H/qlcToxaxGxKsCfjzxjNUnHL6wbc33/g9HQzAwQcuH8gOsH?= =?us-ascii?q?PRrNjtOqkdS+a1x7TMwzXedfNW1iny6I7Tchs8pvyDQKh/cczQyUYxEwPFjE6d?= =?us-ascii?q?qYn7MDOR0uQCqW6b7+1vVO61l2EnrARxryGpy8wxhIfJgYcVxUrF9SV/2Is1JM?= =?us-ascii?q?a3R1B9YdG5CJtQsDuaN5dsTsw/XW5opj42yqYatpGheigG0pAnyAXZZveacIaI?= =?us-ascii?q?+gruWPueLDp3nn5oeK+ziwys/UWv1OHwTNS43E5XoidBnNTArH8A2h7J5sSaS/?= =?us-ascii?q?Zw/l2t1SuR2w3X7OxPPFo6mrDBK5E7x749jp8TsUPeESDogEj2l6qWdlk8+uiv?= =?us-ascii?q?9uTnfq3qpp+COI9wjQHzKrguldalAeQ5LwgORHKX+fi81bL//U35R69Gjvsqna?= =?us-ascii?q?nCrJ/WP8Ebpq+9AwNN04Yj7QiwDyu+3dgFknQKI0hJdRKag4TzJV3DL+70Ae2i?= =?us-ascii?q?j1i0lTdk3fHGPrnvApXXKXjDla/sfa1j5E5YyQozy81f5p1NBr4aJ/LzR0nxu8?= =?us-ascii?q?DGAR8iKAG03+bmB8l91oMZQ26PBLSZP7nIvV+H4eIvPfGAZJUJtzblN/gl+/nu?= =?us-ascii?q?gGc7mV8ae6mmx4cXaHCiEfRgOEiZY33sgtEEEWgQpQo+UPLliEeZUTJJYHayRa?= =?us-ascii?q?087CkhCI26FYfDWpytgLuZ0Se5HJ1ZfHxJClOXEXfvcYWEWukMZTmcIs9ljzwF?= =?us-ascii?q?WqOuS5In1RGyqQ/20b1nLvDb+icAr5LsyMB15/HPlRE17TF0F9qS3HqTQGFyn2?= =?us-ascii?q?MIWzg20bt+oUNj1FiMz7J0g/tCFdxc//lJSBs1NYbAz+xmDND/Qh/OftCPSFag?= =?us-ascii?q?X9qpHzUxTtMqztAUfUl9AdKiggrE3yqwDL8fj6aLC4As8qLAw3jxIN5wxGva1K?= =?us-ascii?q?Y7lVkrWddANWqjhqFj7QfTHJLJn1+fl6m0aaQWxDTN+3ubzWqSoEFYVxZ9UaTD?= =?us-ascii?q?XXADeETWqcr25kbcQL+yE7QmMhBMycmaKqRUbN3piE9JRPbnONvFZGKwlH28BR?= =?us-ascii?q?GSxrODdIDqYXkS3D3BCEgYlAAe5XaHNAk5BienuG/eCThuGUvuY0Pq6+V+rmm0?= =?us-ascii?q?TlU3zwGLcU1uyaC5+hgLivyAU/kTxK4LuD89qzVoG1awx8zZC8KaqAp7faVces?= =?us-ascii?q?gw4E9d2mLDtgx9JYSgL6R4iVECbQt7pUTu1w94Co9Yi8glsGsqzBZuKaKfyF5A?= =?us-ascii?q?eTKY3ZT1OrLJMGn/5x6vZLDL1VHZytaZ4L8P6O4/q1Xhog6mClYi/29g09lP3H?= =?us-ascii?q?uW/o/KAxYKUZLtTkY38AB3p7/AYiYn4YPbyXxsMbKvvz/Hw9IpBfIpyg2uftdE?= =?us-ascii?q?Kq+EExXyE8ICDci0NOMqg0Spbg4DPO1K9647JcCmd/yb2KOwP+ZvhjGmjWNa4I?= =?us-ascii?q?xn1UKM7SV8QPbS35kZ2/GYwheHVzDkgVi7r8/3g4FEai8IHmek0yfrGItRard1?= =?us-ascii?q?fYYRBmekO9e3yclmh57xR35Y80auCE8c18+tZxWSdED93A1X1UkMunyohSq4wC?= =?us-ascii?q?JykzE1r6qQxjbCw+L8exobImRLXnVtjU/wIYioiNAXRFOobwYzlBui/kb627NW?= =?us-ascii?q?pL95L2nUT0ZIejL5L2d4Xqu2qLWCf9ZF6Ik0viVPTOS8fVeaR6bzohQA1yPjA3?= =?us-ascii?q?VRxCogdzyxpJX2gQZ6h3mALHZ2tnbZfttwxRjH7tzGWfFRxiYGRDV/iTTPGliz?= =?us-ascii?q?IsSm/dSOmJfHqe2xS2WhVphPfibx1oOAqDG35Wt0Dh2jh/qzgMHoERAm0S/n0N?= =?us-ascii?q?lnTTvIrBfgbYn30KS6K/hrcVVoBF/77cp6FZpzko8xhJEWw3canJKV8WAAkWfp?= =?us-ascii?q?PtVRwbj+Y2YVRT4X397V5xDo2EliLnKS24L1T26dzdVlZ9m7ZGMWxy084ttRCK?= =?us-ascii?q?eM7bxEmyp1rUajrQ7LZ/hygCsdw+M06HEGm+EJpBYtziKFD7AIGklYOSjsmAqS?= =?us-ascii?q?79+iq6VWan2icaOt1EVihtCtFraCohtTWHzhYJctATdw7tljMFLLyHDz8pvreM?= =?us-ascii?q?TUbd4JrBKYiQzPj+9RKJItkfoKgzFqOWfhsX0jzO40kQZi3Zeks4ibM29t5r62?= =?us-ascii?q?AgZENj3pYMMe4jLtgrhYnsaNxI2vHYtuGjMQXJvuU/2oDCgetfP9NwaBCDc8sG?= =?us-ascii?q?uUGaLDHQ+D70drt2rPHIq2N3GTOnYZ1c9tRB+BJENBmgAZRyg6noUnGQCw38zt?= =?us-ascii?q?alx55jcM5l7ithRD1OxoNx7lUmfQugikcDE0R4aDLBBO9AFN+1/VMdCC7uJ0By?= =?us-ascii?q?xY4JuhoxGWJ2yFYQRHEGEJVlaCB1/9Irmk/cPA/PSABuqiM/vOZq2DqfREWPeV?= =?us-ascii?q?wZKiyZdp/zeQNsSPJ3ViAec02kxZUXB+AcTZlC0FSzYLmCLVc86buBC89zV0rs?= =?us-ascii?q?G/9PTkRhni5Y6IC7tcP9Vg5Qy2gbuDN+6XgSZ2NyxU1pUSyn/U0LIfxkIdizly?= =?us-ascii?q?dzmxFrQNrSDNQ7jWmq9LCB4bbjh+NMVW4K0h2QlNI9TUisvv1r5/jP46FUtKVU?= =?us-ascii?q?D7lsGuf8wKLHm3NEnbC0aTKLSGOTrLztntYa+mR7xcluBUuAe0uTacE07uJS6M?= =?us-ascii?q?mCXsVxy1NuFMli6bNgREuI6hahZtFXTjTNX+Zx21Kt94kyA5waYuiXPMKW4cNi?= =?us-ascii?q?N8flhXobKM6CNUmPJ/G3ZO7nB9N+mLhz6Z7/XEKpYRqfZrBD50mPhC4HQi0LZV?= =?us-ascii?q?4iBEROZumCvOoN5uolemnfOJyjV7URpBsDJLiJiMvUV4NqXT7oNAVmrc/BIR8W?= =?us-ascii?q?WQDAwHqMB+BdHov6BQy8PPlL7oKDtY6NLb49cTC9LPKM2ZNHohMBzpGCPbDQYe?= =?us-ascii?q?UTGqNXvfh1FGkP2I+HyatIQ6qoPrmJoIULNbU0Y1FvwCAER/ANMCOIt3Xi8jkb?= =?us-ascii?q?ODis4I5H6+rB3PS8VBpZ3ITOydAe/oKDqDirlEfRQIy6viLYsPLo37x1Bial5i?= =?us-ascii?q?kYvRGkrQUtdNoit6YwApvkpC63l+QXc1207/bQOt+nATH+aunhEqkgt+ffgt9D?= =?us-ascii?q?D07lgtKVrFvjUwn1cqlNXimTCebjjxLKKqUoFXDyr7rE8xM5zhTwZydw2yklRu?= =?us-ascii?q?NC3YSLJJk7tgaWdrhRfAuZtIHP5QV7dEYBgRxP6JYfUnyk5cqiK5yk9E/ubKFZ?= =?us-ascii?q?xilA42fpG2tHJAxxhvbNgrKqzMPKBJ1ERfhrqSvi+00eA82AkeKFgX/2OWYyMI?= =?us-ascii?q?u0sINqI6JyWy+Oxs8g+CmzpZdGgKSfUqvupg9lkhNOSY0yLgz7lDJ1irN+OBNK?= =?us-ascii?q?OWpXLPldSUTVMwzU4HjEhF/aJr3sckfUqUT1ovw6WRFhgTM8rNNx1VZdJI9HfP?= =?us-ascii?q?ZSaOrfnNwZVtMoqgDO/oU+6Ou7sPgk+/BgkpBZ4M7sMPH5m3zk7XMdrnLKQEyR?= =?us-ascii?q?Ux5AXnPlOFA+pVeBiTijcIv9m/zINr3YlaPjwSHH59Pjut6bbYvA8lmuSDUcwt?= =?us-ascii?q?YngAXYsEK2g2V9egly5donRACiO40vgAxAie6D/8pSTRDD7mY9pleviUeQtmCM?= =?us-ascii?q?uq9jUn76i2lVnX/43aJ2H9L9RtpNnP6OIdp5ucBPNUS6R9v13bm4lCSHygS3TP?= =?us-ascii?q?HsKtJ5jsd4ksasT5Cm2kXVy7ijI1SdrxPdm2I6eUhgHoQJpbv5OA3DA/L8O9EC?= =?us-ascii?q?8RGwtoreEZ+K18fREDY4Y8YRPwqgsxK6m/IACe0tWyXmqgMiVWQOdFzeW7Zr1X?= =?us-ascii?q?yCwsYvW8yHQ+UpEw1/O3/lIVRJEWkhHewu6uZ4pEUSnzAHNdfRnPpSoimmhuMe?= =?us-ascii?q?Yy2vswzAnOsVYCLzCBbPZpZ3Bcv9EgGVOSJm17CnY5R1+ZiorD/g6s3rAJ8iRA?= =?us-ascii?q?ntZV0fdKv2Pksp/Zfj2sRLShqY/JvCo4cdgmv6pxPJTsIsucrpzemCDfQYLRsg?= =?us-ascii?q?2CXi+6EeZamthOLyJZRvlIhX8qOdYctYpH90UxSt80J6ZTB6k0urCqdT1kADYI?= =?us-ascii?q?wi8dVoOPwCINjf+527rakBeQd5IiPwYfvZpZg9sSSSh2bjoQpK++TYnWkXGLSn?= =?us-ascii?q?QTKgcJ8QtM/B4AlpN3fu39+4XHUplMxiVMrP1pTCvECINo90DhRWGMgVn0UvKh?= =?us-ascii?q?k/am3QhK1vLjzsEbWAJjCUha3+tWjE0oKLBrJKkQuY7KtiSIe1vjsmzw0uWrOF?= =?us-ascii?q?5fxNbIeF3/CYrKqXDzUjYA+XEOQ49A1m3fH4wIkwVlcKYruElMIIe+d0ni5Twr?= =?us-ascii?q?3ZhmEqKkWsCsw1YlqXcGSDmwE9pdFe5prFLXVCdiY5Cxp5XvI49STXNI+J2Bt1?= =?us-ascii?q?dZl11gMzSjxppGLMFC+SUBXCRVoTqHotu9VslD2c5wD58DJtd/unj9GKNYOJif?= =?us-ascii?q?uXI2oLnvxmXf+z8irFew3C+zFLOgT+JF420eHR0kJmqEpkYzD+ss82LS8lHXvV?= =?us-ascii?q?B35OpbB6aAgltvrzpnGZBOHDlJ32i/L1tvVHlGr/laKKPNfsxERPkyYQWgOwYw?= =?us-ascii?q?FP4h20yJ81p5nXL+Yyx1rQtV5TzSXxMzVSkOmbftmDseqs69NT8dUZJIYi0rbz?= =?us-ascii?q?3ZJAKDhSBXoBFfZllwVJADH9ZF/asX3YhP88rDSEasKD0FUwd4OgI+z/VfiVZJ?= =?us-ascii?q?sF+EdiDFEQqoafHPvwVrfceWqc6kN+j58BtCioz8quw48bsMR2G+kw23Xd/et5?= =?us-ascii?q?P8tsGNtkaWdKf3Kfe8bmXFTDfRlh2/mKkrD4HS/yfNNApUNYN6xWAjYZj7Bm7B?= =?us-ascii?q?JQ5GKL4DJ0pHSaB6bs1LouJdZ8B6Y6sG5LFiBgmZSRP1BIygsuRJIkzVRTvAMy?= =?us-ascii?q?WL6va/rp7L7bzBVejgYdSByG3JQ61rIpt36yT3Frnx3IBC/Ur23+ti+VlhSVja?= =?us-ascii?q?KSyBqsruJh8T7sm4akTipoEpHS/RAJpoinri2FxPd8oNTC2265kYzJRZ6GjuRu?= =?us-ascii?q?5mzkfzt/Bd+Kd+5Ykx/b9p1d++Jb3OJvRCrU9nHh+UCx1y9pU2HGhwXX1eYvMK?= =?us-ascii?q?JffKeqQZkNrupPzpGKwR9B2V4fZWad/dK0HGgMm/BSmWSQZYkwcZtT4aMgyc2u?= =?us-ascii?q?aZm69uV8mqu/X211kw41i6Mh4G1qpi5ZmF+qqPoO/YcQfRwaIDWqjwScP5tq4s?= =?us-ascii?q?tF+K5f04iL4OfXR4Ywi9H+gZUs4S2Hvgzbwwwi02CM7DGazv+OJYV30lhD3gg4?= =?us-ascii?q?5yE08QGvwKAbqB5Z5ekXsgm+zFKt0WdbhPmmSVGh6+Fb8C0nqr5DGJIGR+hxHO?= =?us-ascii?q?zhXwQX+y7FDqrC93Wy3Mz8z5nkpSTLm3Cl9YXzC1Nk9grDOPIA3oucL1uasv6k?= =?us-ascii?q?E2PHbktNWQm2S/I75XA9fwJNqHISkzvl4XioM+RsC304ABBdW9OMsR8G15bvbG?= =?us-ascii?q?5GOrji5Bo6NDh4XA58GY4ejYEme7gK2bsbqNwipUyn8ivVEw8tqgLO3B58WWQ/?= =?us-ascii?q?S00GYcVyF/uw/aUh60rLzbqkoYOU2N0EfFgowFJMpZ3WUi1kH7+OcjXM8z9B9A?= =?us-ascii?q?GYraYPMCvz/zMiPuwVmDe9I3SjWe0zxPE1LwFll4HrQ82G3us8/SkHfQ+kcnRo?= =?us-ascii?q?9ueEz7ix13CJ84KUE26FQNxCoMDxQNYwiBDL60HUTlMZcEVU8bZBSdwbe1Z7w6?= =?us-ascii?q?3UJ2wrKg/uPTa/JzB7YVPPZHkgGOhERbGo4RsaAGRLJ8YFpd+a7MqwjsFYfoQv?= =?us-ascii?q?/mlWAqOv2tWMBa9sIZuGU+7QajXRag7o1D77kDgpCSaqFEeYTMvNx770p//j4A?= =?us-ascii?q?bDJNjwJwjxynSuARv/vj7cLFsJWy5eahSr0tS/8R9xcqG2R0l4Hwj0w7odHLy+?= =?us-ascii?q?dcTZXYiYb+8ABIOHOKvZjV0hliJuoUKoKrerlg+28BJycAO3IEJcCWZOUk4y9x?= =?us-ascii?q?LDXT4ERPAsINZNwCJsXChRtZilb3V7FP6MXUBkWUC4Bpd8An92D30iw68YMgUu?= =?us-ascii?q?b87z+7PYvQ71BWP/JNlipsltPCpPQNwfXIFSgX5WKUZARywiyf1ZaCEevw/f+L?= =?us-ascii?q?yNHOTVwKBCk2U51SJDCa4wyoWvK1lIn1UgOT8sLzmIgxdF6MSXyxkqUFtbxMEe?= =?us-ascii?q?1ZhiXgwDdeEoH1h/SIs9uj82ZXrkdIEJpv4h3FFqRfOY97ORfimsmoWEd8HC3/?= =?us-ascii?q?d9/QdhY0v+qW3OgM6f1kN0TifY8bPg4Ey7Xi5HpJVAthVrr2sUyfXe0Pf9ZpVf?= =?us-ascii?q?LErn9U6YJ8MaAPJ0KSpIb3rjtSrlA5HhMpYqcqrjNGbknOgBFVW6Hstb4PkAQc?= =?us-ascii?q?S8B2uVNMGW+rPGI+5ibHWrpVjKaLFfwV6S+fTqoQXEV0Kil+WQ+62I1ye7u1mv?= =?us-ascii?q?BKqmxGkT17oPg21DxmQxywuTbyqKIJ2DIg/qy4tToatHxBUOqeiSfJBk9ZwPQM?= =?us-ascii?q?k6gcF27o6Uagb3kbcIvy/L5nKNzm9Ykg/3s/ZhEjcDcdXei6CiHwiKSIApeUsN?= =?us-ascii?q?9HgR6At8rPYaW0LSgIObQ30QjjSGRl0gjCgBZo93MGQjq8498/P4WxINsryCWu?= =?us-ascii?q?F2jaclYM/6xIvdD+tV4OVuQ2b01uzH9k0sidSS0HXNbPFHotjgg4dWVEd4pO6R?= =?us-ascii?q?0dF6kohDaEpLVJ/gEQYDfJD4uk+4jQncHT2Xk+TNdn3XzWpqybhpww1H1qhtJ0?= =?us-ascii?q?4jSIuHsMa+zSS9VsDWTr1odD1ez+YO2gsuEZSIR8zrSsS/sCMtS+9mu335VqQV?= =?us-ascii?q?WpxrMEH1q2KOUD3KvUUz+5SW2EXuSGa2qMkCg3Mk784RmlNVM2Z91Mr0AjLuvO?= =?us-ascii?q?nJhcmBP9UblsXCWfuUfbzHA/MeMdbw82t4OnewsETeEPY+icIfMjwOY5CFsKbn?= =?us-ascii?q?/GATF6C+movl6xhIJ7IWlv4V3mYeTx9QDrKNmSGhkEEI7CqZ5x/f26Rn6fNnJ7?= =?us-ascii?q?yR1yPVV09/3BGFgrse9caZmRl8DKh9tnye4Fa+ttMSolt94Pm4Jj7JKZ0NuLcR?= =?us-ascii?q?7NzZb9O9XVruKeA/LB00QgYntaXaYBYQPp+4U6OcY0W7jSHbtavhQcArM3QJ47?= =?us-ascii?q?OGfy86F0Kh18cgjLaLSynMbquvqBZoFIqH/O8lIwMCDctgUYxfOqSwx7c4unh2?= =?us-ascii?q?72IJA3WjJBs8NtBQV7E4dVHMMAtQWnCYaOmK6nk9+x5196u+gSvKr+FP/K0NW5?= =?us-ascii?q?351vUJVB5E2LPTPRBKx1jUR/iuS9nO3M0p7rCcPtYdkETvR0QnbZar/aGYWyMj?= =?us-ascii?q?yPOtrme05H77GTzql0UhCQZCDlRaqJqjeoNPJ+4UU00oZ4ZvbczCQx77HH39v/?= =?us-ascii?q?f2ZbpiO9onOSLJtf6EbFBffCXxJVVfWF7HxlErMJYofu8ucBL8AiysCG4wZv9D?= =?us-ascii?q?RCzNeFI6+5o0/I20J7c4/bLUTw1yY9WIkKOwi/MVA3jG/YsHvdB3NcItKjKcl3?= =?us-ascii?q?j9afFgbt6FVpmWExem5BHXLlRcyPNmgf2sK+YhCK9Q1MA9gMg+63eVA3tresRu?= =?us-ascii?q?lwIJpIguaqu6sdkdZvNS7PQNNVPzzfLLNsOTpRFOrPrkAyYhEYq7g1Rps1ZZ+W?= =?us-ascii?q?LUMCKkiP1SPyzQrE0U3zbNGsyqeJICAI/XVDzrLF1yVMpgajtfaemM3jX6jTbI?= =?us-ascii?q?vqU/7KLColSjaaSCwwEUmz+lekvOELseGFIWcZvlAUYiWSCBMcpqBvsdjcFGnT?= =?us-ascii?q?lvN/fJcSnvCVRzjwSDFklKo1HitLulqDTOEZFQnXcXDhhHFRuBKmJvBW5nLlbq?= =?us-ascii?q?CYyrBTW+MIHotGaueZTMfAefBCOzcokS0UOOS5f93btbY5yFPITXACHqnO7lKe?= =?us-ascii?q?SVCZQv2GyzLsR4UVsJA+ujA09dLIgi93D6PIMq6Epz6g9463kCeVtO7FW2kzfU?= =?us-ascii?q?M1muMCAWiGwBlGMm0EDc8auF2+CpKHMl1B0HMvlPJGxw4HeAM1VGZnlHJRgqWT?= =?us-ascii?q?AMpcHHIdiiuMXecJYVZsRGc89EmL7wnwSdkNvcTaQWhOsLALTNxOf7ET9IDLNf?= =?us-ascii?q?5Ik74S1zV8rXl/6n2Q?= X-IPAS-Result: =?us-ascii?q?A2HjAQC+4iJZ/wHyM5BcGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgwEpgW6OepB9cpcMKIwWVwEBAQEBAQEBAgECaCiCMySCQgYBA?= =?us-ascii?q?iRVAwkBARcIKQgDAVMZBYhPgVAEsWY6JgKLGYg9gmeLCQWJP4ZpgQFYjBWKUoh?= =?us-ascii?q?PggOJGAyGR5RIWIEKTyIVhHlEHIFmc4kqAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 22 May 2017 13:11:10 +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 v4MDB8wr013340; Mon, 22 May 2017 09:11:08 -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 v4MD8xM4141683 for ; Mon, 22 May 2017 09:08:59 -0400 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 v4MD8oLe011891 for ; Mon, 22 May 2017 09:08:58 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CnAQAX4iJZf4GlL8FcGwEBAQMBAQEJAQEBgyyCF456kH1ylxOGJAKGaAECAQEBAQECEwEBIV2FGQMDJ1IQGAgxVxmIVIFUsWI6iw8BAQgoiD2CZ4sJBYk/hmmBAViMFYpSiE+CA4kkhkeUSFaBC08iFYU9HIFmPTaJKgEBAQ X-IPAS-Result: A1CnAQAX4iJZf4GlL8FcGwEBAQMBAQEJAQEBgyyCF456kH1ylxOGJAKGaAECAQEBAQECEwEBIV2FGQMDJ1IQGAgxVxmIVIFUsWI6iw8BAQgoiD2CZ4sJBYk/hmmBAViMFYpSiE+CA4kkhkeUSFaBC08iFYU9HIFmPTaJKgEBAQ X-IronPort-AV: E=Sophos;i="5.38,377,1491278400"; d="scan'208";a="6061036" 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; 22 May 2017 09:08:58 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3ASan5XxXW/xi+rBl3fWJpix1+Y1XV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYYxyDt8tkgFKBZ4jH8fUM07OQ6PG/HzZfqsvQ+Fk5M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFRrwLxd6?= =?us-ascii?q?KfroEYDOkcu3y/qy+5rOaAlUmTaxe71/IRG0oAnLqMUbg4RuJ6Y1xxDUvnZGZu?= =?us-ascii?q?NayH9yK1mOhRj8/MCw/JBi8yRUpf0s8tNLXLv5caolU7FWFSwqPG8p6sLlsxnD?= =?us-ascii?q?VhaP6WAHUmoKiBpIAhPK4w/8U5zsryb1rOt92C2dPc3rUbA5XCmp4ql3RBP0ji?= =?us-ascii?q?oMKiU0+3/LhMNukK1boQqhpx1hzI7SfIGVL+d1cqfEcd8HWWZNQsNdWipcCY2+?= =?us-ascii?q?coQPFfIMM+ZGoYfgqVUArhywCguiBO701jNEmmX70bEg3ug9DQ3L2hErEdIUsH?= =?us-ascii?q?TTqdX4LKkcXvqzzKLVyTvDculW2Tjj54jOaRAqvPaBUq9qfsrXyEkgCQfFjleL?= =?us-ascii?q?pIzgITyV0uANvHKd7+pnWuOjkXIoqwZ0ojW2wMonl4fHhoUQyl/e9CV5xp44Jd?= =?us-ascii?q?yjR0FlZ96rDYNQtyaAN4tqWM8tXn9nuDgixr0dpZG0Zi4KxI4jxxHEbfGMbouG?= =?us-ascii?q?4gr7WeqMJTp1imhpdb29ihqo7ESty+3xWtOp3FpUqidIlMTHuGoX2BzJ8MeHT+?= =?us-ascii?q?Nw/ke/1jaL0ADe8uRELl4wlarfMZEhxLkwl5UJvUvfGS/6gkT2jKuOekUl/Oin?= =?us-ascii?q?9fjnb637qpKYOYJ4kA7zP6Y0lsCiAOk1MhICU3WF9em4zLHj+Ff2QLROjv04iK?= =?us-ascii?q?nZt5XaKNwGqaGjBQ9V05gs6xK9Dzq91dQXg30HLFZfdxKBiIjoNEvCL+z/Dfe6?= =?us-ascii?q?m1isiitkx+jaPr39BZXANmPDn6nlfbZ87U5c1QUywMtD55NUFr4BIPXzVlX3tN?= =?us-ascii?q?zDFBA1KQO0w+H5CIY16oRLQm+LA6mEIIvOoFSI4aQpOODKa4gL6xjnLP1wy/fo?= =?us-ascii?q?xV0kg1AQe7LhiZcebnG1GvZOJkidZXPqhcdHGmAP6FltBNf2gUGPBGYAL025WL?= =?us-ascii?q?gxs3RiUNqr?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0FHAQCO4SJZf4GlL8FcGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwGCF456kH1ylxOGJAKGaAEBAQEBAQEBAgECEAEBIV2?= =?us-ascii?q?CMyQBgkEDAydSEBgIMVcZiFSBVLFgOosPAQEIKIg9gmeLCQWJP4ZpgQFYjBWKU?= =?us-ascii?q?ohPggOJJIZHlEhWgQxPIhWFPRyBZj02iSoBAQE?= X-IPAS-Result: =?us-ascii?q?A0FHAQCO4SJZf4GlL8FcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwGCF456kH1ylxOGJAKGaAEBAQEBAQEBAgECEAEBIV2CMyQBgkEDAydSE?= =?us-ascii?q?BgIMVcZiFSBVLFgOosPAQEIKIg9gmeLCQWJP4ZpgQFYjBWKUohPggOJJIZHlEh?= =?us-ascii?q?WgQxPIhWFPRyBZj02iSoBAQE?= X-IronPort-AV: E=Sophos;i="5.38,377,1491264000"; d="scan'208";a="5980543" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mail-il-dmz.mellanox.com (HELO mellanox.co.il) ([193.47.165.129]) by emsm-gh1-uea11.nsa.gov with ESMTP; 22 May 2017 13:08:57 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 22 May 2017 16:08:49 +0300 Received: from x-vnc01.mtx.labs.mlnx. (x-vnc01.mtx.labs.mlnx [10.12.150.16]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v4MD8f0q017562; Mon, 22 May 2017 16:08:48 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH v3 4/9] checkpolicy: Add support for ibendportcon labels Date: Mon, 22 May 2017 16:08:26 +0300 Message-Id: <1495458511-46724-5-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1495458511-46724-1-git-send-email-danielj@mellanox.com> References: <1495458511-46724-1-git-send-email-danielj@mellanox.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: Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP From: Daniel Jurgens Add checkpolicy support for scanning and parsing ibendportcon labels. Also create a new ocontext for IB end ports. Signed-off-by: Daniel Jurgens --- v1: Stephen Smalley: - Check IB device name length when parsing policy. - Use strcmp vs strncmp to compare device names. v2: Stephen Smalley: - Bound check port number when parsing ibendports. --- checkpolicy/policy_define.c | 80 ++++++++++++++++++++++++++++++ checkpolicy/policy_define.h | 1 + checkpolicy/policy_parse.y | 14 +++++- checkpolicy/policy_scan.l | 2 + libsepol/include/sepol/policydb/policydb.h | 9 +++- 5 files changed, 103 insertions(+), 3 deletions(-) diff --git a/checkpolicy/policy_define.c b/checkpolicy/policy_define.c index e73ec8f7..f12ebdbd 100644 --- a/checkpolicy/policy_define.c +++ b/checkpolicy/policy_define.c @@ -5164,6 +5164,86 @@ out: return rc; } +int define_ibendport_context(unsigned int port) +{ + ocontext_t *newc, *c, *l, *head; + char *id; + int rc = 0; + + if (policydbp->target_platform != SEPOL_TARGET_SELINUX) { + yyerror("ibendportcon not supported for target"); + return -1; + } + + if (pass == 1) { + id = (char *)queue_remove(id_queue); + free(id); + parse_security_context(NULL); + return 0; + } + + if (port > 0xff || port == 0) { + yyerror("Invalid ibendport port number, should be 0 < port < 256"); + return -1; + } + + newc = malloc(sizeof(*newc)); + if (!newc) { + yyerror("out of memory"); + return -1; + } + memset(newc, 0, sizeof(*newc)); + + newc->u.ibendport.dev_name = queue_remove(id_queue); + if (!newc->u.ibendport.dev_name) { + yyerror("failed to read infiniband device name."); + rc = -1; + goto out; + } + + if (strlen(newc->u.ibendport.dev_name) > IB_DEVICE_NAME_MAX - 1) { + yyerror("infiniband device name exceeds max length of 63."); + rc = -1; + goto out; + } + + newc->u.ibendport.port = port; + + if (parse_security_context(&newc->context[0])) { + free(newc); + return -1; + } + + /* Preserve the matching order specified in the configuration. */ + head = policydbp->ocontexts[OCON_IBENDPORT]; + for (l = NULL, c = head; c; l = c, c = c->next) { + unsigned int port2; + + port2 = c->u.ibendport.port; + + if (port == port2 && + !strcmp(c->u.ibendport.dev_name, + newc->u.ibendport.dev_name)) { + yyerror2("duplicate ibendportcon entry for %s port %u", + newc->u.ibendport.dev_name, port); + rc = -1; + goto out; + } + } + + if (l) + l->next = newc; + else + policydbp->ocontexts[OCON_IBENDPORT] = newc; + + return 0; + +out: + free(newc->u.ibendport.dev_name); + free(newc); + return rc; +} + int define_netif_context(void) { ocontext_t *newc, *c, *head; diff --git a/checkpolicy/policy_define.h b/checkpolicy/policy_define.h index 75e3683b..50a7ba78 100644 --- a/checkpolicy/policy_define.h +++ b/checkpolicy/policy_define.h @@ -44,6 +44,7 @@ int define_netif_context(void); int define_permissive(void); int define_polcap(void); int define_ibpkey_context(unsigned int low, unsigned int high); +int define_ibendport_context(unsigned int port); int define_port_context(unsigned int low, unsigned int high); int define_pirq_context(unsigned int pirq); int define_iomem_context(uint64_t low, uint64_t high); diff --git a/checkpolicy/policy_parse.y b/checkpolicy/policy_parse.y index 35b433bd..6b406c85 100644 --- a/checkpolicy/policy_parse.y +++ b/checkpolicy/policy_parse.y @@ -137,6 +137,7 @@ typedef int (* require_func_t)(int pass); %token SAMEUSER %token FSCON PORTCON NETIFCON NODECON %token IBPKEYCON +%token IBENDPORTCON %token PIRQCON IOMEMCON IOPORTCON PCIDEVICECON DEVICETREECON %token FSUSEXATTR FSUSETASK FSUSETRANS %token GENFSCON @@ -172,7 +173,7 @@ base_policy : { if (define_policy(pass, 0) == -1) return -1; } opt_default_rules opt_mls te_rbac users opt_constraints { if (pass == 1) { if (policydb_index_bools(policydbp)) return -1;} else if (pass == 2) { if (policydb_index_others(NULL, policydbp, 0)) return -1;}} - initial_sid_contexts opt_fs_contexts opt_fs_uses opt_genfs_contexts net_contexts opt_dev_contexts opt_ibpkey_contexts + initial_sid_contexts opt_fs_contexts opt_fs_uses opt_genfs_contexts net_contexts opt_dev_contexts opt_ibpkey_contexts opt_ibendport_contexts ; classes : class_def | classes class_def @@ -702,7 +703,7 @@ fs_contexts : fs_context_def fs_context_def : FSCON number number security_context_def security_context_def {if (define_fs_context($2,$3)) return -1;} ; -net_contexts : opt_port_contexts opt_netif_contexts opt_node_contexts +net_contexts : opt_port_contexts opt_netif_contexts opt_node_contexts ; opt_port_contexts : port_contexts | @@ -726,6 +727,15 @@ ibpkey_context_def : IBPKEYCON ipv6_addr number security_context_def | IBPKEYCON ipv6_addr number '-' number security_context_def {if (define_ibpkey_context($3,$5)) return -1;} ; +opt_ibendport_contexts : ibendport_contexts + | + ; +ibendport_contexts : ibendport_context_def + | ibendport_contexts ibendport_context_def + ; +ibendport_context_def : IBENDPORTCON identifier number security_context_def + {if (define_ibendport_context($3)) return -1;} + ; opt_netif_contexts : netif_contexts | ; diff --git a/checkpolicy/policy_scan.l b/checkpolicy/policy_scan.l index f742939a..e6c48984 100644 --- a/checkpolicy/policy_scan.l +++ b/checkpolicy/policy_scan.l @@ -186,6 +186,8 @@ fscon | FSCON { return(FSCON);} ibpkeycon | IBPKEYCON { return(IBPKEYCON);} +ibendportcon | +IBENDPORTCON { return(IBENDPORTCON);} portcon | PORTCON { return(PORTCON);} netifcon | diff --git a/libsepol/include/sepol/policydb/policydb.h b/libsepol/include/sepol/policydb/policydb.h index d06d2153..1b2d7820 100644 --- a/libsepol/include/sepol/policydb/policydb.h +++ b/libsepol/include/sepol/policydb/policydb.h @@ -73,6 +73,8 @@ extern "C" { #endif +#define IB_DEVICE_NAME_MAX 64 + /* * A datum type is defined for each kind of symbol * in the configuration data: individual permissions, @@ -364,6 +366,10 @@ typedef struct ocontext { uint16_t low_pkey; uint16_t high_pkey; } ibpkey; + struct { + char *dev_name; + uint8_t port; + } ibendport; } u; union { uint32_t sclass; /* security class for genfs */ @@ -400,6 +406,7 @@ typedef struct genfs { #define OCON_FSUSE 5 /* fs_use */ #define OCON_NODE6 6 /* IPv6 nodes */ #define OCON_IBPKEY 7 /* Infiniband PKEY */ +#define OCON_IBENDPORT 8 /* Infiniband End Port */ /* object context array indices for Xen */ #define OCON_XEN_ISID 0 /* initial SIDs */ @@ -410,7 +417,7 @@ typedef struct genfs { #define OCON_XEN_DEVICETREE 5 /* device tree node */ /* OCON_NUM needs to be the largest index in any platform's ocontext array */ -#define OCON_NUM 8 +#define OCON_NUM 9 /* section: module information */