From patchwork Tue May 9 20:50:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9718951 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 E683260364 for ; Tue, 9 May 2017 20:51:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D3D9A28453 for ; Tue, 9 May 2017 20:51:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C60782848E; Tue, 9 May 2017 20:51:59 +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 6714028453 for ; Tue, 9 May 2017 20:51:58 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,316,1491264000"; d="scan'208";a="5619537" IronPort-PHdr: =?us-ascii?q?9a23=3AsEX1NhBXsnL9beXEw3RIUyQJP3N1i/DPJgcQr6Af?= =?us-ascii?q?oPdwSPr6osSwAkXT6L1XgUPTWs2DsrQf2rWQ6/mrADZQqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdwIRmssQndq8YajZZ8Jqsy1xDEvmZGd+?= =?us-ascii?q?NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG4p6sLrswLD?= =?us-ascii?q?TRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Uims4qt3VBPljj?= =?us-ascii?q?oMODAj8GHTl8d+kqRVrhy8rBB72oLYfZ2ZOP94c6jAf90VWHBBU95RWSJfH42y?= =?us-ascii?q?YYgBAe0DMuZWt4nwpUYCoBWgCgm3H+7j1iNEi2Xq0aAgz+gtDQfL1xEgEdIUt3?= =?us-ascii?q?TUqc34OqkIXuCz0aLGySjDb+lZ2Tjj7ojIaQ0qrPaRUr1qd8rRyFcgFwfHjliL?= =?us-ascii?q?rIzqITeV1uAXvGid6OphWvijhHIgqwF0uzWiwNonhIfOhoIQ0F/E9CN5zZ4wJd?= =?us-ascii?q?KiUE53e9+kEJ1WuiqHNIV2WtsvT3xntSs10LELuYO3cDIUxJko2RLTceGLf5CV?= =?us-ascii?q?7h/nWuudOzh1iXB/dL6ihhu/8VKsxvDiWsSw1ltBszBLncPWtn8X0hze8s2HSv?= =?us-ascii?q?xg8Ui/wTuPzAXT6v1cIUAziKrbN4Ytwr4umZoXtkTOBjP2l1/sjK+Xa0Uk4fKk?= =?us-ascii?q?6/jnY7r6pp+cMJV4igfiPaQ1hsOzG+E4MgkKX2SD+OS80qPs/VHhTblXgfA7nb?= =?us-ascii?q?PVvZDHKcgBuKK0DBFZ3pw+5xqnCjepytUYnX0JLFJffxKHipDkO0rQL/D8DPe/?= =?us-ascii?q?hUmskThyy//dOb3hH5PNIWTdn7f6Zrt9905dxxYzzdBY/Z5UDKoBL+jpVk/+s9?= =?us-ascii?q?zYEAc1MxaozOb/FNV9yoQeVHqNAq+eNqPdq0OI5uI1LOmKf4IVujH9K/4g5/H0?= =?us-ascii?q?ln85hUESfbOy3ZcNb3C4BPtmKV2DYXXwmtcBDXsKvg0mQezoil2NSyJcZ3WpX6?= =?us-ascii?q?I74DE7CZymAJzNRoCpnbyA0zy0HoBQZmBaF1CAC3Dod5+LW/0UciKdPtdhkiAY?= =?us-ascii?q?VbimU4Ig2xCutAv/y7V5NOrZ4SMYuoz+29hy/e3cjwky9SZzD8SfzW6CU310kn?= =?us-ascii?q?kPRz8s06B1uVZ9xUub0ahkn/xYEsRe6O5VXQc/Mp7cyfB6B83pVwLfYNiJUlem?= =?us-ascii?q?Q9ShATE3VN4xxcEBY1plEdW4kh/DxzaqA6MSl7GTGZM07rjT32LqKslhzHbG0b?= =?us-ascii?q?UugEM9QstTL2GmgLBw9xTLDY7Tj0qZj7qqdbgb3CPV9GaCzG2OvEdDXQ51VaXJ?= =?us-ascii?q?RHEfZk3ModT//EzCVbyuCbU5MgRf08KCLLVFasHxh1VcWPjjIMjeY362m2qoGx?= =?us-ascii?q?mI3qmDbJDre2UGxyjdEFILkxoS/XadLQg+Aj2urH7AAzB0ElLveUzs+/FkqHyn?= =?us-ascii?q?Vk800x2Kb0p52rq74B4an/qcRO8S3rIfoyohri10HFek09LNBduAvBBtfKJGYd?= =?us-ascii?q?My+F1Hz37WtxRhPpy8KKBvnl0efB50v0PpyhV6EYZAntIprHMt0Qp+M6WY0ElO?= =?us-ascii?q?dzmAx5D/JqXXKnXu/BCoc6PZwEzR0MyX+qgR8vQ1sE/ssx2sFkY49HVnydZV2W?= =?us-ascii?q?OG5prWFAoSTY7xUkEv+hhhqbHaeC4955jI1XB3Kqm0tDjC2twsBOQ/zBasZdFf?= =?us-ascii?q?P72YFAXqCc0VG9CuKPA2m1iudh8FMvpd9KooP8y4bfuGw7WmPPh+kzK8lmtH/Y?= =?us-ascii?q?V93liL9ypmRe7Cx4wFzO2A3gubSzf8i0+sstzqlo9ZZDEdBG6/xDP4C45WY619?= =?us-ascii?q?YZwECXyyI8GtwNVxmYLtUWZC9FG/H1MGxNOpeR2KYlz73A1Q0UAXrmK8mSaj1T?= =?us-ascii?q?N7jSsprq2F0CzJ2eTiewINOnRXS2l6kVfsPY+0gsgEXEipcwcpiByl5Vzgy6dH?= =?us-ascii?q?pKR/KG/TQUhTcijyLmFiVLG/tqCFY8JV75MoqypXWvymYV+GUr79vwca0yT7Em?= =?us-ascii?q?taxTA7bC2qtozinxNkjGKdLXBzrGfWeMxr3hff/N3cRfhQ3jUaXyl0kz/XCUag?= =?us-ascii?q?P9Ox59Wbi4/DsvyiV2KmTpBTay7rzYeEtCSl/21lHRq/nv6ol938DAg1zTT728?= =?us-ascii?q?NtVSXSoxb2epPr2LiiMeJ7YkloA0fx69JgFYFjlos8nosf1WIBiZWS+XoHjWDz?= =?us-ascii?q?MdNA1KL7cHYNQzkLzMLP7AjjxkJjMmqDx5jlWXWF3sthe966b3sV2i0j6cBKE7?= =?us-ascii?q?yZ7L9akitzuVq4qxzeYeRnkjca0/su52YQg/sVtwo10iWdHrcSEFFGPSzqihuF?= =?us-ascii?q?9M6+rKNKa2ava7Sw0lRxncy5BrGYvg5cQGr5eoslHSJo9sVwKk/M0Hno5474ed?= =?us-ascii?q?nQcdISugSakxjaiehZMpUxluAFhSB/I2LyoWUly/InjRxpxZy6ppWIJHh28aK2?= =?us-ascii?q?Bx5ZOSf5Z8UN9THxlaxehNqZ35izHpV9HTUGRIPoQui1EDIWq/vnLxyBEDsgqn?= =?us-ascii?q?iFA7rSBhKf6Fx4oHLVCJCnLWqXJH4EzdV4WBaSOkJfgAcOXDU1gJE1DAaqy9L9?= =?us-ascii?q?cE1h/DAe+kb4qgdQyuJvLxT/XH3QpAG0ajczTZiSNxRW4R9f6EfSK8yR9PpzHz?= =?us-ascii?q?tf/p2jsgOCNnCbax5PDWETVUyOH0rjMaW25dnc7+iYAfKzL/7UbrWKrexRSeuI?= =?us-ascii?q?xY613YR85DuMMNuAPmV5D/InwEVDRW52F97fmzoRVywdjzjNYNKDpBeg5i13qd?= =?us-ascii?q?iy8O7xVAPh/4ePDqFdMdFo+xG2mqqMLfKfhCNjJTZfzJMMymfCyKID014KlyFu?= =?us-ascii?q?az6tHKwOtS7XUq3fh7RXAAQdayNvM8tI9Lkx0RNRNs7ekN/10aR4jvEtAVdfSV?= =?us-ascii?q?Phgt2pZdANI2ylMlPHHlyENKyeJTDQzcH3YLm8SaZMjOVath2wvyyUE0n/MTSC?= =?us-ascii?q?jTbpUwqjMeZWjCGUJBZeop2ycg5xCWj/S9LrcgW7P8FsgjIox700h2/KNWkHPD?= =?us-ascii?q?h9bUxCsKOf4TlfgvVlFGxL9mBlIvWcmyaF8+nYLY4bvuBwDShzk+Ja4W86y6dO?= =?us-ascii?q?7C1eX/x6hjfdosR1o164lumPyzxnUAdBqztQmI2KvV9iObjC9pVaV3fL5g4N7X?= =?us-ascii?q?6XCxQMvddlDcfvu69IwNjViK3zMCtC887T/cYEHMjbMtyHP2AuMRX3Az7ZFxAF?= =?us-ascii?q?QiS1NW7FiExSjuqS+meTrpcktpjmgIAORaNDVFwpCvMaDVxoE8cDIJd4WTMkl6?= =?us-ascii?q?WWg9MW6nWlrRneXsNasorAVvKIDvXlMCyZgqVcZxsU3bP4KpweOZf020N4dFl1?= =?us-ascii?q?gp/HG03IXd9TpC1haxU7oERJ8HdlSW0y1FjpagS34H8cDfS0hAI5ihNiYeQx8z?= =?us-ascii?q?fh+0s3Jl3PpCcqikkxntTkji6XcDHqNqewWp9ZCynvukctNZP7Rhp6YhepnUx4?= =?us-ascii?q?LjvEQaxej6d4f2BxlADcoYdPGeJbTaBcYx8RxfWXaOsz3FRZrSWny0FH6vXZCZ?= =?us-ascii?q?t+lAsqdpusoGxa1wJlctE1ObTaJLBVwVhImqKOoiio2/g3wAAAPUkN9HifeC0P?= =?us-ascii?q?uEwTKrkpPSyo/vdv6QyDgTdDfnYDV+YyqPJw6kw9I/iAzz7n07NbMEC+KfefIL?= =?us-ascii?q?2DtGjaicGIQkg92VgJl0lf4Ld21skjc1KOV08xzLqdDRIJOtTeKQtNdcpd6GDT?= =?us-ascii?q?fTqSseXK2Z96IoK9FubuTeCTqqkUhkOkER0zEIsS9MQBGYOg0EbCLcfoNLQF0w?= =?us-ascii?q?ki5Bz3JFWZC/REYA+Eny0Zo8G+0ZB3xpJQKSsHAWVnNiW26K3XqRE2j/qeRtc2?= =?us-ascii?q?Y2saX4seOnIwRsK6hzZTv25cAzmvzuIZ1A+C4ifhqSTLEjbzddVjZO2OahNyE9?= =?us-ascii?q?y24i8w86uriV7N6JrSPWX6NclkutDV8+MWvoqHC/RXTbh9tEfQgY9YSGK2U2TX?= =?us-ascii?q?C966O4Dwa5UwbdzzEnu6Vlu/iygrQMf3PdetKbOFgQ7uRYZJqoWb2yojNcClHD?= =?us-ascii?q?EEBxhwv/0D5L57ZQAbeJo0fxrotwU4N6yiLwaVycmhQ2GoKTRKVfZf1vm6a6ZR?= =?us-ascii?q?zyUycu+w0GEgQY0iz+mr7U4NQ4kHjhLExfejfYZeVzTzGnxGdgXAoio5j3RuOv?= =?us-ascii?q?w0wugh3BPCqUMcPCyTdOx1dGxEuMkxBU+TIXVzDWo4W1+cjIrY7wGx3rAT/zFS?= =?us-ascii?q?kM1O3e1Drnf+oofVYCiwV6yztZXVry0gYMA8rK11MIzsPtWJu4vbnj3fSpnQtQ?= =?us-ascii?q?uFXzShGvVBm9hfOiRYTOBGmWE4I8AGv5RO6VYpXMckO7NPELUspqytaTd8FiEd?= =?us-ascii?q?0ykZWpia0zMfnOezxaHalgyKf5Q4MB0IqpJCgsESUyRueCMRuLejV5nKl2+DUm?= =?us-ascii?q?ULLxoT7QVI5AIEiIBwe/vo75fWQ5BXyj5ZufR0XjHMFply+FvxUnuWjkTgSPW9?= =?us-ascii?q?j+yp2hpfzOjq0tkaRBF/CU9dx+JNlkUwMb95NrMes5LNvDKTaUz6u2ftx/e8K1?= =?us-ascii?q?lK1c3YbVv4A5TZtWDkSC0T5WUURZNTyHHYDZkSiRB2aLwspFpXO42mZlz+6CY6?= =?us-ascii?q?x4t3G7m4VMarx1khrXYHSCeqE8ZBC+98v1LNXT1peZarp4v5O59KWG9f5IWdq0?= =?us-ascii?q?tFkEVqKyO4x4BQJN1N4j4NWThPoC+SvNipRc1Cx8B5EYEDLs14u3fnF6NOIIKR?= =?us-ascii?q?rGEuurzz1n/Z/Cgxv02gxDWuHa+0VeFZ8nYfGgUoJmSetlIgA/Eq8mjM7lDHqk?= =?us-ascii?q?p08PtDBriTkUVxpy5wHpFIBjZVy3+lK0p8THxYvOVGMqTUc9dRQ/4qZRCxPRw+?= =?us-ascii?q?EOQp302N/U5vmnf4bDZ+tgxA+yDSRwM0TzUagq/xmT0CrcGqITAaS4hSYjUncy?= =?us-ascii?q?fIMAObmSdZvRZZd0FqW44WAtdD+7EHw4RU5NDOSUCyJiEZRBZiLB430eJDlU5f?= =?us-ascii?q?t0WVYTzdDQ2tdfvUrh17YcKRo9WzIPT/4ghHlpvtsPok+KUbW32mhQqtTMjer4?= =?us-ascii?q?DmrN2FrE+Oe7rjPuKhf3DBVCDMgg60hbg6FZnG5S/TMBBUK5Ni03orfYDhCXLX?= =?us-ascii?q?PRRBP68bJU1bWr5hZNpbvO9afNFreLwV+aBzGx2LXBXvF5KzrPNeNFbcWSzeLz?= =?us-ascii?q?md8uy4uY/c9rLdRvT8asGO2nrKTbl6MYt96Tn+B7jly5Re+lbs1vdr6Ex6VUDM?= =?us-ascii?q?Mzqdo9T5OgML+M6ie1P4vpI3ADzWAI1/kGb2y0FEcMoXXTOl/IoEx5Ne9Xn/V/?= =?us-ascii?q?h00k7tv+1O77Nk85U446h1yceoIqffMexasVR7AheOGwpq6o4gAHN4R2BMeO8e?= =?us-ascii?q?NOnefaIFjcD0se/3E7Yb6BqP++xWcdHHPV3OmtGjCjGAThxJhBsBqSQEIQSCyv?= =?us-ascii?q?GIgLJ0ScK5pejjwE0t/Vm+LhkCzL9z+YeI4K2IpPXYbxHJ17gLRrDqRt/vrrQr?= =?us-ascii?q?o06S5+crlKQJemxuZw2oCvYdW9UYxmf9yaAq0SMsHN/CH736/v5DTGg1njX6m5?= =?us-ascii?q?ByB18WAO8bHaKX/YRCmWc1g+7ZOccQcqBMgGaPEgOrHaEZxH638SSXJnJlghbU?= =?us-ascii?q?3xH2X2yz8Ef8rTVkTivU09fjjk1VW6GxBUdWRCepOEl4sDaVMArpstr3t74141?= =?us-ascii?q?stMmz4rtKNiXeuOK9KH83lOtOQOy40pEgYjJcpXNygxZgbGcahINcW6Hx+aPre?= =?us-ascii?q?5H+sky9FuahHnJDS4sCS+vXQBnmglLaXq7CCyTFX0HQ4uks/6t+4PPHU+9KKW+?= =?us-ascii?q?io13oWTypnpwTORRq1paLAr1AIOU2L11zGmJcWMdFYw3Y40F3m5Ok5T94p8gVR?= =?us-ascii?q?CJrAbesYpT/vIDv03UqfY9UvWymayDtXG1L4HEJ2GKcixW3wu9jJmm3I+10yQY?= =?us-ascii?q?lwdVLoigBrD4kiLkIt8lcXyDIZEQcRcRCbEK2oBUP9IIsGVEgDbA+K3L2kdaY3?= =?us-ascii?q?w0Jz2LKv5OncbeBmAaoCKOpdhBaUnFdHApIWrbEeQLVkdl9c9a/YvBLtBJT8Uv?= =?us-ascii?q?j9i3UwKeO6TdxA/cAerXsi7R61RwC85pdb87YblJeIe7ZfbpjNp8B94V1o5TwO?= =?us-ascii?q?dixRmBhwlQ65UeQHqe//5djUrYSn5fyzVKY3QOUX7QI7C355j5vqj1ApucvX2P?= =?us-ascii?q?tESo3JlYT/9xhAI2aQt4bGzxZ8KeQPK4WxfLZj7nkHPDYRJ3YPPdqQdvk97DRg?= =?us-ascii?q?MC3J6FxeHswMZd0ZPM3XmQBXkEHpW69c9tDdGlCGD4d/bcco73D4yDot65szTv?= =?us-ascii?q?7g6COqJZDY91xNI+lDgztolN3Youga3+HfBzUW4XmWahh13jmNy4KXBPbq4OWA?= =?us-ascii?q?0tfUWE0aHiQuSYdSOCKC+RC7RuqyjJjpXRmb6tXtj5IidEKdXXixnKUZsqlSEe?= =?us-ascii?q?5PkDj73iNEGoDzmf2Vr8Km6HFLuV1fDIZz8RrFFb1QPpplPxT4is6rRk97Civk?= =?us-ascii?q?Zs7UchsuuOyLxuYD+Oh+M1XxZZUbIx0e0b7672RaThd2Qr7solmZRf4RZMdhSP?= =?us-ascii?q?7csn9V65hvJLMUMVeBo5zqqjNIqFEoDw8zdL8/sCBVdknUkA1SQab0t6YKihEA?= =?us-ascii?q?Xt5hpU9MBWWwNXo75zrAU6RVkKaRB+IO/zWWT6wBSUNoPT1iQxK735VuYbipne?= =?us-ascii?q?tdvmNAgCx9vOAg0yZ6SxukpS3su6UN1Cov+L6krzUBomVJQPiRnSnOCFVDyukK?= =?us-ascii?q?jKgHBnbt7Fyzen8DY5Xo7LlgP8Tg+pEr424jbhU7Yy0GQeOgBjnyj6OPAoyPts?= =?us-ascii?q?hQiwKNuMXKcL+8MCkTNrU7yRL4RHh90xPTnAhp8GsVWDqg6MIrJISnNcYj2CWo?= =?us-ascii?q?BXDRdEwQ7aNRrMvxqVkLQfM3aVN/2mpj1NOKRikQRMPSGmY1iRMkZX9DcJJZ5h?= =?us-ascii?q?8QD7MojSqQvqla4gEUZy/ZEoa79Ynek8fI3WIwTNlwyWLQuKKFmokm0Ht7lNNo?= =?us-ascii?q?9iSOomgdd/TEU89wBXj+zohfyej5Z/SjrO8HTI9mxa+6UP8FNMmj+He51I9sWk?= =?us-ascii?q?C72rQUB0C5P/MbxrfHTyelTnWVWeaLc2mMhzY5NUry5Ri0LlIpc8pKqk49MvfY?= =?us-ascii?q?hpFCjQHhVql0RiqIr1/B0GMjKf8adx4xuIq/ZwwKTesRavOAJegv3PI+C0UDb3?= =?us-ascii?q?vTEStwFeC2rUannJJnNHV4/UX6fePt/xjjMNuTGRkEEonao4Vz+fOgRWKBPnlg?= =?us-ascii?q?wwN0PEVu8efQCUgxvPdGc5mNhdjQm8h70ekdevh2LyI9vMITl5l46YmQ18eKbQ?= =?us-ascii?q?3RzojsKt7IuPSYBOffz0sycGFATrUZeR/155k9PtMhQ73TGr9Zsg4GBak0R5wh?= =?us-ascii?q?M2nx+bpxLAN0dQ7Rf6q7jdXwpuKMfZtUvH7W7lQ/LCvGvB0D0PO0RxRhb5+2n3?= =?us-ascii?q?XyPIwwRjVZot1jFBRmGIpPG9seoAe8Ap+UmaS7i9qv9ENgv+8Fr7D8CvfQ1NS2?= =?us-ascii?q?x49xRYRV5VSXPDbNA6lmmkpkjvyogvfBzpb+F9jvedYFVOhnWG7KdKXKHoKlKj?= =?us-ascii?q?KBIsj8YVJJ86aA0LJlVRWcfCf5X66YuyC/LPVk5V80ypdkfOrS0DMt86vb18Xs?= =?us-ascii?q?aG1BoCess2KJPoNF7FPWHezeQw5USf2d/WZhHK0Xa5b09egXPdwmwdic+BVz7C?= =?us-ascii?q?9Z3cuEOaehqEjM1lh8dZLBI0vjwzw5VpUSIBSjLUsshnfUqm/DDnRYL8ikL9Rt?= =?us-ascii?q?gdmSAhLi+0lxmX8iZnRfFWrwX9icImsb1NykZA2M6g1LC80Mn/O4eUIisa2yU+?= =?us-ascii?q?ZoMI1fmeq2rLUHjcppKybXSchfJS7fML92PjtXDuXIv1UofB8Es74rVYcxZJiO?= =?us-ascii?q?Jl4HMUiaxSP11wvC3lX+d8aw26aRPCYW7nJHwqrH0TdWpAm5vu2Wj9b+ULDfcJ?= =?us-ascii?q?H2XPnSMDcqVjGaWTQ+C0Cp9km4u/AcpvqXPX8fokwIYiKVEAMTqbpgosPKDm/S?= =?us-ascii?q?h+JjeIYHhO6eWy/qUy14lbcyCjxNtU+SX/oJDRPWYGP5gGpApAyiIedB/XDgb7?= =?us-ascii?q?2f3KpVQe0WApBXf/2fWdTYfO5RJzYymjUeIua8cMXWr6wl3VLQUWsZD67I+UWF?= =?us-ascii?q?TE6YR/yT2zPmUIYOsogqpCUo4NPQny5wE6TOJbqfoSCh8pLrxBqf7PbTUmgrfl?= =?us-ascii?q?wdnPMJAG7HxgJJbm4DFYI7okboF4KJYQ5uyWgmhOR1k0sAcQJyX3ls+nhbmPK0?= =?us-ascii?q?HMpJD1UTiTX9E7U9cFlrAWZorgex6QrobIlF4Jje?= X-IPAS-Result: =?us-ascii?q?A2EiYQBSKxJZ/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgwE?= =?us-ascii?q?pYoEMjnSQYoILAZVxJQOCSoglVwEBAQEBAQEBAgECaCiCMyIrVAEBAQEBAQEBA?= =?us-ascii?q?UwxPAYBAiRVAwkBARcIKQgDAVMZBRaIOoFMBLRzOiYCinuIPY1nBZAigQGMYoc?= =?us-ascii?q?cgzOITIJXiECGUpRAWIEKTyEVhHYBQxyBZnOGOSuCEAEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 09 May 2017 20:51:56 +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 v49KptsW005451; Tue, 9 May 2017 16:51:55 -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 v49Kp0It149464 for ; Tue, 9 May 2017 16:51:00 -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 v49KoxAm005169 for ; Tue, 9 May 2017 16:51:00 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B7AgDVKhJZf4GlL8FdHAEBBAEBCgEBgyyBC4EMjnSQYpgBJIJKgzYChUQBAgEBAQEBAhMBASFdhRYDAydSEBgIMVcZG4g6gVC0cjqKcAExiD2NZwWQIoEBjGKHHIMziEyCV48SlEBWgQtPIRWFOhyBZj02hjkrghABAQE X-IPAS-Result: A1B7AgDVKhJZf4GlL8FdHAEBBAEBCgEBgyyBC4EMjnSQYpgBJIJKgzYChUQBAgEBAQEBAhMBASFdhRYDAydSEBgIMVcZG4g6gVC0cjqKcAExiD2NZwWQIoEBjGKHHIMziEyCV48SlEBWgQtPIRWFOhyBZj02hjkrghABAQE X-IronPort-AV: E=Sophos;i="5.38,316,1491278400"; d="scan'208";a="6046336" Received: from emsm-gh1-uea10.corp.nsa.gov (HELO emsm-gh1-uea10.nsa.gov) ([10.208.41.36]) by goalie.tycho.ncsc.mil with ESMTP; 09 May 2017 16:50:59 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3ARQLTWhdPR9Cw6OyKNym6t60vlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcu/Yx7h7PlgxGXEQZ/co6odzbGH7Oa4ACdZu8bJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBe7oR/NusULjoduN7g9xxjUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU063/chNBug61HoRKhvx1/zJDSYIGJL/p1Y6fRccoHSWZdQspdUipMCZ6+?= =?us-ascii?q?YYQSFeoMJeZWoZfgqVUArhWwAgujBO30xzNUmnP7x7E23v49HQ3a2gErAtIAsG?= =?us-ascii?q?7TrNXwLKocX/q6zK/VxjvHcvNWwzj955bOchA6vPqBWq9/ftDXyUkuCQzFileQ?= =?us-ascii?q?pJfgPzyL0uQNt3KU7+xnVeOgkWIotwZxoj22y8oql4LHiIUVylXe+iV4xoY4Pd?= =?us-ascii?q?i4R1RjYdK+EZtQsSeXPJZ1TMM6W2xkpSI3x7MctZO0fiUG0okryh/fZvCdboSE?= =?us-ascii?q?/BbuWeCMKjlinn1lYqiwhxOq/Eig1OL8Us603U5PriVbltnMsmoC1xrU6smIUP?= =?us-ascii?q?dy4kCh1SyO1wDX8u1EIEY0mrTHK5M537I9kpQevV7MEyL0gkn6ka6be0U+9uS1?= =?us-ascii?q?9ejqZq3qppqGOI91jgH+PL4umsu6AekgLwcBRW6b+eWi273n/030W7BKgeMykq?= =?us-ascii?q?ndqp/aI8Mbp6GjDwBJ1YYj7g6zDy2639QAgXkHMFVFdQqcj4f3P1HOIfb4Deqw?= =?us-ascii?q?glm3jDdqx+zJPr3mApnXKHjDi63ucaxy605b1gpghexYsolZDrAHPeLbRl76tN?= =?us-ascii?q?ueCAQwdQOz3bXJEtJ4g68XXyqtH7WWPaXJ+QuE7+QuLu2OTIoYvDL0Lf81ofXp?= =?us-ascii?q?iClqyhcmYaC10M5POziDFfN8LhDcOCK0jw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0ESPQBSKxJZf4GlL8FdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwGBC4EMjnSQYoIMlXUkgkqDNgKFRAEBAQEBAQEBAgECEAEBIV2?= =?us-ascii?q?CMyIBKlQBAQEBAQEBAQFMMTwDAydSEBgIMVcZG4g6gVC0czqKcQExiD2NZwWQI?= =?us-ascii?q?oEBjGKHHIMziEyCV48SlEBWgQxPIRWFOhyBZj02hjkrghABAQE?= X-IPAS-Result: =?us-ascii?q?A0ESPQBSKxJZf4GlL8FdHAEBBAEBCgEBFwEBBAEBCgEBgwG?= =?us-ascii?q?BC4EMjnSQYoIMlXUkgkqDNgKFRAEBAQEBAQEBAgECEAEBIV2CMyIBKlQBAQEBA?= =?us-ascii?q?QEBAQFMMTwDAydSEBgIMVcZG4g6gVC0czqKcQExiD2NZwWQIoEBjGKHHIMziEy?= =?us-ascii?q?CV48SlEBWgQxPIRWFOhyBZj02hjkrghABAQE?= X-IronPort-AV: E=Sophos;i="5.38,316,1491264000"; d="scan'208";a="6821802" 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-uea10.nsa.gov with ESMTP; 09 May 2017 20:50:58 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 9 May 2017 23:50:54 +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 v49Koor2031538; Tue, 9 May 2017 23:50:54 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH 2/9] libsepol: Add ibpkey ocontext handling Date: Tue, 9 May 2017 23:50:35 +0300 Message-Id: <1494363042-121766-3-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494363042-121766-1-git-send-email-danielj@mellanox.com> References: <1494363042-121766-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 support for reading, writing, and copying Infinabinda Pkey ocontext data. Also add support for querying a Pkey sid to checkpolicy. Signed-off-by: Daniel Jurgens --- checkpolicy/checkpolicy.c | 27 +++++++++++++ libsepol/include/sepol/policydb/services.h | 11 +++++ libsepol/src/expand.c | 9 ++++ libsepol/src/libsepol.map.in | 1 + libsepol/src/module_to_cil.c | 39 ++++++++++++++++++ libsepol/src/policydb.c | 47 ++++++++++++++++++++++ libsepol/src/services.c | 59 ++++++++++++++++++++++++++++ libsepol/src/write.c | 16 +++++++ 8 files changed, 209 insertions(+), 0 deletions(-) diff --git a/checkpolicy/checkpolicy.c b/checkpolicy/checkpolicy.c index 534fc22..0f12347 100644 --- a/checkpolicy/checkpolicy.c +++ b/checkpolicy/checkpolicy.c @@ -22,6 +22,7 @@ * * Policy Module support. * + * Copyright (C) 2017 Mellanox Technologies Inc. * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003 - 2005 Tresys Technology, LLC * Copyright (C) 2003 Red Hat, Inc., James Morris @@ -699,6 +700,7 @@ int main(int argc, char **argv) printf("h) change a boolean value\n"); printf("i) display constraint expressions\n"); printf("j) display validatetrans expressions\n"); + printf("k) Call ibpkey_sid\n"); #ifdef EQUIVTYPES printf("z) Show equivalent types\n"); #endif @@ -1220,6 +1222,31 @@ int main(int argc, char **argv) "\nNo validatetrans expressions found.\n"); } break; + case 'k': + { + char *p; + int len; + struct in6_addr addr6; + unsigned int pkey; + + printf("subnet prefix? "); + FGETS(ans, sizeof(ans), stdin); + ans[strlen(ans) - 1] = 0; + p = (char *)&addr6; + len = sizeof(addr6); + + if (inet_pton(AF_INET6, ans, p) < 1) { + printf("error parsing subnet prefix\n"); + break; + } + + printf("pkey? "); + FGETS(ans, sizeof(ans), stdin); + pkey = atoi(ans); + sepol_ibpkey_sid(0, 0, p, len, pkey, &ssid); + printf("sid %d\n", ssid); + } + break; #ifdef EQUIVTYPES case 'z': identify_equiv_types(); diff --git a/libsepol/include/sepol/policydb/services.h b/libsepol/include/sepol/policydb/services.h index 9162149..2d7aed1 100644 --- a/libsepol/include/sepol/policydb/services.h +++ b/libsepol/include/sepol/policydb/services.h @@ -188,6 +188,17 @@ extern int sepol_port_sid(uint16_t domain, uint16_t port, sepol_security_id_t * out_sid); /* + * Return the SID of the ibpkey specified by + * `domain', `type', `subnet prefix', and `pkey'. + */ +extern int sepol_ibpkey_sid(uint16_t domain, + uint16_t type, + void *subnet_prefix_p, + size_t splen, + uint16_t pkey, + sepol_security_id_t *out_sid); + +/* * Return the SIDs to use for a network interface * with the name `name'. The `if_sid' SID is returned for * the interface and the `msg_sid' SID is returned as diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index 54bf781..c45ecbe 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -4,6 +4,7 @@ * * Copyright (C) 2004-2005 Tresys Technology, LLC * Copyright (C) 2007 Red Hat, Inc. + * Copyright (C) 2017 Mellanox Technologies, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -2217,6 +2218,14 @@ static int ocontext_copy_selinux(expand_state_t *state) return -1; } break; + case OCON_IBPKEY: + n->u.ibpkey.subnet_prefix[0] = c->u.ibpkey.subnet_prefix[0]; + n->u.ibpkey.subnet_prefix[1] = c->u.ibpkey.subnet_prefix[1]; + n->u.ibpkey.subnet_prefix[2] = c->u.ibpkey.subnet_prefix[2]; + n->u.ibpkey.subnet_prefix[3] = c->u.ibpkey.subnet_prefix[3]; + n->u.ibpkey.low_pkey = c->u.ibpkey.low_pkey; + n->u.ibpkey.high_pkey = c->u.ibpkey.high_pkey; + break; case OCON_PORT: n->u.port.protocol = c->u.port.protocol; n->u.port.low_port = c->u.port.low_port; diff --git a/libsepol/src/libsepol.map.in b/libsepol/src/libsepol.map.in index 4042640..36225d1 100644 --- a/libsepol/src/libsepol.map.in +++ b/libsepol/src/libsepol.map.in @@ -6,6 +6,7 @@ LIBSEPOL_1.0 { sepol_context_*; sepol_mls_*; sepol_check_context; sepol_iface_*; sepol_port_*; + sepol_ibpkey_*; sepol_node_*; sepol_user_*; sepol_genusers; sepol_set_delusers; sepol_msg_*; sepol_debug; diff --git a/libsepol/src/module_to_cil.c b/libsepol/src/module_to_cil.c index ac095c3..db3f9c8 100644 --- a/libsepol/src/module_to_cil.c +++ b/libsepol/src/module_to_cil.c @@ -3,6 +3,7 @@ * Functions to convert policy module to CIL * * Copyright (C) 2015 Tresys Technology, LLC + * Copyright (C) 2017 Mellanox Technologies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -2583,6 +2584,7 @@ static int ocontext_selinux_isid_to_cil(struct policydb *pdb, struct ocontext *i "policy", "scmp_packet", "devnull", + "ibpkey", NULL }; @@ -2645,6 +2647,42 @@ exit: return rc; } +static int ocontext_selinux_ibpkey_to_cil(struct policydb *pdb, + struct ocontext *ibpkeycons) +{ + int rc = -1; + struct ocontext *ibpkeycon; + char subnet_prefix[INET6_ADDRSTRLEN]; + uint16_t high; + uint16_t low; + + for (ibpkeycon = ibpkeycons; ibpkeycon; ibpkeycon = ibpkeycon->next) { + low = ibpkeycon->u.ibpkey.low_pkey; + high = ibpkeycon->u.ibpkey.high_pkey; + + if (inet_ntop(AF_INET6, &ibpkeycon->u.ibpkey.subnet_prefix, + subnet_prefix, INET6_ADDRSTRLEN) == NULL) { + log_err("ibpkeycon subnet_prefix is invalid: %s", + strerror(errno)); + rc = -1; + goto exit; + } + + if (low == high) + cil_printf("(ibpkeycon %s %i ", subnet_prefix, low); + else + cil_printf("(ibpkeycon %s (%i %i) ", subnet_prefix, low, + high); + + context_to_cil(pdb, &ibpkeycon->context[0]); + + cil_printf(")\n"); + } + return 0; +exit: + return rc; +} + static int ocontext_selinux_netif_to_cil(struct policydb *pdb, struct ocontext *netifs) { struct ocontext *netif; @@ -2878,6 +2916,7 @@ static int ocontexts_to_cil(struct policydb *pdb) ocontext_selinux_node_to_cil, ocontext_selinux_fsuse_to_cil, ocontext_selinux_node6_to_cil, + ocontext_selinux_ibpkey_to_cil, }; static int (*ocon_xen_funcs[OCON_NUM])(struct policydb *pdb, struct ocontext *ocon) = { ocontext_xen_isid_to_cil, diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c index 7093b29..8b76c6a 100644 --- a/libsepol/src/policydb.c +++ b/libsepol/src/policydb.c @@ -18,6 +18,7 @@ * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003 - 2005 Tresys Technology, LLC * Copyright (C) 2003 - 2007 Red Hat, Inc. + * Copyright (C) 2017 Mellanox Technologies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -185,6 +186,21 @@ static struct policydb_compat_info policydb_compat[] = { .ocon_num = OCON_NODE6 + 1, .target_platform = SEPOL_TARGET_SELINUX, }, + + { + .type = POLICY_KERN, + .version = POLICYDB_VERSION_XPERMS_IOCTL, + .sym_num = SYM_NUM, + .ocon_num = OCON_NODE6 + 1, + .target_platform = SEPOL_TARGET_SELINUX, + }, + { + .type = POLICY_KERN, + .version = POLICYDB_VERSION_INFINIBAND, + .sym_num = SYM_NUM, + .ocon_num = OCON_IBPKEY + 1, + .target_platform = SEPOL_TARGET_SELINUX, + }, { .type = POLICY_BASE, .version = MOD_POLICYDB_VERSION_BASE, @@ -284,6 +300,13 @@ static struct policydb_compat_info policydb_compat[] = { .target_platform = SEPOL_TARGET_SELINUX, }, { + .type = POLICY_BASE, + .version = MOD_POLICYDB_VERSION_INFINIBAND, + .sym_num = SYM_NUM, + .ocon_num = OCON_IBPKEY + 1, + .target_platform = SEPOL_TARGET_SELINUX, + }, + { .type = POLICY_MOD, .version = MOD_POLICYDB_VERSION_BASE, .sym_num = SYM_NUM, @@ -381,6 +404,13 @@ static struct policydb_compat_info policydb_compat[] = { .ocon_num = 0, .target_platform = SEPOL_TARGET_SELINUX, }, + { + .type = POLICY_MOD, + .version = MOD_POLICYDB_VERSION_INFINIBAND, + .sym_num = SYM_NUM, + .ocon_num = 0, + .target_platform = SEPOL_TARGET_SELINUX, + }, }; #if 0 @@ -2782,6 +2812,23 @@ static int ocontext_read_selinux(struct policydb_compat_info *info, (&c->context[1], p, fp)) return -1; break; + case OCON_IBPKEY: + rc = next_entry(buf, fp, sizeof(uint32_t) * 6); + if (rc < 0) + return -1; + + c->u.ibpkey.subnet_prefix[0] = buf[0]; + c->u.ibpkey.subnet_prefix[1] = buf[1]; + c->u.ibpkey.subnet_prefix[2] = buf[2]; + c->u.ibpkey.subnet_prefix[3] = buf[3]; + + c->u.ibpkey.low_pkey = le32_to_cpu(buf[4]); + c->u.ibpkey.high_pkey = le32_to_cpu(buf[5]); + + if (context_read_and_validate + (&c->context[0], p, fp)) + return -1; + break; case OCON_PORT: rc = next_entry(buf, fp, sizeof(uint32_t) * 3); if (rc < 0) diff --git a/libsepol/src/services.c b/libsepol/src/services.c index 03fb120..39903d1 100644 --- a/libsepol/src/services.c +++ b/libsepol/src/services.c @@ -21,6 +21,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 Technologies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1910,6 +1911,64 @@ int hidden sepol_fs_sid(char *name, return rc; } +static int match_subnet_prefix(uint32_t *input, uint32_t *subnet_prefix) +{ + int i, fail = 0; + + for (i = 0; i < 4; i++) + if (subnet_prefix[i] != input[i]) { + fail = 1; + break; + } + + return !fail; +} + +/* + * Return the SID of the ibpkey specified by + * `domain', `type', `subnet prefix', and `pkey number'. + */ +int hidden sepol_ibpkey_sid(uint16_t domain __attribute__ ((unused)), + uint16_t type __attribute__ ((unused)), + void *subnet_prefix_p, + size_t splen, + uint16_t pkey, sepol_security_id_t *out_sid) +{ + ocontext_t *c; + int rc = 0; + + if (splen != sizeof(uint64_t)) { + rc = -EINVAL; + goto out; + } + + c = policydb->ocontexts[OCON_IBPKEY]; + while (c) { + if (c->u.ibpkey.low_pkey <= pkey && + c->u.ibpkey.high_pkey >= pkey && + match_subnet_prefix(subnet_prefix_p, + c->u.ibpkey.subnet_prefix)) + break; + c = c->next; + } + + if (c) { + if (!c->sid[0]) { + rc = sepol_sidtab_context_to_sid(sidtab, + &c->context[0], + &c->sid[0]); + if (rc) + goto out; + } + *out_sid = c->sid[0]; + } else { + *out_sid = SECINITSID_UNLABELED; + } + +out: + return rc; +} + /* * Return the SID of the port specified by * `domain', `type', `protocol', and `port'. diff --git a/libsepol/src/write.c b/libsepol/src/write.c index e75b9ab..fa1b7d1 100644 --- a/libsepol/src/write.c +++ b/libsepol/src/write.c @@ -16,6 +16,7 @@ * * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. * Copyright (C) 2003-2005 Tresys Technology, LLC + * Copyright (C) 2017 Mellanox Technologies Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1410,6 +1411,21 @@ static int ocontext_write_selinux(struct policydb_compat_info *info, if (context_write(p, &c->context[1], fp)) return POLICYDB_ERROR; break; + case OCON_IBPKEY: + /* The subnet prefix is in network order */ + for (j = 0; j < 4; j++) + buf[j] = c->u.ibpkey.subnet_prefix[j]; + + buf[4] = cpu_to_le32(c->u.ibpkey.low_pkey); + buf[5] = cpu_to_le32(c->u.ibpkey.high_pkey); + + items = put_entry(buf, sizeof(uint32_t), 6, fp); + if (items != 6) + return POLICYDB_ERROR; + + if (context_write(p, &c->context[0], fp)) + return POLICYDB_ERROR; + break; case OCON_PORT: buf[0] = c->u.port.protocol; buf[1] = c->u.port.low_port;