From patchwork Mon May 15 20:42:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9727957 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 311A06028A for ; Mon, 15 May 2017 20:44:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0A33B2899F for ; Mon, 15 May 2017 20:44:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F34C1289A3; Mon, 15 May 2017 20:44:04 +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]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EC6962899F for ; Mon, 15 May 2017 20:44:03 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,346,1491264000"; d="scan'208";a="5797396" IronPort-PHdr: =?us-ascii?q?9a23=3AdsQ0lBNZxcCqBHkqZAsl6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0LP39p8bcNUDSrc9gkEXOFd2CrakV1KyP6Ou5BDZIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbF/IA+roQjfucUanItvJrgswRbVv3VEfP?= =?us-ascii?q?hby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPXw7683trhnD?= =?us-ascii?q?UBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RDqv47t3RBLulS?= =?us-ascii?q?wIOSQ58GXKgcJuiqxVrg+qqxhmz4LJfI2ZMfxzdb7fc9wHX2pMRsZfWTJcDI2y?= =?us-ascii?q?bIUBCOgOPehAr4T/ulcDowWxBRK3Ce/z1jNFnGP60Lcm3+g9FwzNwQwuH8gJsH?= =?us-ascii?q?TRtNj7Or0dUeaox6fM0DXDdfxW1in76IjTbxsspuyDUqh2ccrQ10YvEwHFg06V?= =?us-ascii?q?qYP7OzOV0v4Cs26c7+tvT+6gl2knqwRorzWp28wihI7JhocPxVDF8yV02J01Ks?= =?us-ascii?q?GiR059e9KkFIBfuieHPIV1WsMvW3xktSk1x7EcuZO3YTIGxIooyhLBcfCLbpCE?= =?us-ascii?q?7g/nWeufOzt1i3BodKiiixuz8UWs0PDwWtew3VtMsyFLiMPDtmoX2BzW8sWHT/?= =?us-ascii?q?x98Vq/1juXzADT7/1EIVgzlarGN54t2r4wmYQXsUTEBiL2hF/5jLWXdkU54eik?= =?us-ascii?q?8fjnY7X6qZ+cMI94kAf+Pbg1msOjG+g4NwkOX2yD9eS90r3s41H5Ta1XgvA5na?= =?us-ascii?q?TVqpDXKdkBqqKnDAJZzJwv5wunAzejytsYnH0HLFxfeBKAiojkI0rOL+78Dfe+?= =?us-ascii?q?hVSsjThqy+ndMb3mH5XNKGTMn6n6fbtm905dyBY8zdBY555ODLEBO+j8VlX+tN?= =?us-ascii?q?zfEB81Kxa0zPr/CNVhyoMeXnqCAq2eMKPUq1CI+uIvLPOKZIIOujb9LP4l5/v0?= =?us-ascii?q?gn8ihV8SY7Op3YANZHC/BPRmLF2TYWDwjdcZDWcKog0+QfToiF2ASzFce3WyX7?= =?us-ascii?q?k75jE9CYKmE5zORo6pgLyc0ya0BYBWZmZaClCRC3vocJ+EW/gUYiKIPsBhiiAE?= =?us-ascii?q?VaSmS4I52xCutQv6y795IerO4SAYu4zs28Vy5+3Jjx4y7SZ0D8Of026TU250gn?= =?us-ascii?q?kERzgs3KBwuUZ90EuM0bBkg/xEEtxe/+5GXRs/NZ7byex6F83+VxnfftiXUlam?= =?us-ascii?q?Q9SnATY3Tt4rxd8BfVp9Ec24jh/fxyqqH6MVl7uTCZMp7qLTxWLxKt1hxHbB0a?= =?us-ascii?q?kuk0MpQtBTNWG8gK5w6RTTDZbTk0qFj6aqabgc3CnV+WaDzGuOu0dYXRV1UaXB?= =?us-ascii?q?RHwfZ03Woc7/5kzYVb+uCrUnMhVfxsKYLKtFdMHph01cRPj/INTef36xm2CoCB?= =?us-ascii?q?mT3byAa47qe2QG3CXBE0gIiRsT8miaOgQkHSeuvWbeDD1oFVLybELh6vVxqXOh?= =?us-ascii?q?Tk8p1AGGdUNg2KCp+h4OgvycTekf3rUeuCcusz90Bkqy38rKC9qcoApsZLtTYc?= =?us-ascii?q?sn71dd1GLZrBdwPoS6IKB4h14eaBx3v0f02BprFIpMi88qrGklzABqM6KXzEtB?= =?us-ascii?q?dy+E3ZD3IrDXJHPy8wqpa6HK21Hey82b+qIX6PQ5slnjpw+oFlE4/3VgydlV3G?= =?us-ascii?q?OW5o/WAwoKTZLxTkE3+gB5p77AYSk94J7U2GZvMaausT/C3M8pCPEiyha6cNdV?= =?us-ascii?q?KLmEGxPqE80GG8iuL/QnlEK0YRIePeBd6rQ0Mti8ePSa3a6nJuFgnCipjW5f+o?= =?us-ascii?q?ByzlqM9zZgSu7Px5sF2P+Y3hGAVzfnkFesqdv3mYZDZTAcG2qw0y7kCJRXZqJs?= =?us-ascii?q?YYYBEX2uLNGvxtVim57tXGZV9VC5CFMCxM+mZwCSb0fm0A1Oy0sXu2eomTa9zz?= =?us-ascii?q?BulDEptKWf1jTUw+v+bBoHJnJLRG56gFfwPIe7ktEaU1KsbwUyiBSl4kP6yLRB?= =?us-ascii?q?q6RkM2nfW0FIcDbqL2t6SKu/qqKCY9JT6JMvqShXVuW8YVSeSrHjuBsXyDnsEH?= =?us-ascii?q?VExDA8bT2qvY/5nxNigmKHMHlztGbZed13xRrH+tzcROJe3iYBRClikzXYGli8?= =?us-ascii?q?P96v/dWbjJrDtuG+V2S7WZ1Jdinn14SAtDG05WdyGx2wg+izmsH7EQg9ySL709?= =?us-ascii?q?hqVT7UrBrleYnkyaC6MeNhfkl1C17x8NF6Gpl/kos2hZEfxWMaio+T/XUZjWf5?= =?us-ascii?q?Kc9b1r7mbHoRWT4LxMbY4BLi2E1nKnKG2Zj5WWmawspvfNS6eX4W1T4m78xQD6?= =?us-ascii?q?eU9rNElzNvolWktQLRfeR9njAFxPs28nEanuUJtBA3wSmHGb8SGk1YPTDrlxSO?= =?us-ascii?q?9N2+qblbZGCocbeszkZ+m86uDK2aqAFGRHn5YosiHTN37shnM1LDznvz6pr/dd?= =?us-ascii?q?nTc90TsAaUkxHegOhJMp4xkeAKhSV/M2LnoXIl0/I7jQBp3ZyiooiHLXhi8bmn?= =?us-ascii?q?Ah5eKzL1Z9kf+jfzgqZChsyWxZygHo19GjUXW5vlVeqoHygPtfTjLAuBDDw8qm?= =?us-ascii?q?ubGLbGEw+Q8kFmo2jIE5CxOHGdPGMZwsl6RBmBOExfhxgZXC0gkZ4kEgCl2tTh?= =?us-ascii?q?f11/5jAN+FH4sABByv9zNxbhSGffvx2kaiwzSJiCNhpZ8h9N50nSMcyE4eJ8AT?= =?us-ascii?q?tU/pu/owyRMmabfRhHDXkVWkyYAFDuJreu6sPG8+iEAeq+KuDDYbuQpuNDUPeI?= =?us-ascii?q?34ig0pN8/zaLNMWAIGVtD+Eh1kpER3B5FNzTmy8TRCwPiyLNc8mbqQ+5+iJtqs?= =?us-ascii?q?C/9OrkWB7z5YSVEbRfKtNv9A6qgaeYK+Gfnj55JihC2pMK23DI1KAV3EQOhCF2?= =?us-ascii?q?azmtDbMAuDbXTK7KlK5bFRsbZDl3NMtP76MxxRNCNtLeit/v0b54lPE1AU9fVV?= =?us-ascii?q?P9gsGpedAKI2alOVPJHkaEKqmJJSbRzMHxfaO8TqZQgf5OuBKsvDaXCUjjPi6M?= =?us-ascii?q?lzPxTRCgLflMjD2HPBxZoIy9dAxtBnL7TNL+cRC7Pt53jSctwb0oiHPKNGgcPi?= =?us-ascii?q?J6c0xRr72f9ydYju94G2xb4XpvNfOElDqB7+nENpYWtuNmAjxqmO1B/ns6zbpV?= =?us-ascii?q?7D1DRPFumSvdsMBhrE+8numI0DpnXwJEqixXi4KToUViJaLZ+4FdVnbf4h0C92?= =?us-ascii?q?qQCw4QqNt7EdDvoLpfytvSlKLpMjhO6dbU/dYaB8fOMsKLKWYhMR3qGD/UCwsJ?= =?us-ascii?q?VzirOn/Dh0ZFivGd6mWVroQmqpjrgJcOUaVUVEIvGfMVFEtlB8cPIIxtUTM6i7?= =?us-ascii?q?Gbg9AH5WGkoBnXWspaoojNVuiODvX3NDaZkb5EagMTzrP5IoQTMYv71ld/ZVZk?= =?us-ascii?q?h4vKGlDfXdZXri1mdA80r11H8GJiQW0rx0LldgSt7WcJGv67hBE2lBVxbP8q9D?= =?us-ascii?q?f0/Vg3IF/KqzExkEk1gtrlhj+QfCT2LKeqUoFcEzD0uFQpMpPnXwZ1ahW/nVBj?= =?us-ascii?q?NDfBXb5RlbxgdGF1hw/aopRPA/lcQrNHYBIL2f6XYPAo3khGpSW82U9L/+3FBo?= =?us-ascii?q?V+lAEya56js2pA2x5/bN4yPaHQJ6pIzlxOia+Vuy+o0e4xwAEAKEYR7GOSeCkI?= =?us-ascii?q?uEkWObU8ISqn4PBs4xSYmzRfYGgMS+YqovVy+0M7JeuP1Sbg3qVAKkC2LOyfM7?= =?us-ascii?q?mWu27blc6LQ1M8zEUImFdZ/bJuy8csb1KUV1wzzLuWDxkJL9TNKRpLYMVI7njc?= =?us-ascii?q?YSaOvP7WzpJ0JYWyC+foTeGWtKYOnE2lHBwlH4IS4cQdBpOsyl3XLd/7LL4Zzh?= =?us-ascii?q?Ug/BnkJFKDDPRPZR2EjjMHo8CkwZBtw4ZdPDYdDX96MSWt6bbdvhUqj+abXNcq?= =?us-ascii?q?fncaWZMJOW8sV82kmi5Wom9AASKt3eID0giC6DH9pj/OAzbgctpjfvaUZQ9sCd?= =?us-ascii?q?2s/zUw7bS2g0bN8prCP2H6KchiutjX5OMeoJaHEe1bTb98skfbgIRYSHqqU3PV?= =?us-ascii?q?Hd6yPZjwZJEmbcboBXaiTly/lzU1Qt/qPNmzKqiIgAfoRZtbsYSAwD8jMsq9GS?= =?us-ascii?q?0EFBdru+EP/qR8ahMfY5Ajex7nqxw+N7CjIAefytiuQHytKDtMQPlZ0eW6Z6da?= =?us-ascii?q?zyUrbu+i1HQsVJc6wPer8UQVXpEFkgnexeq/Z4lZSSXzBn1dewDIpSoll2hgNv?= =?us-ascii?q?0/zfo+wBLIq1YTKCqHdOp3Z2xYp9s8H0+dIW1qCmokQF+RlZDM4gqt378O4SRS?= =?us-ascii?q?h9NU0O1DsHj5uJ/QeimhV7eqqZrPtSosdNYmo7BrPYzlPMSGqIvUnibDQ5nIrg?= =?us-ascii?q?2FTCm6GuJBlddOJiJVW+NHlnw7OcMYo4pB8lA+Vt0+JrBVD6ksvL+qYyJ+DSEO?= =?us-ascii?q?1S8ZS5+A3Dsaj+ezxrvalxOQcJA8PxwBq5hNn8USXDV3YiwEoq+vTYLWl3WLSm?= =?us-ascii?q?ITOgcc8RxM5B4clo93Zu3l+ozITJ5QxD5WpPJ0VjDLGIFx+VXmUG+bnV/2Re69?= =?us-ascii?q?nOyu2AJd0Ojj0sIHWBJlD0hS2fpWnFMyKL5rM6kQopLKsjiQeEPgoW3i1fCrJF?= =?us-ascii?q?ZUyczbbVH4CpTKtXbkWC0G5XIUXZNPyG3YFZkKiQp2crwrpFJXL429Zkb+/SYr?= =?us-ascii?q?x5p3ELm8VMCrwVklrXIHRyelE9pBF+9mv0jNWD1geZyrrovqO4lKSG9K5JKds0?= =?us-ascii?q?tZkFlqMyOhx5tQMd1C4j4NXDhKoDWSptiyRdZC2cBoEZADPM1zu3DnGKNLIJKR?= =?us-ascii?q?uWE5uqTzyn/F/DAxqE21xC+uG6++Ve5Z/HYTGgQoJ2SftkkgFPEg8mHM/VDRql?= =?us-ascii?q?p05ftUBqCTjUVtpzZwBpFOBjBV1X+7K1R8UnxGvPtGKKTPc81RWP4yZQexNBw4?= =?us-ascii?q?EP4pxU2J/UVvknf+bC1+rAxa+zrSXwMsTykanq/tmSECqsGgITIaRIhIYi8nby?= =?us-ascii?q?fZMA+bmCdXvRhZa0F2W5AWHNdF+7cH3YRK5MrOU0CsJj8ZXBZ6LAI3zeJflVJf?= =?us-ascii?q?sEWfYS3dEQ2odfPUvx1rYcuRqdWmIO7//AhZloPtqPo4+LkbR326hQ2tRsjTr4?= =?us-ascii?q?/mud2QrESOcLr3PvahbnDfVDjMlQ6/hbM6AJnQ5STTNxBbK5Ziw3o+fZfhEXLL?= =?us-ascii?q?PQhBJ68DJUpbUr51ZM5bre9EfM9rZrwJ+bNzCR2aXB/vHpKgrOVeJFbJWTveNz?= =?us-ascii?q?mB8vC4oY/L9rPdR/TvatCOynraTa96JYt16T7+G7j2y4Be4Vb21u1r9kxkVVjM?= =?us-ascii?q?KzqBo8j5JgMX+MmicVPvvoc3EjzLAJd/imbty1pEd8oQXS2l7ooUx49e6HntV+?= =?us-ascii?q?10yE7zv/NO97N884k4/6hpyduoJafVMflaqVRnAgSOCQp36pUgG3N/R2dMYu8L?= =?us-ascii?q?NPjeY6IZjdz0q+/tE6wb8hqV+/ZWadHfPUHOhtG/Ci2ASRxDhAoBtSQaIRWC2P?= =?us-ascii?q?GYgKJ0VMKlpfTj2k03/Vi+LxkGzLRz6oeY4KaIo/XXbxTJx7geRqfqXt/zrqgr?= =?us-ascii?q?u06K5/0rjqQOemtuYw2jCucdSNUQxmL9zaAu0SIsEt/MH7P69/5FTHI1hDXgm4?= =?us-ascii?q?pyH18OAPMbAaKL/ZhCnmc/g+HZNMcZcqZMmmaVEh6rD6ENxGW36ySNJmllmRbO?= =?us-ascii?q?3wv2QWyt8F/8tTV4TjfUz9f/jkpVUaG6BUFWXyeyOE94tjaPMBDptNrxt6Q19l?= =?us-ascii?q?s5Mnf4tNKXiWuuJK9XH9DlJNOCOyU0o0gXjJIpTNy1xY8bAca9IMsW8HxmaPve?= =?us-ascii?q?6n+kkyhFo6hdnIrS+MCV+vLQHXm7lK2XsLCNyT9Xy3QiulE/8N+gPOnU59KWW/?= =?us-ascii?q?Soy3oRTyBntgTdRRG1rqLUr0sIOU2L10fGg5cKMc1Y3XYm0EHm+OkjT8gp+AVY?= =?us-ascii?q?CInAe+sIpSrvNzvs3Vaff9U3WzGa0ztMG1L4EUJ1GKYi123tu8LJj23f+0UyRo?= =?us-ascii?q?l3dUzomwB4D5kiJUIq8lgXzTIJERIRZhCDELGoGUPlIJMGVUgCbBSKx726dbk3?= =?us-ascii?q?3EJt2LOv5enTbeNmC6oLKPldkhaEnEJHFZIOra0eXLV8dkdc9K/WvAftEZToUu?= =?us-ascii?q?P9lXUuKf26XNxV/doet3s47Qa1XwCg5otb77YHlJCIcbZJboPNvMBn4UZo/zwP?= =?us-ascii?q?di1RgBhnlRy5TOQcqfv/7djcrZWn9PyhVLs3R+UQ7Rg7HX5yj5zqgFAsudvXzf?= =?us-ascii?q?tTSpXJiYTj9wBAO2aKt5zG0xZgKeoPJYWrfKxj93kePCgROXYOPduQa/kh7C5g?= =?us-ascii?q?Ky3T6EZeAswQZdMZMs3NmRpXikHzW7Fc6NDbGlmGBId3bcwo6HD3yD8t+5smTu?= =?us-ascii?q?ng8CO2JYzY71xVI/NDljtjlNbYq+gT3/XfEzUY4XiWaxh03iON0YKNBOzq/eWR?= =?us-ascii?q?0t3UUU0JHjIuWYdHODWC4RCnRvaylJjxXQOb8NXzj4widEKQXXGxmKUFsrpSHu?= =?us-ascii?q?5AkCr7wyNeGprzh/2Lr9qm8HFXuUFfEIZv8R3FH71SPpplNhT+ismrQU98Cizk?= =?us-ascii?q?eM7KchouueyWxvoD4uhlM0vxe5UbIxIexL7g73paUBduQqbsvlmFReIReMdmSP?= =?us-ascii?q?Tco39J64JvMbMAMUOBq5ztqjdIrFE2DxEzaL8ssDNVaknOkBdSW6but74KkhEc?= =?us-ascii?q?XsJhuU9QBWKwP3oz5z/AVaRTkKmRB+Ia/y6WTqwPSUpoND1xQw+72ZVpYbupnu?= =?us-ascii?q?tHvnlAnixjvPggyyZmSwekuS3wu6IN3iot+L6kuzUaonxJV/iQnSjOB1VCyvQK?= =?us-ascii?q?kKgdBm3t6Vy5enYDapX97KNgJcT6+okr+24/bgk7fy0aQeSgDDn9j6GPAoyPtt?= =?us-ascii?q?JQngKCuMXKbb+uMCcTN7U9yRT4R3h+0wjThwho8GoVQjq66N8rOYS9NdwjxiW2?= =?us-ascii?q?BWjRbEwM7b9RsMvtqV4LS/M7aVJ/wGp51MiKXSkNRNHSFGY0iQgkcn9IcJVZ6R?= =?us-ascii?q?8VD6MomCqHvrFa/gEIZzfZCoal9ZfencfG3XkwVtlryXjQpqKbmpMmyntllM1o?= =?us-ascii?q?7iSWonQda/TYU9NwAnj0zopfxuj+Z/Kjs+8ZTItmzK+sUOQFMsml+Gu5xI9mWk?= =?us-ascii?q?m7ybQCB1C5KvMMxq/HUye5Tm2VQeaLc2iMnjYhNU7y4RioLkEpZ8pRqk89M/fC?= =?us-ascii?q?hoRCmAH7VrN0XCqQr0fBzGM/KeMaax42uIC/dgwWTe4RYvORJfQvwPIiC1sDcX?= =?us-ascii?q?vJETFwC+CorV6nhJJ7NGl44UXmfeTt9RjrMN6TGhkHEo7aqYV8+f6gSWKCPn9g?= =?us-ascii?q?ygN9PE9u++fZCVsxqvdWc4yNktjIm9R7zekFeu92PiIjvN4Thplu6ZKQ0MeNbR?= =?us-ascii?q?HR0ojyKs/IrfSCBP3f1UsqcHlAUrUFeQP1+5k6PtkhVr3LGrtZuQ4TBbI0QZwm?= =?us-ascii?q?M2fx+rp5LAZ0cg7Wf7S7nNXlpviMZptPvH/W71QwLCjGtx0E0Py0QhRxb4q2iH?= =?us-ascii?q?XqPJAwWjVBosVjChR4GItPGtsAoBS8Dp+VmaG7jtqx9F1gu+8Or6X8EPfK1M62?= =?us-ascii?q?349pRZhV+VSLPCrNBKlsmklkgPyygu3B0pbtF8zvYtYEVOlnQm7fdLDKBIK/Ki?= =?us-ascii?q?iBOsjkYU5J76ac0K5lUhWWfC35WK6GuzO/OfV85UU00Jd4fPbSzDMx87HbwsX9?= =?us-ascii?q?aH9Bqiels3GJKINV7EbWCuzGQxJUVf2F/X5hHa0Wa4v06egPPcUmwNid+Alz8C?= =?us-ascii?q?9C3dCEI6e7qE/M3Vh3dZXBLEvmwyw5Q5UFIAyjMUswhm/Usm/dDmpYLsilL8lt?= =?us-ascii?q?ndmUAhvi6UltmWEieHRBFXTwRdiLImUb2NyxZBeM9A1VC9YMhPO3eUEiuq21U+?= =?us-ascii?q?loNY1Pmf+2u7UfjdZpNybPSdBfPy7KMLB2PjtRDuPIpFUzfB4Esr41VZkxZZiP?= =?us-ascii?q?JkMHLUiBxTn1zQvY3k3+b8as27qRICYK7nVHyKrI0TpWqAm6vvaWmdbuUK3fbJ?= =?us-ascii?q?HqXP7SNzclVj6aRTQuC0qp/0mru+YctvqCPWgfukwUYj6VCAMLqaBgt8PfDnXS?= =?us-ascii?q?meJ9eJ0Hn+6aWyTqRy1jlaoyGzxHtUaSTPofDQPWdWPugHJAuAy+If9B5XDlb7?= =?us-ascii?q?ifxqpPQewWA5BMf+afQ9TCfPBROTYomi8eOOamcN3Wt6w53U7QTWsFD6nI80WT?= =?us-ascii?q?TFWYQvyZ2z3mXIYYspMquiU24NLQny52E6POP7qFoT6h7JK4326kvrjFW20sZV?= =?us-ascii?q?ElqP4TC2mGhh9bIScLDM9GllvqR/usbkAE9m8zhu9owFdYdA11U3Bq0FVTkfK5?= =?us-ascii?q?E8teWRgfi2b4E65OV0x+ED5lpRzC2Qb1e9FV/JmLSg=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2GwAwCREhpZ/wHyM5BcHAEBBAEBCgEBFwEBBAEBCgEBgwE?= =?us-ascii?q?pgW6OdpBtcpcOJYJNiG5XAQEBAQEBAQECAQJoKIIzJIJCBgECJFUDCQEBFwgpC?= =?us-ascii?q?AMBUxkFFog6gU4ErlI6JgKLBIg9gmeLCQWJPYdmWItBTopRiEyCAokVDIZGlEN?= =?us-ascii?q?YgQpPIRWEeQFDHIFmc4hsAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 15 May 2017 20:44:03 +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 v4FKi256021606; Mon, 15 May 2017 16:44:02 -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 v4FKhOuc276871 for ; Mon, 15 May 2017 16:43:24 -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 v4FKhKYx021276 for ; Mon, 15 May 2017 16:43:23 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B1AgCREhpZf4GlL8FcHAEBBAEBCgEBgyyCF452kG1ylxKCboM2AoYNAQIBAQEBAQITAQEhXYUZAwMnUhAYCDFXGRuIOoFSrlI6inoBMYg9gmeLCQWJPYdmWItBTopRiEyCAokhhkaUQ1aBC08hFYU9HIFmPTaIbAEBAQ X-IPAS-Result: A1B1AgCREhpZf4GlL8FcHAEBBAEBCgEBgyyCF452kG1ylxKCboM2AoYNAQIBAQEBAQITAQEhXYUZAwMnUhAYCDFXGRuIOoFSrlI6inoBMYg9gmeLCQWJPYdmWItBTopRiEyCAokhhkaUQ1aBC08hFYU9HIFmPTaIbAEBAQ X-IronPort-AV: E=Sophos;i="5.38,346,1491278400"; d="scan'208";a="6053067" 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; 15 May 2017 16:43:19 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AlYMowRKIwjFnCsg3mNmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgRL/XxwZ3uMQTl6Ol3ixeRBMOAuq0C0rGd6v26EUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6/bL9oMRm7owrdutQWjId8N6081gbHrnxUdu?= =?us-ascii?q?pM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW814tbrtQTY?= =?us-ascii?q?QguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VDi+86tmTgLjhT?= =?us-ascii?q?wZPDAl7m7Yls1wjLpaoB2/oRx/35XUa5yROPZnY6/RYc8WSW9HU81MVSJOH5m8?= =?us-ascii?q?YpMPAeQfIOhWoYrzqVwMohuwHgSgGP/jxyVUinLswaE2z+IsGhzG0gw6GNIOtW?= =?us-ascii?q?zZotvvO6cUTOu7yLTIzS/Mb/xI3zf985XDfxc8rv6WW7JwcNTeyU0tFw7ei1Wf?= =?us-ascii?q?t4jlPzeP2eQLtGia4PBsWv6oi24isgx8pCWkyMkrionMnI0Vy1bE+D1iwIkpP9?= =?us-ascii?q?K4TlR3Ydq/H5ZWqiqUNJN2T9s/T2xstis20LILtJyhcCQXyZkqxwTTZ+GZf4WM?= =?us-ascii?q?5B/oSfyfLi1ihH1/fbKynxay/lakyu37TsS01UhFri5BktbWsHAN0BPS5tKbRf?= =?us-ascii?q?t65Euh2DKP2xjS6uFCP080ibLWJ4Mlz7M+jJYevkbOEjXrlEj3jKKabFgo9vas?= =?us-ascii?q?5uj/Z7XpvJ6cN4t6igHkNaQun9SyDvkiPQgIXmiU5+C81L/48E38XrpKivk2nb?= =?us-ascii?q?PfsJDdKsUXvLK2AwhQ0oo78RawEy+m0MgEnXkANF9FYwyIj4zoO1HIPfD5Auyy?= =?us-ascii?q?g0iskTh3x/DGOaftApPWLnfZirvhcrF961APgDY0mMtS45NSF6EpPOP4Wki3ss?= =?us-ascii?q?fRSBA+LV+a2eHiXfl00Ms8RHiAD6mCePfeuFmJ6+YtC+yBYIscvjHtbfMi4qi9?= =?us-ascii?q?3jcChVYBcPzxjtMsY3eiE6Ejeh3BbA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0HsAQBvERpZf4GlL8FcHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwGCF452kG1ylxKCboM2AoYNAQEBAQEBAQECAQIQAQEhXYIzJAG?= =?us-ascii?q?CQQMDJ1IQGAgxVxkbiDqBUq5YOop6ATGIPYJniwkFiT2HZliLQU6KUYhMggKJI?= =?us-ascii?q?YZGlENWgQxPIRWFPRyBZj02iGwBAQE?= X-IPAS-Result: =?us-ascii?q?A0HsAQBvERpZf4GlL8FcHAEBBAEBCgEBFwEBBAEBCgEBgwG?= =?us-ascii?q?CF452kG1ylxKCboM2AoYNAQEBAQEBAQECAQIQAQEhXYIzJAGCQQMDJ1IQGAgxV?= =?us-ascii?q?xkbiDqBUq5YOop6ATGIPYJniwkFiT2HZliLQU6KUYhMggKJIYZGlENWgQxPIRW?= =?us-ascii?q?FPRyBZj02iGwBAQE?= X-IronPort-AV: E=Sophos;i="5.38,346,1491264000"; d="scan'208";a="5797358" 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; 15 May 2017 20:43:18 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 15 May 2017 23:43:15 +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 v4FKglb0005032; Mon, 15 May 2017 23:43:14 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH v1 1/9] checkpolicy: Add support for ibpkeycon labels Date: Mon, 15 May 2017 23:42:33 +0300 Message-Id: <1494880961-73481-2-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494880961-73481-1-git-send-email-danielj@mellanox.com> References: <1494880961-73481-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 ibpkeycon labels. Also create a new ocontext for Infiniband Pkeys and define a new policydb version for infiniband support. Signed-off-by: Daniel Jurgens --- v1: Stephen Smalley: - Always use s6_addr instead of s6_addr32. - Add comment about POLICYDB_VERSION_INFINIBAND being linux specific. Signed-off-by: Daniel Jurgens --- checkpolicy/policy_define.c | 105 +++++++++++++++++++++++++++++ checkpolicy/policy_define.h | 1 + checkpolicy/policy_parse.y | 15 ++++- checkpolicy/policy_scan.l | 3 + libsepol/include/sepol/policydb/policydb.h | 32 +++++---- 5 files changed, 143 insertions(+), 13 deletions(-) diff --git a/checkpolicy/policy_define.c b/checkpolicy/policy_define.c index 8fab214..ffdc5f8 100644 --- a/checkpolicy/policy_define.c +++ b/checkpolicy/policy_define.c @@ -20,6 +20,7 @@ * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003 - 2008 Tresys Technology, LLC * Copyright (C) 2007 Red Hat Inc. + * Copyright (C) 2017 Mellanox Techonologies Inc. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2. @@ -5057,6 +5058,110 @@ int define_port_context(unsigned int low, unsigned int high) return -1; } +int define_ibpkey_context(unsigned int low, unsigned int high) +{ + ocontext_t *newc, *c, *l, *head; + struct in6_addr subnet_prefix; + char *id; + int rc = 0; + + if (policydbp->target_platform != SEPOL_TARGET_SELINUX) { + yyerror("ibpkeycon not supported for target"); + return -1; + } + + if (pass == 1) { + id = (char *)queue_remove(id_queue); + free(id); + parse_security_context(NULL); + return 0; + } + + newc = malloc(sizeof(*newc)); + if (!newc) { + yyerror("out of memory"); + return -1; + } + memset(newc, 0, sizeof(*newc)); + + id = queue_remove(id_queue); + if (!id) { + yyerror("failed to read the subnet prefix"); + rc = -1; + goto out; + } + + rc = inet_pton(AF_INET6, id, &subnet_prefix); + free(id); + if (rc < 1) { + yyerror("failed to parse the subnet prefix"); + if (rc == 0) + rc = -1; + goto out; + } + + if (subnet_prefix.s6_addr[2] || subnet_prefix.s6_addr[3]) { + yyerror("subnet prefix should be 0's in the low order 64 bits."); + rc = -1; + goto out; + } + + memcpy(&newc->u.ibpkey.subnet_prefix[0], &subnet_prefix.s6_addr[0], + sizeof(newc->u.ibpkey.subnet_prefix)); + + newc->u.ibpkey.low_pkey = low; + newc->u.ibpkey.high_pkey = high; + + if (low > high) { + yyerror2("low pkey %d exceeds high pkey %d", low, high); + rc = -1; + goto out; + } + + rc = parse_security_context(&newc->context[0]); + if (rc) + goto out; + + /* Preserve the matching order specified in the configuration. */ + head = policydbp->ocontexts[OCON_IBPKEY]; + for (l = NULL, c = head; c; l = c, c = c->next) { + unsigned int low2, high2; + + low2 = c->u.ibpkey.low_pkey; + high2 = c->u.ibpkey.high_pkey; + + if (low == low2 && high == high2 && + !memcmp(&c->u.ibpkey.subnet_prefix[0], + &newc->u.ibpkey.subnet_prefix[0], + sizeof(c->u.ibpkey.subnet_prefix))) { + yyerror2("duplicate ibpkeycon entry for %d-%d ", + low, high); + rc = -1; + goto out; + } + if (low2 <= low && high2 >= high && + !memcmp(&c->u.ibpkey.subnet_prefix[0], + &newc->u.ibpkey.subnet_prefix[0], + sizeof(c->u.ibpkey.subnet_prefix))) { + yyerror2("ibpkeycon entry for %d-%d hidden by earlier entry for %d-%d", + low, high, low2, high2); + rc = -1; + goto out; + } + } + + if (l) + l->next = newc; + else + policydbp->ocontexts[OCON_IBPKEY] = newc; + + return 0; + +out: + 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 9f4b6d0..75e3683 100644 --- a/checkpolicy/policy_define.h +++ b/checkpolicy/policy_define.h @@ -43,6 +43,7 @@ int define_level(void); 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_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 1ac1c96..35b433b 100644 --- a/checkpolicy/policy_parse.y +++ b/checkpolicy/policy_parse.y @@ -21,6 +21,7 @@ * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003 - 2008 Tresys Technology, LLC * Copyright (C) 2007 Red Hat Inc. + * Copyright (C) 2017 Mellanox Technologies Inc. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2. @@ -135,6 +136,7 @@ typedef int (* require_func_t)(int pass); %token TARGET %token SAMEUSER %token FSCON PORTCON NETIFCON NODECON +%token IBPKEYCON %token PIRQCON IOMEMCON IOPORTCON PCIDEVICECON DEVICETREECON %token FSUSEXATTR FSUSETASK FSUSETRANS %token GENFSCON @@ -170,7 +172,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 + initial_sid_contexts opt_fs_contexts opt_fs_uses opt_genfs_contexts net_contexts opt_dev_contexts opt_ibpkey_contexts ; classes : class_def | classes class_def @@ -713,6 +715,17 @@ port_context_def : PORTCON identifier number security_context_def | PORTCON identifier number '-' number security_context_def {if (define_port_context($3,$5)) return -1;} ; +opt_ibpkey_contexts : ibpkey_contexts + | + ; +ibpkey_contexts : ibpkey_context_def + | ibpkey_contexts ibpkey_context_def + ; +ibpkey_context_def : IBPKEYCON ipv6_addr number security_context_def + {if (define_ibpkey_context($3,$3)) return -1;} + | IBPKEYCON ipv6_addr number '-' number security_context_def + {if (define_ibpkey_context($3,$5)) return -1;} + ; opt_netif_contexts : netif_contexts | ; diff --git a/checkpolicy/policy_scan.l b/checkpolicy/policy_scan.l index 028bd25..f742939 100644 --- a/checkpolicy/policy_scan.l +++ b/checkpolicy/policy_scan.l @@ -12,6 +12,7 @@ * Added support for binary policy modules * * Copyright (C) 2003-5 Tresys Technology, LLC + * Copyright (C) 2017 Mellanox Technologies Inc. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2. @@ -183,6 +184,8 @@ INCOMP | incomp { return(INCOMP);} fscon | FSCON { return(FSCON);} +ibpkeycon | +IBPKEYCON { return(IBPKEYCON);} portcon | PORTCON { return(PORTCON);} netifcon | diff --git a/libsepol/include/sepol/policydb/policydb.h b/libsepol/include/sepol/policydb/policydb.h index 37e0c9e..844191c 100644 --- a/libsepol/include/sepol/policydb/policydb.h +++ b/libsepol/include/sepol/policydb/policydb.h @@ -24,6 +24,7 @@ * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003 - 2004 Tresys Technology, LLC * Copyright (C) 2003 - 2004 Red Hat, Inc. + * Copyright (C) 2017 Mellanox Techonolgies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -358,6 +359,11 @@ typedef struct ocontext { uint32_t low_ioport; uint32_t high_ioport; } ioport; + struct { + uint32_t subnet_prefix[4]; + uint16_t low_pkey; + uint16_t high_pkey; + } ibpkey; } u; union { uint32_t sclass; /* security class for genfs */ @@ -386,14 +392,14 @@ typedef struct genfs { #define SYM_NUM 8 /* object context array indices */ -#define OCON_ISID 0 /* initial SIDs */ -#define OCON_FS 1 /* unlabeled file systems */ -#define OCON_PORT 2 /* TCP and UDP port numbers */ -#define OCON_NETIF 3 /* network interfaces */ -#define OCON_NODE 4 /* nodes */ -#define OCON_FSUSE 5 /* fs_use */ -#define OCON_NODE6 6 /* IPv6 nodes */ -#define OCON_GENFS 7 /* needed for ocontext_supported */ +#define OCON_ISID 0 /* initial SIDs */ +#define OCON_FS 1 /* unlabeled file systems */ +#define OCON_PORT 2 /* TCP and UDP port numbers */ +#define OCON_NETIF 3 /* network interfaces */ +#define OCON_NODE 4 /* nodes */ +#define OCON_FSUSE 5 /* fs_use */ +#define OCON_NODE6 6 /* IPv6 nodes */ +#define OCON_IBPKEY 7 /* Infiniband PKEY */ /* object context array indices for Xen */ #define OCON_XEN_ISID 0 /* initial SIDs */ @@ -404,7 +410,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 7 +#define OCON_NUM 8 /* section: module information */ @@ -726,10 +732,11 @@ extern int policydb_set_target_platform(policydb_t *p, int platform); #define POLICYDB_VERSION_CONSTRAINT_NAMES 29 #define POLICYDB_VERSION_XEN_DEVICETREE 30 /* Xen-specific */ #define POLICYDB_VERSION_XPERMS_IOCTL 30 /* Linux-specific */ +#define POLICYDB_VERSION_INFINIBAND 31 /* Linux-specific */ /* Range of policy versions we understand*/ #define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE -#define POLICYDB_VERSION_MAX POLICYDB_VERSION_XPERMS_IOCTL +#define POLICYDB_VERSION_MAX POLICYDB_VERSION_INFINIBAND /* Module versions and specific changes*/ #define MOD_POLICYDB_VERSION_BASE 4 @@ -747,10 +754,11 @@ extern int policydb_set_target_platform(policydb_t *p, int platform); #define MOD_POLICYDB_VERSION_TUNABLE_SEP 14 #define MOD_POLICYDB_VERSION_NEW_OBJECT_DEFAULTS 15 #define MOD_POLICYDB_VERSION_DEFAULT_TYPE 16 -#define MOD_POLICYDB_VERSION_CONSTRAINT_NAMES 17 +#define MOD_POLICYDB_VERSION_CONSTRAINT_NAMES 17 +#define MOD_POLICYDB_VERSION_INFINIBAND 18 #define MOD_POLICYDB_VERSION_MIN MOD_POLICYDB_VERSION_BASE -#define MOD_POLICYDB_VERSION_MAX MOD_POLICYDB_VERSION_CONSTRAINT_NAMES +#define MOD_POLICYDB_VERSION_MAX MOD_POLICYDB_VERSION_INFINIBAND #define POLICYDB_CONFIG_MLS 1