From patchwork Thu May 18 22:25:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9735347 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 0443F600CC for ; Thu, 18 May 2017 22:33:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D8826288F4 for ; Thu, 18 May 2017 22:33:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CA785288FC; Thu, 18 May 2017 22:33:00 +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, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from emsm-gh1-uea11.nsa.gov (emsm-gh1-uea11.nsa.gov [8.44.101.9]) (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 8CF4D288F4 for ; Thu, 18 May 2017 22:32:59 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,360,1491264000"; d="scan'208";a="5923904" IronPort-PHdr: =?us-ascii?q?9a23=3A7GBKjBGqYo5h0aFckFee5p1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ79psS/bnLW6fgltlLVR4KTs6sC0LuJ9fq4EjVaqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdwIRmsswndqsYajZZ8Jq0s1hbHv3xEdv?= =?us-ascii?q?hMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTD?= =?us-ascii?q?QhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlS?= =?us-ascii?q?kINyQ98GrKlMJ+iqxVqw+lqxBm3oLYfISZOfxjda3fYNwaX3JMUMZPWSJcDI2y?= =?us-ascii?q?bIwBAOgPPeZArYTxulUDogWlBQS3GO/j1iVFimPs0KEmz+gsFxzN0gw6H9IJtX?= =?us-ascii?q?TZtNv7O70UUeuoyKfI0C/Db/xI1jf784jDbxcsruyWUrJ2cMre100vFwHeg1WV?= =?us-ascii?q?t4PlOzeV2f4Ls2ic4OtsT/6gi2kiqwxopDWk28kiio7Mho0Py1DE8z10wIcuKt?= =?us-ascii?q?KmTk50fMakEJxKtyGGLYd5X90tQ39wtCYh1rIJo5i7cDIOyJs8wRPUdv+Jc5CQ?= =?us-ascii?q?7x7+W+ucLi10iXJ4dL6lmRq//lasxvfhWsWszVpHqiRInsPDu30PzRDf98mKR/?= =?us-ascii?q?tn8ku8xzqC0wbe4fxeL08uj6rUMZshz6Y1lpoUrEvMADf7mF7zjK+KbkUk/fWo?= =?us-ascii?q?6/j/brXmuJCcM4h0hxniMqs0gMy/APk4MhMUU2iH+eWzyL3j/UrjTLVMkvI2ib?= =?us-ascii?q?XWvIrfJcQaoq61Gw5V0oA95BajFzqqzdsVkHYdIF9FZR6LlZblNl7QLPziEPuz?= =?us-ascii?q?m1Gsny1qx/DCML3hGJLNLn3bnbf6Y7l9709cyAwuzdFQ/p5bEbYBIO/1WkDtqt?= =?us-ascii?q?PYFQQ0MxC0wun7CNV90ZkSWWSUAqCDKq/SvliI5vw3L+mWeIAVoCr9K+Qi5/P2?= =?us-ascii?q?j385nlkdcrO13ZsXcn+4GO9rI0eeYXrqh9cOC3wKvhYgQ+zwk12OSzlTZ2y9X6?= =?us-ascii?q?gk/DE0FJqmDZvfRoCqmLGB3iW7EYdKaWBFEVCMFnHod4SaW/oXZiKSJtJhkzMf?= =?us-ascii?q?Wri8TY8hyQyuuBX9y7p9Iere4jcYuo771Nhp++3Tkgk/9SRqAMuGzW6NSWB0nn?= =?us-ascii?q?8PRzIt3aBwv1JyxUmZ3ah/mfxYGsRZ5+lVXQciKZ7c0+t6BsjvVQLGeNeJTkup?= =?us-ascii?q?TcuiATEwVd8+2cEBY1x6G9m4iRDDxSWqCacPl7OXHJw07r7c33/pKslg13bJzr?= =?us-ascii?q?MhgkI6TctIMG2pmrRw9xPPB4LTlUWWibqqf7wG3CHR7GeD0XaOvEZAXQ5xV6XF?= =?us-ascii?q?QW4QZk/IotT8+EzCU6WuCLQ8PwtG0c6NNK1KatjzglVHQPfsI9PeYm2rl2e3Hx?= =?us-ascii?q?aIyauGbJD2dGUFwCXdFE8EnhgT/HeHMgg+ADyso2faDDB3FFLvZVng8e9kp3Oh?= =?us-ascii?q?TU80zh+KYFN727qz5BEVmeSWS+kP0bIcpCchtzJ0EU6j0NLOEdWAvQthfL5HbN?= =?us-ascii?q?Ml+lhHz2PZtxdlPpykNa9tmkARfx5wv0P02BV9Ep9AntQyrHM20ApyLrqV0V1A?= =?us-ascii?q?dzOc2JD/JKfXJ3L8/B+xdqHW3Uve38yO+qcV7/Q4qUvssx21FkY49HVnydZV2W?= =?us-ascii?q?OG5prWFAoSTY7xUkEv+hh0vbHVeC896J/V1X13KqS0tyfC29MwCOs+xBegZM1T?= =?us-ascii?q?MKSeFA/9C8caHdShKPQ2m1i1aRIJJONS+7Q3P8OhavuLw62rM/xjnDKhkGRL+o?= =?us-ascii?q?d90liD9yBkUO7Hw44Fw+2E3guATzrzlkqustr2mY9afzEfBXCwxjThBIJLYa1y?= =?us-ascii?q?Z4kLA3+0I8Kr3tV+m4LtW3lA+VG/HVwG3NGmeQGOb1392g1dzl8XrmCmmSSmyT?= =?us-ascii?q?x0jzApobCF0CzI3eviaAINOnRXS2l6kVfsPY+0gsgBXEimdQgpkwCl5VrhyqhA?= =?us-ascii?q?oqR/KGfSQUJScCjwNW1iVLW/tqaaac5V9JwoqTlXUPi7YV2CRL/yuR8a0z/9EG?= =?us-ascii?q?tE3zA2bC+qtYvjnxNhlWKdKWx/rH3DecF/3R3f/sDTReZN3joaQyl1kSXXCUWh?= =?us-ascii?q?MNmo59qUk4zOvfy5V2KkSpJcazLrzZ+auCu9+2JqHQW1n+qvld3/DQg6zSj72s?= =?us-ascii?q?F0VSXJsBn8fo7r176gPe17fkloA1n868VhF4F6k4swgosf2WIdhpmP+noHi2jz?= =?us-ascii?q?O81B2a3idHoNWSILw9nN7Qjh2U1jNW6Jy5viVnqDxsthZt+6Yn4Z2y8m9MBKEK?= =?us-ascii?q?aU7LpFnSRpuVq0twTRbuZhnj0F0/sh9GYag/0VuAoq1iidGLcSHU1cPSPyjRSH?= =?us-ascii?q?89e+ratMaWa0bLi/yFF+kcqmDLGYrQFWQGz5dYs6HS9s8sV/N0rB0GXp5YH5fN?= =?us-ascii?q?ncd8gcugePnBfHi+hVNJUxlvwRiCpiJW79u3olxPIhgRxow566oJCNK39x86Kh?= =?us-ascii?q?Hh5YKjr1atsQ+j7zi6Zehd2b34OxEZVnATULWoXnTe6yHDIVr/TnOB6EECcgpX?= =?us-ascii?q?eDBbrfAQif5V9+r33VDpCrM2+YJGEDwtVkWBmSOlZfjRsJXDUhgJE5DBuqyNb6?= =?us-ascii?q?cEd++zAR/EL3pQVCyuJvLRn/XXnQqB2uajgqVJiVNABW4R1a50fJLcye6fp+Hz?= =?us-ascii?q?9e/pK8twGNNGqbaBlIDW0TXEyLGUzjNKG05dbc6+iYGva+L/zWbLWWs+NeSvOI?= =?us-ascii?q?yImz3Ytn4zaNNtyDPnd4AP09wEZDWmp5G8vBkTUVVyMXjz7Nb9KcpBqk+S12rs?= =?us-ascii?q?S//+rwVQLq4ouPBbVSPstz+xCqgaeDMOuQizhjJTZeyJwM2WfCyKID014KlyFu?= =?us-ascii?q?az6tHKwOtSHXSqLQhqhXDxsAZiN9KsRH8qU83hNXNs7DkNP10bx4geApBFdZT1?= =?us-ascii?q?DhndupZcMSKWGnKFzHHFqLNKiBJTDT2cH4fL6zRKZfjOVRuBy8ozCbHFH/Pj6b?= =?us-ascii?q?jTnmSwivMf1QjCGcJBFeopuxcxh3BWjmVt3mbhq7Md9sgDIs3bI0g2nGNWkGMT?= =?us-ascii?q?hza0lNtKGf7TtEgvVjHGxM9nRlLfOalCmE9OnXMJAWsedsAiRvjO9V+mg1y75P?= =?us-ascii?q?4CFDXvx1lzPYrsRyrFG+jumP1j1nXQJIqjZRno2LpV1iNL7X9plBQ3bE5w4N7W?= =?us-ascii?q?uRCxQMvdRlDMHgu6FKxdjLjq7zLy1C893M98sGG8fUMN6HMGYmMRfxAzHbFwwJ?= =?us-ascii?q?TTqqNWHEm0xdi+ue9maLoZcmsJTsg4QBSrtaVFwzC/MbBV9oE8ACIZdtQzMkiq?= =?us-ascii?q?SXjcAS6nqitxnRQ8NasorAVvKIDvXlMCyZgqVcZxsU3bP4KpweNov620xmbll1?= =?us-ascii?q?gp/KFlHKUt9TuC1haRU4oEJX8HhxVmczwV7qahux4H8PEv65hgU5igpxYeQq8j?= =?us-ascii?q?fh+Eo4KUTRqysxikYxn8/pgTeLcD7+NK2wR51ZCzLot0gtNZP2Wxx6bQKokkx6?= =?us-ascii?q?KjjJXLVRj6N+emBtjQ/To5pPGfpHQq1Dbx4c3/aXZ+8n0V5EsCWo2VdH5ffZCZ?= =?us-ascii?q?tljAYqbZmsr3da1wJ5a940JLLfJKxSwVhKgaKBoCyo2/stzw8ZIkYC7HmdeDUU?= =?us-ascii?q?uEASMLkpOTao9PR26QOegztDZHQMV/0yr/Js6EwyIeCAwjnj075EMUCxK/aQL6?= =?us-ascii?q?WCu2jDlM6EWFUw2V0Ul0Nd57h5zd8jc1aIV0Ao1LaRDQoGNdHcJg5Pdcpd6HjT?= =?us-ascii?q?cD2VvuXM25J6IoK9Fu7wTe+UqqkVglioHAA3EIQQ9s4BBIWj0FnELcf7K74I0Q?= =?us-ascii?q?gi6x71JFWEEftJYwmGny0do8Gly59205JdKS8BDmVgKyW356rXpw8wjPqFQtg2?= =?us-ascii?q?fm8QXpEYOXIuRM26hylZsmxdAzmszO0W0geC7yXmqSTOFzT8dMBsZPSJZRN2Et?= =?us-ascii?q?664zE/87WwiVHN6JXSPn36NdNhut7P7uMWvZCHBO1ITbNlqUfTh5FYR2C2U27I?= =?us-ascii?q?CdO1I5/wa5MyYtzyC3e6VUeyiz0zT8fsJtqtKbKIgQ7wT4ZOrIabxCwjNdO6Fj?= =?us-ascii?q?wGABd/ueUD5KN6ZQ0ebJs2egLntwM7N6OjOgiYycmuT3yrKTRIU/lV1f+6aKBP?= =?us-ascii?q?zyowcu+6z2MtQYwmwOmy9k4NQo0KggzFyPa9eYZeSynzG31aewXJvyY5kXZuNv?= =?us-ascii?q?oqyOcl3BzIqUUcMyyMdOFxa2xEpdE9CkmUIXVqCmo1XFCcjY3b4gGwxbwS+TVS?= =?us-ascii?q?n8pM2+1frHf+poPfYC6rWKGztZXVsi8gbd86o61xMY3uOdaJtJLenzPFV5bcqA?= =?us-ascii?q?uFXzCmF/BCgNhfPDpYQOVUmWEiIcEGtpBB5lA3VsciPLFPCa4sp76saTp4DS4d?= =?us-ascii?q?0y4ZV4Wc3DMcmOewwb3amQmMcJ46KhwLrI1CgscBUy5xei4RvqujV4TKmGCaUm?= =?us-ascii?q?cLJQcS7QJL5AIGjIB9Zfvq4IvSQ59K0jJWre90XjHNFpZ261vxUnuWjkTgSPW9?= =?us-ascii?q?j+yp2hpfw+ny3dkdQxNwE1VSx/hImUsyM7F4MbMQv47Qvj+Pb0P6s3rnyPG6K1?= =?us-ascii?q?lJ1c3Ua1r4AZLftWr6Uy0T5X0URYhLyHHEDZocihd3Zrw3qVtLO42pZkH+5zk4?= =?us-ascii?q?yItzBLm4Sdqnx1A7onYaXy2qCcZOC/l6sFLLXz1oe4ykqJf/NJpOWWJf5Jqdq1?= =?us-ascii?q?NdkEVsLSG504ZcJN9R7T4MRjRPpi+dvNSqQs1ZxcB2F4MMIst4u3rlAqNLIoKR?= =?us-ascii?q?o3ottbH01n/Z4SozsEmkyzW3Gq+4Se1Z/2kfGgUmJ2SetkcvAPE28mfX6FzNtE?= =?us-ascii?q?57//tDDLiVkUpxuCp9HoxJBjtR23GpNUh8THlHs+VfKaTaac9cTuIzZRCxJRMx?= =?us-ascii?q?C+Qq30uT/UF7hX35eTB9thNG+yDBWAk5TTEVgrDpmTIEsMGmNzgaS5ZGbTg6ai?= =?us-ascii?q?fFLAWbmTtJsxlDcUFqXIsZAs1E+7Ed0otY5M3CSVyjKSsdRhxtKho40eZDlU5E?= =?us-ascii?q?qEiXYzrdDReudfrVsR16ZsaRrM+oLPTl5whLkIXnv/4k968bXX2phRWtQczCr4?= =?us-ascii?q?/7rtCKqkyOdKLjPu2gfXPBSSPDgQq2hbg6E5nA5zLTPxZDK5lm1XokZoDsCW7R?= =?us-ascii?q?MhRcPa0bI1dUWLtnZtpYuuBaf9FreKIX9q93HB6HQQnvGIO3pvlcMlnTXSjeLz?= =?us-ascii?q?mG8uGno4LT6qLSRPP9acOS3HbIXbh3Potk5jbmAbvq15FR+lbu0Pd36kx6UUTG?= =?us-ascii?q?MzyGrNn5PQwL6tWtelfgs5E0Ez7bG4t/kH3oxk5cbcUXWDGq/I4eyJxH9Hb6Uf?= =?us-ascii?q?h43VTrsO1O67lk7pE646p3xsipJafdM+havFRjAhiTGAVl6IshD3R4R29MfOAd?= =?us-ascii?q?MvHRcroFjcr2seD4C7QX6AGJ++xecdbHP1rBmtWlBT6BVRxJhxwBqTkHLguGy/?= =?us-ascii?q?GKhal0Sdq/pefj3kIh+V++LgQJzLp1/4eL5rKIpPPLbxvW1bUERrLqSd3tobsx?= =?us-ascii?q?oE6S+PkklKIUemNvfQ2nEe8dVsoDyWf816wqyjgsE8zbFbL65PFDT245ni7nm5?= =?us-ascii?q?1lGlUZAPcUHb6V8oRCgmc3gfbWO8YQcq9chmaPDgKrHaUayXG18SeXJndqgg3W?= =?us-ascii?q?2RHqXWyz9EP2rTN/QSbUzdfsiFBVVr6sBUdWRSWpJ1R1sDaSPArsqNr3uLg67E?= =?us-ascii?q?AsPWzir9KBjmyhOKlYH8fnPtyTPTE0pE4LjJ02XtGv25oUGdyzINcL93Fxc+XR?= =?us-ascii?q?5ni3kyBbpadHnI3e7tuT+vrJAXmql7eapKmVxDBE1ng4ukky6t+9NvHP492KR+?= =?us-ascii?q?qn12MKQihipQTORB+1pabdr1wOPkyLykjLkpQQPt5FxXk4yl3m5O87TdI18AVT?= =?us-ascii?q?DYfAZ/UHpTzpOTv0x1ifY8gtWSmFzztXBE/1HkVkGKghwmL/otjFlXDK+10nXo?= =?us-ascii?q?NwbVDohQRrD4UkLkIg8F0Xwi0FEQgRZhCUEqqlBUHkLYQeU0gMdwiH3ba9eqct?= =?us-ascii?q?3k1z2amj5OnNYuxgH6ANLOpSjhaSnFhHHZIbqakeQKl5e1Jd76PXqBbtBJXgX/?= =?us-ascii?q?j8j3UwLee1QsdY8c8Hq3Qi/hyzRx266ZdM97wbkoyHdrZYYZjQu8Bx91xn6iQR?= =?us-ascii?q?diNXjxhwkQi5XPsHpO/5/NjUqpWo5fi1VKo3QeUY6QQ0DXxkj5TsmFAjvc3X1+?= =?us-ascii?q?BER43XiIT/9RtAI3uUt4fazRZ8M+sOK4SkfLp68XUIOTQeLWoUPdWKc/k8/zNt?= =?us-ascii?q?MDLL6lxDA8IDf8kXM9bWlABPlELpRK9c+dbBFl+fEYdzeNgi73DrxzAt7Zs8Tu?= =?us-ascii?q?Hg5SetKpDe9FFMMelMjCdtlNLevOga2+fSCCwM7HaFbBh63z2NxIOQC/bq+uWM?= =?us-ascii?q?0svbW0kBHi4sXIdXPCCC9hC/RuqpiJXpVRuZ6tfpj5IiaE2QRnKwnKMfsqZPCO?= =?us-ascii?q?JAkTv03jxfFoDzmvKUvMGh6HNNuV1bDIlz7RPEGKJFPpV4Ixj4ldekRlJ6BiTh?= =?us-ascii?q?fMHYbB0uuPCZxu0U+eVxK1P+ZZMHIhID07/69WBVQRVqSLHsuFaWQ/kca8ZnSP?= =?us-ascii?q?PLr3BV9ZhvK7QVM1iHuZzmtDFIp04qAAUxcr8/siRadlXSnA1SQ6v0t6QPihEC?= =?us-ascii?q?Xt5luU9BAmawOGMi5zXZVaRalrSRCOcP/jWVUKMOT11iMjliTBOtxJVuZ7ypkO?= =?us-ascii?q?hIsmxYmCN9vP8q0zthSBunpyLso6MN2TQ9+LC3rzgBvWJKTv+ekijSE1lDyuoF?= =?us-ascii?q?jbsEAXb49VO8eGUDbJf14LR/I8Tg9JUu43M7YRo5ZC0KR+WgCyb3j6OTGYyCq9?= =?us-ascii?q?dciRGCucnUar+zNycSPKwnyR3/X3h9zhTenBFw/WsEXjqg98QkKJygN8gqwCSo?= =?us-ascii?q?GG7bdEsD465Sv8vxsEQETO0oZl97x2VjyMeHTDUXRMPTA2Y1khQkaWJcfZJB7h?= =?us-ascii?q?8aF68ojiyUsalG+gEUfSrbE4Wk+onWhsfI2ng9QMx0xmLXuK2KnJcq32Bkm99u?= =?us-ascii?q?6C6BpmgSffTCU8BwGnjzyptfyevmavWsrOAIUo1mxa+lUP8fL8aj+Gy22I5wVk?= =?us-ascii?q?+i3LQeEEKzMPUfybfDTyelVWqYVPyJc2eSkTY5PEry6AKmL1ItbsdFsVM9PvHE?= =?us-ascii?q?hpFCiw3rSal0STmIpV/H0GwjNvsXdw0yuIegdQ0FUuoRZ+yHKOg1x/0+DloMYG?= =?us-ascii?q?PTEStwFeC2rUannJJnNHV4/UX6fePt/xjkMNuSGhgECYnarppw+fymWG2MInpg?= =?us-ascii?q?zBxuPElu6ejTDVMxtvVTc5yJh9jfm8x70fIZd/dqKSA9pt8Tmod45ImI0ceFbR?= =?us-ascii?q?LRwYj2Jd3PpPiXHeHfxVwwem5GSroZfR/154IiM948Wr3THrhZvRMHCKg4WpMh?= =?us-ascii?q?NGDx9KdqIwN1aALRYqq7gtXyrOKRepRUv2PW7k43LCrEoBIM1Pq0TRBgYpCxg3?= =?us-ascii?q?XyJ4wwRi5fr9JzFxRqBoxPG9kPrwC/GZ6bhLm7i8Ot+0N9o+IKv7T/CvTL1NSh?= =?us-ascii?q?wYp8RJlb5U2OPDbUGqZrmEBlgfqojvfHyJnxBtvoeckYW+hjXm7FdrjGE52xKz?= =?us-ascii?q?KWIML8elJJ/KCH3bJ8UxWReDr5ULScuC2jLvVk7l0xypZkc+rL0Dwt87bb1cP1?= =?us-ascii?q?Z2FfuCiutmaJNJ9F41zRGezeXg5bSeaf8Gl7A6Ibd430+/kSMdY62tiT/xFz7C?= =?us-ascii?q?he0MuCO6Whqk7M2kRmdZPUNUfp3yc5WZIWIBSkKkYsgHXWqnLaAXhGKcikM8Zt?= =?us-ascii?q?is6PDhPx/0lxhX0tZmlZF2rzW9iRPWkb28SjZAyF8w5FAMoDn+6pdk4iqKKyUf?= =?us-ascii?q?NnN45Gmeq0rrUHl8hmKyXUS8hHMCHcNrh2PiBeDu/XvlgnfgYEs6QpWocyfZWO?= =?us-ascii?q?JVkIP1uAySPzywvC1lb5d8Kt1KaPPikW9nRHz7TY0TlDvQW5vuyZgsL7WrDDcJ?= =?us-ascii?q?72ROLSMDYiVjyCRzQ9C0Wp+VC/tPcfofqYJ3sfolATYiKPBw4TprxvocLWDmDN?= =?us-ascii?q?he1pZIcKi+yCWyDsVC14k7I/BilRuk+XWfoDFBfZb3v6jWpCvAytPORM/XP4b7?= =?us-ascii?q?GCwKpaRfAWCJNWcvKFW9vYZexeJzAwmzUbPea8eMfcr6w40lLTVmYZFbPH9FiA?= =?us-ascii?q?Q06XWPCcwCjrXYoNtYgupiUo4s7QnjNwE6nQJLafqTuu/ZK5gSubouDeSHciY1?= =?us-ascii?q?Y0gOMDB2mBxgNMKGcaBNEJ6wnRRfubakJN0m85of5/0B8LPgJoWzth1WMFsuy6?= =?us-ascii?q?H5h1QFhcrn60T/AAdxgjADo2/EKO4CX3bNgEsMbUVylV8b5aGtlVF+Uh9ISCYP?= =?us-ascii?q?hY+/0uxj8z5XVivg=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2HiAQC9Hx5Z/wHyM5BcGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgwEpgW6OeJB7cpcMKIt1VwEBAQEBAQEBAgECaCiCMySCQgYBA?= =?us-ascii?q?iRVAwkBARcIKQgDAVMZBYhPgU8EsGc6JgKLJYg9gmeLCQWJP4ZogQFYjBOKUYh?= =?us-ascii?q?MggKJFwyGR5RGWIEKTyEVhHlEHIFmc4gyAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 18 May 2017 22:32:57 +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 v4IMWlK7026961; Thu, 18 May 2017 18:32:49 -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 v4IMWlKp076218 for ; Thu, 18 May 2017 18:32:47 -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 v4IMWkNY026959 for ; Thu, 18 May 2017 18:32:46 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B9AgALIB5Z/4GlL8FcGwEBAQMBAQEJAQEBgyyCF454kHtylxMchggChkcBAgEBAQEBAmsohRkGJ1IQGAgxVxmIVIFTsGg6ixsBAQgoiD2CZ4sJBYk/hmiBAViME4pRiEyCAokjhkeURleBCk8hFYU9HIFmPTaIMgEBAQ X-IPAS-Result: A1B9AgALIB5Z/4GlL8FcGwEBAQMBAQEJAQEBgyyCF454kHtylxMchggChkcBAgEBAQEBAmsohRkGJ1IQGAgxVxmIVIFTsGg6ixsBAQgoiD2CZ4sJBYk/hmiBAViME4pRiEyCAokjhkeURleBCk8hFYU9HIFmPTaIMgEBAQ X-IronPort-AV: E=Sophos;i="5.38,360,1491278400"; d="scan'208";a="6058460" 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; 18 May 2017 18:32:45 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AgHgO5xFLMiILa2f3oEXWK51GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ78r8iwAkXT6L1XgUPTWs2DsrQf2rWQ6firADZIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbF/IA+ooQnNucUanJVuIbstxxXUpXdFZ/?= =?us-ascii?q?5Yzn5yK1KJmBb86Maw/Jp9/ClVpvks6c1OX7jkcqohVbBXAygoPG4z5M3wqBnM?= =?us-ascii?q?VhCP6WcGUmUXiRVHHQ7I5wznU5jrsyv6su192DSGPcDzULs5Vyiu47ttRRT1ky?= =?us-ascii?q?oMKSI3/3/LhcxxlKJboQyupxpjw47PfYqZMONycr7Bcd8GQGZMWNtaWS5cDYOm?= =?us-ascii?q?d4YBD/QPM/tWoYf+oFUBrxW+CBKwCO/z0DJEmmX70bEm3+knDArI3BYgH9ULsH?= =?us-ascii?q?nMotv6LqESWv2xwqnV1zXDYO1Z2THm6IPVdR0uvOuDXbRxccXPzUkvFRjIjlCO?= =?us-ascii?q?pozhOzOazOINs2+U7uZ6Se2vjGsnphh3rzOyyMksjYzJiZgUylDC7Sh5wZ06Ks?= =?us-ascii?q?O+SEFmed6kF4FQtz2AO4RrXMwiXXlkuD0mxbIcv563ZiwKx48hyhXCaPKHa5CF?= =?us-ascii?q?7g/nWeufOzt1i3BodKiiixuz8UWs0PDwWtew3VtMsyFLiMPDtmoX2BzW8sWHSu?= =?us-ascii?q?Vy/kOm2TuX0gDc9OVEIUQumqrdLJ4gzaQ8mYYUsUjZHy/2nF36jK6Qdko65uil?= =?us-ascii?q?8/nrb7Hoq5OGOIJ5iBvyPrkvl8G/G+g0LxYCUmyD9eS5zrLj/En5QLtQjv0xl6?= =?us-ascii?q?nUqI3VKt4dpq64HQBV1oQj5g26Dzi41NQYmWMILFRCeBOIlYTmJ1bOIPXgAfel?= =?us-ascii?q?n1usiCtrx+zBPrD5GZXCMHzDkLbnfbZg5E9R0xYzzNBD6JJUDbENOvTzWlTru9?= =?us-ascii?q?DCAR85NBK0kK7bD4Bm24cfX3+fKrOIO6PV91mT76QgJPffSpUSvWPRIv5txeP0?= =?us-ascii?q?gnI/ghdJcaCv3JYTali9E/BiKkOecTznhdJXQjRChRY3UOG/0A7KajVUfXvnGv?= =?us-ascii?q?tkvjw=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0H0AQC9Hx5Z/4GlL8FcGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwGCF454kHtylxMchggChkcBAQEBAQEBAQIBAmgogjM?= =?us-ascii?q?kAYJBBidSEBgIMVcZiFSBU7BnOosbAQEIKIg9gmeLCQWJP4ZogQFYjBOKUYhMg?= =?us-ascii?q?gKJI4ZHlEZYgQpPIRWFPRyBZj02iDIBAQE?= X-IPAS-Result: =?us-ascii?q?A0H0AQC9Hx5Z/4GlL8FcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwGCF454kHtylxMchggChkcBAQEBAQEBAQIBAmgogjMkAYJBBidSEBgIM?= =?us-ascii?q?VcZiFSBU7BnOosbAQEIKIg9gmeLCQWJP4ZogQFYjBOKUYhMggKJI4ZHlEZYgQp?= =?us-ascii?q?PIRWFPRyBZj02iDIBAQE?= X-IronPort-AV: E=Sophos;i="5.38,360,1491264000"; d="scan'208";a="5923896" 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; 18 May 2017 22:32:44 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 19 May 2017 01:26:04 +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 v4IMPsGc013313; Fri, 19 May 2017 01:26:03 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH v2 4/9] checkpolicy: Add support for ibendportcon labels Date: Fri, 19 May 2017 01:25:44 +0300 Message-Id: <1495146349-75366-5-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1495146349-75366-1-git-send-email-danielj@mellanox.com> References: <1495146349-75366-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 */