From patchwork Wed May 17 18:54:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9731797 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 10A9E6022E for ; Wed, 17 May 2017 18:55:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E5AAD286E5 for ; Wed, 17 May 2017 18:55:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D98BD287DC; Wed, 17 May 2017 18:55:19 +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 (smtp.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 C0F54286E5 for ; Wed, 17 May 2017 18:55:18 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,355,1491264000"; d="scan'208";a="5876225" IronPort-PHdr: =?us-ascii?q?9a23=3A+1jiwxVQcMr4Svn2by16R2lxLHzV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYYhWFtadThVPEFb/W9+hDw7KP9fuxBipZvt3Y6yhKWacPfidNsd?= =?us-ascii?q?8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3wOgVv?= =?us-ascii?q?O+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIhi7qQfcutMLjYZgJao91xXErmdVcO?= =?us-ascii?q?lK2G1kIk6ekQzh7cmq5p5j9CpQu/Ml98FeVKjxYro1Q79FAjk4Km45/MLkuwXN?= =?us-ascii?q?QguJ/XscT34ZkgFUDAjf7RH1RYn+vy3nvedgwiaaPMn2TbcpWTS+6qpgVRHlhD?= =?us-ascii?q?sbOzM/7WrYhNZwjKZGqxy/oRJxzZPfbIWMOPZjYq/ReNUXTndDUMlMTSxMGoOy?= =?us-ascii?q?YZUSAeQPPuhWqIvyp1UWrRa8GAWhCv3gyiRTi3PqwaE3yfgtHBva0AA8Gd8FrX?= =?us-ascii?q?TarM/yNKcXSe27wrPHzTPeZP1SxDf98ofIfQ4nofGXQLl9dtfexlMpFwPEkFqQ?= =?us-ascii?q?rY7lMiiQ1usTt2ib6/BvVeSoi28osQ1+vj+vxsI1h4TPm4kbyUjE+D1kzIs6Kt?= =?us-ascii?q?C0Uk52bcO+HJdOuCyWKZF6Tt46T211vCs3xKcKtJG5cSQQ1Zgqxh7SZ+aaf4SW?= =?us-ascii?q?5h/uUvuaLy1ii3J/Yr2/gg6/8U2nyuLhSMa5yE1Kri9ZktnUsXANygDT5tCHSv?= =?us-ascii?q?Rj+keh3i6C1xzJ5eFeIEA0iLHbJ4Q9wr8wipUTsUPDEjXwmErql6+Zal8o+u2p?= =?us-ascii?q?6+Tjernmp5mcOJFoigzmL6gjlcOyDf44PwQTRWSX5+ux2KP58UHkWLlKi+c5kq?= =?us-ascii?q?jdsJDUP8Qboau5DhdO0ok97xa/DjGm0MkXnHUeN11Ffw+Hj471NF7QO/D1Fuu/?= =?us-ascii?q?glSwnzdrwPDKJLvhAo7XIXTZn7fheqh951ZGyAUv1dBf+45UCrYZLfLxXU/xss?= =?us-ascii?q?bXDgM5MwOuxebqE9d91oQYWWKKGKCZK7/SvkGS5uI0OeWMY5UVuDnlIfg/+/Hu?= =?us-ascii?q?lWM5mUMafaSx35sXamq3EehlI0WCZnrshNYBEXkRswowSOzqlVKDXiVOZ3a0Q6?= =?us-ascii?q?I8+ys3CIW8DYfMXoqtmqCO3D+nHp1KYWBLEkiMHmnzeIqaXfcMaT6SIsh6nzwF?= =?us-ascii?q?S7euVZEu2QuptA/gxLptNvDU9TEAtZL/yNh14PXemgw19TxyCcSSzn+CT2V1nm?= =?us-ascii?q?4TXTA5wrp/oUtnxleEy6h4jORSFcZP6PNRTgc6KZncwvRnBNDuQA3BZMyER0qh?= =?us-ascii?q?QtWjHT4+VMkxw8MUb0Z7BdqikgjJ3zC2DL8Ni7yLGJs0/7rd33j3O8Zy1XLG27?= =?us-ascii?q?ckj1Y4XstPL22ni7V49wjLGYHJlUCZmLyrdaQYxyHN82iCwXCJvEFCXw56Sb/F?= =?us-ascii?q?UmwHZkvKsdT54VvPTr+vCLQgNAtM0suCKq9TZt3oi1VKXvHjN87EY2KymmewGw?= =?us-ascii?q?iHyqmKbIX0Z2UXxD/dB1QckwAP4XaGMhAzCTm5o23EFjxuFEnvblj08eZksnO7?= =?us-ascii?q?T1Q0zxmOb0J7y7W65AQZhfuGS/McxrgEojsuqy1oHFah2NLbE9SBpwtlfKVZf9?= =?us-ascii?q?w9+kxK1WzHuANgOZygNbpthkYEcwRwvUPhyQl4CplancgttnMqwxJ4KbiE31NZ?= =?us-ascii?q?azOYwZfwN6XZKmno5h+vbbLZ2lDF0NuN/6cP8PU4p0z4vACnDUou6XJn08Na03?= =?us-ascii?q?GE/JXFEBISUY7tUkYw7xV6pKvVYio654PJznBsMrO7sjzF29I0HuclzQygf9hH?= =?us-ascii?q?OqOeCADyC9EaB9SpKOEygVemcwgEPOFM+64uJM6pbeeJ2KuxMOZnhjKmgnxN4J?= =?us-ascii?q?ph3UKU6yp8VunI0o4ZzP6C2guISSz8jEuhs8Dwgo1Efi0dHmuhxijiGI5RZ7d9?= =?us-ascii?q?cZwNCWiwP8293s9+iIL1W35E6F6jAEsL2NSneRqIaFz9xhFQ2F8MoXyhniu5wT?= =?us-ascii?q?l0nCsvrqaF2izB3fjifgIdOmFXXGlikUvsIY+sgtEURkeoaxQpmwW/5Ubh3KVb?= =?us-ascii?q?urpwL3PITkdVeij6NWZiUrG/trCaec5A9IsosTlLUOS7eV2aVqPyrAYb0yz5G2?= =?us-ascii?q?tT3yw0dzavuprlhRN6k36dIGx1rHXHZcF63Q3f68DERf5NwjoGQzF1iSfWBleg?= =?us-ascii?q?I9mp+s+Um43fveC+UGKhUJJTfDLvzYOBsiu0/3dqARqlk/C0gN3nHhAw0TXn2N?= =?us-ascii?q?lySSXIsBH8b5Hv16S7KuJnYlBkBETi5Mp+G4F+lJYwhZ4L1HgBnpWV/HwHkWbv?= =?us-ascii?q?PtVAw67+amQCRSITyd7P/AflwFFjLm6Ox4/hTHWdxc9hZ92kbWMMxi096M5LBb?= =?us-ascii?q?yP7LxZgSR1uUC0rQXLYfhyhj0d0+ch6GYGg+EVvwog1j2dDaoPHUlcJyDjjQ6E?= =?us-ascii?q?4Mu5rKVTeGavdr6w2VF7ndy9CrGCpR1TVGz/epg8AS969t9/P07U0H3v9oHkf8?= =?us-ascii?q?HdbdENuR2SiBfNlOtVJ4w3lvoRgypoJ379sWciy+4hghxkxYu6s5SfK2Vx4KK5?= =?us-ascii?q?BQZVNiXvaMMO/jHik75ekdyQ34CzAJphAC4GXIbzTf22CjISru7rNx2JED0hsH?= =?us-ascii?q?eUBaTQHQGY6Ed8oHLADYqnN3eJK3kF1d9iXgWSJFRDgAAIWzU3hoA5Fga3y8H6?= =?us-ascii?q?bkd54C0e5l7iphtK1O1oKwH1Un3Dqwewdjc0VJ+fIQJO7g5Y+kfVNdeT4f5yHy?= =?us-ascii?q?FE/pyttQKNJXadZwhSCmEJQEOEDUj5Pray/dnA7/SYBu2mIvvNYbSOrfJRWuyN?= =?us-ascii?q?xZKo3Itm8SiDNtmTPnliCP0731RMUWp/G8vHhzUFUzYXmD7Vb86HuBe8/TV6rs?= =?us-ascii?q?6l//TtRALv4o6PBqBcMdpx5h+2hr2DOPSIhCZjLjZY1I0DymPUyLQF214SkS5u?= =?us-ascii?q?fSG3EbscrS7NUL7QmqhPAh4Bdix8KdBF76053ghCI8LbjM361qJghP4vF1hFTU?= =?us-ascii?q?Dhmt2uZcESOWGxLl3GCFyONLucIT3LxMH2bLimRrJMieVYrRqwuSyUE0X7JDSM?= =?us-ascii?q?iyHpVwyzMeFLlCybMgZet5+gfRZ2E2fjSs7mahqgMNJslzI53bg0imnNNW4GPj?= =?us-ascii?q?h2a1lNoaGI7SNEnvV/HHRM7nx/LeaegyaZ9/LVKpgXsftxGSR0i+xa4HU8y7RP?= =?us-ascii?q?6iFLWP11lzHWrtJ0pFGmiOaPwCJ9UBVSsjZLmJ6LvUJ6NKrE7ZlPR2zL/B0X7W?= =?us-ascii?q?qKFRQHvMBlBcfsu6BN0NjAjrj/KDNf89LS58QcHdHYKN6AMHoiMRvpHyTYDA0b?= =?us-ascii?q?Qj63LWvfnVBSkOmO9n2JqZg3sp7smJsKSr9fSlM1DegXBV57E9wYJ5d7RDQkka?= =?us-ascii?q?SUjMQQ/3qxsAHRRNlGvpDATv+dGvTvKDmejblCfBYH3K33Ip8SNoLh3UxucF56?= =?us-ascii?q?nJ7FG0DIR9BCvjVhbhMooEVK6HVxVGIz1Fj7agyz+3ITEua0kQAwigt7e+st9T?= =?us-ascii?q?Ps7EwwJlvFvicwl1Mxmdr9izCLbDHxNLuwXZ1RCyfsq0gxNZb7TxxvbQ21nE1r?= =?us-ascii?q?KjHESKlLj7tna29rixTRtodIGf5ZUaJLegQQxe2Na/Uuz1tctj2txVVb6uvdFZ?= =?us-ascii?q?tiiAwqfIaqr31ewQ1jaMU4Ja/XJKpS0lhfnKSOvjSr1uAw2gMeIVgC8H+Kci4S?= =?us-ascii?q?pEMILqUmJzav/uF08wyNhSBDd3YWWPowvv1q9lgwNP+BzyL6zrFDLU6xN/SFL6?= =?us-ascii?q?yHu2nMj8iITU0s1kkQjUlK4aB20ds/c0qTT00g0aGeFwoINcXfMgFYdNBd9GLJ?= =?us-ascii?q?fSaJv+TN2ox6MJmgFuDyTO+OqKYVjliiHAk3A4QG9t4BEYW00EHEMcfnK6YIyR?= =?us-ascii?q?Eq5ATxOlqFCvVIeBWQnTcIpcG/0YV73Y5HJjESGW99Kzm45q7Lpg82h/qORMw2?= =?us-ascii?q?bWkeXosFMHI2RcK7ljVFsHRHCTm4zvgWyBOe7zPmoCTfEiX8ZcJ5ZPiIfRNsFM?= =?us-ascii?q?22+TIn/qerlVHX95LeJ2fmNdh/odLP9/0Vp4yGC/JVSrl9tV3Qm49GSHy2S2TP?= =?us-ascii?q?C8K6J4Dsa4kwatz5EnW6Uka/ij0vScfxINatI7OHgQHvXYZbrJOX3DY9Os+hDj?= =?us-ascii?q?seAQt/p/kf5KJgYg0Oe4Y7YR/ttwQ5K6y/IAeZ386zTGasKTpZVeJQwf+8Z7NJ?= =?us-ascii?q?0yomdvW6x2c4TpEm0+m39lYARJ4Qjh7Ew/aje5JTUSn0Gn1TfQXPuSo5mHZgNu?= =?us-ascii?q?Y03ucw3gnIvUMaMz+VaOxjcHZEsM0kBVOOPXV2DXI1SEWYjYrC/gGjwagd/y5d?= =?us-ascii?q?ntZS1u1FtmLxs4TEbzKtQqOrr4zZsyQ9bdQ8pa1+L5DjKNOctJzChjzfUIXQsg?= =?us-ascii?q?qdXSGhCfVanMNdLzhFT/lWh24lI9cGtpBb6UsxTMs+IKZPCKY0rLCwdTVkFTIS?= =?us-ascii?q?zTMeV46YxjwChOa81KfalheXdJQiKwQKvoxfjNUHTyN4ZTgTq7OkV4XTi2CLUH?= =?us-ascii?q?MLIBsJ4QRK+g0Aipd6fvr574rQUJ9M1zlWrupoXSvJDJZn60D2RX2RgVj8TPWh?= =?us-ascii?q?kvKm3RhOzP3yztYbWARzCU9Hx+ZZjkEoMq14K7EMvo7WtT+FbVn6s3j3yOuhP1?= =?us-ascii?q?Zc0tHUd0fiA4rbq2X8Viwc+XsbRY9LyXHfGpQSkxZ3aKkxvlVMJZqqekDg6Dw4?= =?us-ascii?q?345pBaW3Vdi3x1Y5qnYLXymrH8BdBOFmsVLXXTxlbIqoqJj+OpVdXHFf94OHp1?= =?us-ascii?q?deikVtPDazyYBAJMFV/j4MQD9PrC2FvNu1TM1Mw9V2DpELItd7tXfwA6ZEOJ+W?= =?us-ascii?q?o30tpLPg1mXZ+zcnsFehxTWzHaC4Q/he/20EFQUjP36epVU3D+sw7mfS9UjAvU?= =?us-ascii?q?pu/+dGALiDl0ZxrS18HpBPBzZJyWuqI051THZYr+VQML7VfNBEQ/kueR+vPAQz?= =?us-ascii?q?FeIh30yM5kx0gWv1YylpuQdA/SDSQRU0XzEPgrjxgT0ett2nOTgCRpJIdzohdT?= =?us-ascii?q?3KKwaGli1MoRlQdVlqW4gHDdZB5b4bx5FY/s3YSUajMSsFRgBtNhok0fpDkk5O?= =?us-ascii?q?qEeYeSfDAgezaPnArAZ3ctmLrM61Mvv24R1LioX5v+Ak768DXWGpmRWxQdDCqI?= =?us-ascii?q?/xrsaFtkWSe6vkMeCwfHHMQSPQghC3gLcrE4PF/zPPMAZBLZl112Yka4D7CWHX?= =?us-ascii?q?JRRGO74bJ01DWKBgd9pJv+BaaNV4eKsS/a9tAQyHSQ3xFIOzq/lJM0jcSS7YLy?= =?us-ascii?q?qf7uy1uZjT4qDFSej8esyMwG7KQ7psPpdm8zb0Bqvq3JRF+krxx/dt7F91RkbA?= =?us-ascii?q?MyCdttTuPAcL6NOldkv4sZ0jBSnWD4tokHrx2kFAcNIaQzGw8JsG1pxW9W39Sf?= =?us-ascii?q?980kjvqu1d7adk6Ygw47Bt18i0Ob3eKfNAsU9oGhKUHBll9o0xAGhjQGBceuoR?= =?us-ascii?q?J+3VfaQdk8/ut/z3GLYN5xCO/exWd8fHJ1rdlcalEjGTVwZInAEfpj4GNgGcze?= =?us-ascii?q?KKm7doSca5ouj0wkAt7EKkLh4B17Bt4Z2L+rSTqe/SchvRyaQEWqn2ScPytLss?= =?us-ascii?q?vViS6ecjlL4UdWx/exenH/QFVs4B2mfgyrgnzSA2HMPFEbLg4vlDWG8nkT/7h5?= =?us-ascii?q?ByBVMWGugTHbaR+4RRgHs4kfTDNtIKaqBChnqPFRm8H78N1H6r6i+XIG17jRHL?= =?us-ascii?q?yBz/XH2840T3rSBiRyvA1dDjklBaVrOvH0ddQzKpOVNksDOIJAfost73tL807E?= =?us-ascii?q?EwN2zortONlG2vOLNNBcL/P8CcITMppF0LkJ0xW8av1p4BFdq6OtcR/2l0buHC?= =?us-ascii?q?5GOzjy9Bv6BHipLb4sGS/PXXAXaggLOBprWIxTBX0H44sk8j6tGuMfHO/d6KQ+?= =?us-ascii?q?+y22YXUSh/pxPLXwSppbzDs1AUJUuL3V/PmIwRO9FU3WI11k/46+c+R9Iz7h9R?= =?us-ascii?q?Fp7aZ/MFpzD8Jif7wUqFb9IwTCme3CNdHkjpHllgBKg8xGXwsdrSlXjK5V0nXI?= =?us-ascii?q?ZweFL8hRFsFIU3M1wt50IYwiUdCggBcxabA6+0BU79N4sLSVADaQib3Li9Yqo3?= =?us-ascii?q?30xzwra06e/Wc+N9B7QCNuxcjg6Ik1hXAJQWvrMCQLhkYV9S6LbXphT+C4jgR/?= =?us-ascii?q?XmlHsxOuevTc9G6s0ZrGUt4hqhSBW885tD6KwbiJ+QfK5efZfMpNx871tg5TMX?= =?us-ascii?q?bSNNgQN/jh2jXuAepeDj/sDbv4C16uaqT6siW+IX+AUqCGtkkpvwmlcjocvN2O?= =?us-ascii?q?tGTY3Vk4v/+hhXI3GWoIbazwV8Ke0WJoKzZrlg62kIJygQJnIJJ9qWaOAw4zRz?= =?us-ascii?q?PzXX5lxCBN4MZNwDMcrVgw9UllHmWLFd98rcAF+YCJ1/d8M24GrtzjA67588Xv?= =?us-ascii?q?zn6D+sKpDV90tNMO9bjCVwiNLCo/AYwebICCcJ5XmWcR51zT2ZxpaQCvbw8uSM?= =?us-ascii?q?yM3OWFMdBCE2SZpdKCCE+QO5Wuq/jI/pXR+M6s/vnJI+c1qdRnOrk6QfrKlMDe?= =?us-ascii?q?5Ahz7/3jhfCoD6mfKVvMCx6GtMrFFHFph87QHdEqVFIpp7IQj4ltWsRkVkCSvw?= =?us-ascii?q?ZsfUdgYpuOqRwesM+PtxN0//ZY8dPxIFxKn36X5LQQt0SL/5pEyVXeQPa9t6UP?= =?us-ascii?q?nEtGxa6Zp8K68TO1iQvJrqrjZUp1AxBA8mcqQwoiZbdknJmw1VQL30taUFigYT?= =?us-ascii?q?Xt91o0hMGXi/OGgm/TrISbxVjLWNCPwS6jiTQbABU15zMi9nXh2715Nge7qvnf?= =?us-ascii?q?BavWJLhSx9oP0w3DxgWhSwoyrsp7gC2Tg44rG3qC0BuWBZTuWZiyrIC1JDzPQM?= =?us-ascii?q?jasGF3ni6Vi8YGQeY4rz4blnI9/g9Yog43kkfxUjfjMGUv6kCy7tjqOEGIqPv8?= =?us-ascii?q?xAhBSVosXBcaezLTQONrQ60R/jRmZ93RLYnBtz9GsLXyiv7N4jJIWmI8olwTCo?= =?us-ascii?q?GWfDflYW/qxJqNfxtUIMTOYua1Nu3mtj0saDRiAWSs3AAWA1gRY4aWledpJM9w?= =?us-ascii?q?MaHbEygjmUpqlG4h0UYDDMH4Sq/onQmsnJ1mc5Tddu3W/WvaqFhpUr0HJ5gd90?= =?us-ascii?q?6DCBuGgKfezCT8BsGmTz1ptYyeHmZfWtsuAGSJNhyLSlUf8CLtes9HCz2JVrRk?= =?us-ascii?q?+l3KoRE0C+MO8ZybfRSz2lRnGAWeSXb2iMmC40MlLz5RmtNVA3dMZKoFM+MuTc?= =?us-ascii?q?gp5QjQvhXq1oRi+Iv1/U0HQjMf8GdwIxoIqnfg0KTO0SZ+ibPuUuwucxCFgLb3?= =?us-ascii?q?/PAyR2DfW6sVizk4hnI39g+1n1Yfzx8gD6N9ufAgILHpDcrp5t4vG6XWaBOXh8?= =?us-ascii?q?zB1uIkl76frQG042tu9GfJabhcLQiMhj0e4Za/dtNjUwutANlYJn6ImUyNmFfA?= =?us-ascii?q?rQz5bzINHVp+aXA+fbz0s0YG1aVaAZYQzt7YUgItE5Q6HTHadevRkEC6k6WIYh?= =?us-ascii?q?N2bt+65qNw5zdw/RZKiugsb0vO6LYYFUp3DO5FIqMCjcowEDyuCzTQFjaJCqg2?= =?us-ascii?q?v9LYsoRjJFtdJtEQdmHIpTFMMctQqoHYCblLu9i9Cv50Nwo/UKvrboCvDWyNS5?= =?us-ascii?q?2J18X5xb5UyNITbQC7BngkBkjuSpnvfAyYL8CcL4dtMCU+h3WGnFaqXJHo+nMD?= =?us-ascii?q?KBJtr8e1Ja876byL95SQueZCT4X6qAqS2lO/Jo70onyox4YuXT1iIi76nB19bp?= =?us-ascii?q?ZGFUuD2jrXiXO5tb91PKGOPeUwhTSfqf/2ZvBbcXYpfs9OcSLdwix8CR4wxp4z?= =?us-ascii?q?te0MuFIq6hrkjX10JldJLbKlXm2yI4WYkMPRS+PlEggWjDqnTSGX5cNNSrKdFx?= =?us-ascii?q?gNaJCRzg/0txlnsuZm5GAWXlXsqROW4H28K+Yw2K6Q1LD9Yfn+Ktf043qLGyQ/?= =?us-ascii?q?FyOppZgeWqqKkHkdFxJi7UX8dWOCXQLL5tPjpNFeXDvkMobQAYvLQvQYc6e5yO?= =?us-ascii?q?IEIBMEedxiL/1hfN0E3ud9yxz6aFOigX/W9bz7Le1jhMoRO1ufGDgs3sSLrZdo?= =?us-ascii?q?35XObOMCo5UTGXXTsyHlyy9le+uvoLov6YLHwBolAQeC2SEw8Tpr11odjWEGDT?= =?us-ascii?q?hfVpfIcWi/CCRyDwVCp4mbIwBiZOskCMWeADFQjNb3L6hmpTogmiKeFN/X7/aL?= =?us-ascii?q?2Y3KVVUfQMAoRQav2ZX8fYefdGKjczmDUZPfqzctzforsizFLHU3EZE6jJ9V2Z?= =?us-ascii?q?Sk6aWPqcyCz3XdZdg49hoScs+9TNjgdrAq/IOPCZvDfo/Ymm3wiCvuiLemArK2?= =?us-ascii?q?4omu0PBnLJlBVJLmAJD9M9vUzpRqeGYFYK33Us37E9kyQQcRh+ByU9mkZdm+yw?= =?us-ascii?q?T4gAEVM=3D?= X-IPAS-Result: =?us-ascii?q?A2F7AgAWnBxZ/wHyM5BcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwEpgW6OeJB0mAAli2RXAQEBAQEBAQECAQJoKIIzJIJCBgECJFUDCQEBF?= =?us-ascii?q?wgpCAMBUxkFiE+BTwSudDomAosPiD2HaIYIBYlGhmCBAYxpkx2CAoU8g1qGU5R?= =?us-ascii?q?GWIEKTyEVRoQzAUMcgWZziGcBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 17 May 2017 18:55:14 +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 v4HIsqd9009134; Wed, 17 May 2017 14:54:57 -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 v4HIsobV052532 for ; Wed, 17 May 2017 14:54:50 -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 v4HIsoLE009132 for ; Wed, 17 May 2017 14:54:50 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CxAwBomxxZ/4GlL8FcHAEBBAEBCgEBgyyCF454kHSYBByGCAKGNgECAQEBAQECayiFGQYnUhAYCDFXGYhUgVOucTqLBQExiD2HaIYIBYlGhmCBAYxpkx2CAoU8ii2URleBCk8hFUaEdxyBZj02iGcBAQE X-IPAS-Result: A1CxAwBomxxZ/4GlL8FcHAEBBAEBCgEBgyyCF454kHSYBByGCAKGNgECAQEBAQECayiFGQYnUhAYCDFXGYhUgVOucTqLBQExiD2HaIYIBYlGhmCBAYxpkx2CAoU8ii2URleBCk8hFUaEdxyBZj02iGcBAQE X-IronPort-AV: E=Sophos;i="5.38,355,1491278400"; d="scan'208";a="6056450" 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; 17 May 2017 14:54:49 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AlcK67BMkK2dYsynAWbwl6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0Lf78rarrMEGX3/hxlliBBdydsKMbzbOJ+Pm6BiQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5Y75+Ngi6oAfeusULn4dvKLs6xwfUrHdPZ+?= =?us-ascii?q?lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2465MvwtRne?= =?us-ascii?q?VgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVzmu87tnRRn1gy?= =?us-ascii?q?ocKTU37H/YhdBxjKJDoRKuuRp/w5LPYIqIMPZyZ77Rcc8GSWZEWMtaSi5PDZ6m?= =?us-ascii?q?b4YXD+QPI/tWoYf+qVUJrxS+CxKhCP/zxjJSmnP7x7E23/gnHArb3AIgBdUOsH?= =?us-ascii?q?HModv7LqgSV/2+wq3VzTXZYPNZxzH96JPVeR0mvP6DR7RwccvPxkkrFQPIlVCQ?= =?us-ascii?q?ppLhPzORzOsNtW+b7uV6We2zjG4nrhh8rz6yzckvkonEnp8Zx1TK+Cljz4s4J8?= =?us-ascii?q?e0RFN6bNOkCpdcqj+WOo9wT8g/WW9nojw6xacDuZOjfCgF1pAnxxnHZvyCbYeI?= =?us-ascii?q?5hbjW/yXITd/i3NpYq6whxGo/Uihzu3wTsi00FBUoSpZitTAq3QA2hLJ5sWISP?= =?us-ascii?q?Zx5Fqt1DeP2gzJ9+1IP0Q5mbLeK5E7w74wkpQTsV7EHi/zgEj5kbWZdkMl+ue2?= =?us-ascii?q?7+TnYK7rppqCOI9wjgHxKKIumsuwAOgiLgcOWG2b9fym1LL/5U35XKlKjvoun6?= =?us-ascii?q?nCrp/aIcUbpqikAw5ayYsj9xa+ACum0NQfh3UHKklFdwidg4jmPFHOPqOwMfDq?= =?us-ascii?q?mFmokTF219jaL7bhBdPLNXGFn7D/Lphn7EsJ5AM1hfJC/Z1ZDKpJdP76XE78sN?= =?us-ascii?q?7wCxI9NwWyxPahA9J4gNBNEVmTC7OUZfuB+WSD4fgidqzVPNcY?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0HnAgAWnBxZ/4GlL8FcHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwGCF454kHSYBByGCAKGNgEBAQEBAQEBAgECaCiCMyQBgkEGJ1I?= =?us-ascii?q?QGAgxVxmIVIFTrnQ6iwUBMYg9h2iGCAWJRoZggQGMaZMdggKFPIotlEZYgQpPI?= =?us-ascii?q?RVGhHccgWY9NohnAQEB?= X-IPAS-Result: =?us-ascii?q?A0HnAgAWnBxZ/4GlL8FcHAEBBAEBCgEBFwEBBAEBCgEBgwG?= =?us-ascii?q?CF454kHSYBByGCAKGNgEBAQEBAQEBAgECaCiCMyQBgkEGJ1IQGAgxVxmIVIFTr?= =?us-ascii?q?nQ6iwUBMYg9h2iGCAWJRoZggQGMaZMdggKFPIotlEZYgQpPIRVGhHccgWY9Noh?= =?us-ascii?q?nAQEB?= X-IronPort-AV: E=Sophos;i="5.38,355,1491264000"; d="scan'208";a="5876200" 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; 17 May 2017 18:54:46 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 17 May 2017 21:54:44 +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 v4HIseKN010220; Wed, 17 May 2017 21:54:43 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH 1/2] selinux-testsuite: Infiniband pkey tests Date: Wed, 17 May 2017 21:54:32 +0300 Message-Id: <1495047273-96339-2-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1495047273-96339-1-git-send-email-danielj@mellanox.com> References: <1495047273-96339-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 New tests for infiniband pkeys. Most users don't have Infiniband hardware, and if they do the pkey configuration is not standardized. There is a configuration file for enabling the test and setting environment specific test configurations. If the tests are disable they will always show as passed. Signed-off-by: Daniel Jurgens --- README | 9 ++ policy/Makefile | 3 +- policy/test_ibpkey.te | 23 +++++ tests/Makefile | 4 +- tests/infiniband_pkey/Makefile | 7 ++ tests/infiniband_pkey/create_modify_qp.c | 144 +++++++++++++++++++++++++++++++ tests/infiniband_pkey/ibpkey_test.conf | 14 +++ tests/infiniband_pkey/test | 45 ++++++++++ 8 files changed, 246 insertions(+), 3 deletions(-) create mode 100644 policy/test_ibpkey.te create mode 100644 tests/infiniband_pkey/Makefile create mode 100644 tests/infiniband_pkey/create_modify_qp.c create mode 100644 tests/infiniband_pkey/ibpkey_test.conf create mode 100644 tests/infiniband_pkey/test diff --git a/README b/README index deedae5..b64e2de 100644 --- a/README +++ b/README @@ -195,3 +195,12 @@ establish a base directory (based on the path of the script executable). This won't always be accurate, but will work for this test harness/configuration. $basedir = $0; $basedir =~ s|(.*)/[^/]*|$1|; + +INFINIBAND TESTS +---------------- +Because running Infiniband tests requires specialized hardware you must +set up a configuration file for these tests. The tests are disabled by +default. See comments in the configuration file for info. + +Infiniband PKey test conf file: +tests/infiniband_pkey/ibpkey_test.conf diff --git a/policy/Makefile b/policy/Makefile index 661f27a..ab58d3b 100644 --- a/policy/Makefile +++ b/policy/Makefile @@ -20,7 +20,8 @@ TARGETS = \ test_task_create.te test_task_getpgid.te test_task_getsched.te \ test_task_getsid.te test_task_setpgid.te test_task_setsched.te \ test_transition.te test_inet_socket.te test_unix_socket.te \ - test_mmap.te test_overlayfs.te test_mqueue.te test_mac_admin.te + test_mmap.te test_overlayfs.te test_mqueue.te test_mac_admin.te \ + test_ibpkey.te ifeq ($(shell [ $(POL_VERS) -ge 24 ] && echo true),true) TARGETS += test_bounds.te diff --git a/policy/test_ibpkey.te b/policy/test_ibpkey.te new file mode 100644 index 0000000..0ff6da4 --- /dev/null +++ b/policy/test_ibpkey.te @@ -0,0 +1,23 @@ +################################# +# +# Policy for testing Infiniband Pkey access. +# + +attribute ibpkeydomain; + +# Domain for process. +type test_ibpkey_modify_t; +domain_type(test_ibpkey_modify_t) +unconfined_runs_test(test_ibpkey_modify_t) +typeattribute test_ibpkey_modify_t testdomain; +typeattribute test_ibpkey_modify_t ibpkeydomain; + +dev_rw_infiniband_dev(test_ibpkey_modify_t) +dev_rw_sysfs(test_ibpkey_modify_t) + +# client can connect to the server via the socket file or via abstract sockets. +corenet_ibpkey_access_default_pkey(test_ibpkey_modify_t) + +# Allow all of these domains to be entered from the sysadm domain. +miscfiles_domain_entry_test_files(ibpkeydomain) +userdom_sysadm_entry_spec_domtrans_to(ibpkeydomain) diff --git a/tests/Makefile b/tests/Makefile index fb8a0aa..7dfe2a8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -4,13 +4,13 @@ export CFLAGS+=-g -O0 -Wall -D_GNU_SOURCE DISTRO=$(shell ./os_detect) -SUBDIRS:=domain_trans entrypoint execshare exectrace execute_no_trans \ +SUBDIRS:= domain_trans entrypoint execshare exectrace execute_no_trans \ fdreceive inherit link mkdir msg open ptrace readlink relabel rename \ rxdir sem setattr setnice shm sigkill stat sysctl task_create \ task_setnice task_setscheduler task_getscheduler task_getsid \ task_getpgid task_setpgid file ioctl capable_file capable_net \ capable_sys dyntrans dyntrace bounds nnp mmap unix_socket inet_socket \ - overlay checkreqprot mqueue mac_admin + overlay checkreqprot mqueue mac_admin infiniband_pkey ifeq ($(shell grep -q cap_userns $(POLDEV)/include/support/all_perms.spt && echo true),true) ifneq ($(shell ./kvercmp $$(uname -r) 4.7),-1) diff --git a/tests/infiniband_pkey/Makefile b/tests/infiniband_pkey/Makefile new file mode 100644 index 0000000..60f0d24 --- /dev/null +++ b/tests/infiniband_pkey/Makefile @@ -0,0 +1,7 @@ +TARGETS=create_modify_qp + +LDLIBS+= -libverbs + +all: $(TARGETS) +clean: + rm -f $(TARGETS) diff --git a/tests/infiniband_pkey/create_modify_qp.c b/tests/infiniband_pkey/create_modify_qp.c new file mode 100644 index 0000000..495ef5b --- /dev/null +++ b/tests/infiniband_pkey/create_modify_qp.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct ibv_qp *qp; +struct ibv_context *context; +struct ibv_pd *pd; +struct ibv_cq *cq; +struct ibv_srq *srq; + +void cleanup_ib_rsrc() +{ + ibv_destroy_qp(qp); + ibv_destroy_srq(srq); + ibv_destroy_cq(cq); + ibv_dealloc_pd(pd); + ibv_close_device(context); +} + +int init_ib_rsrc(char* deviceName) +{ + int ndev = 0; + struct ibv_device **dlist = ibv_get_device_list(&ndev); + struct ibv_device *device = NULL;; + struct ibv_srq_init_attr srqiattr; + struct ibv_qp_init_attr qpiattr; + int i; + + if (!ndev) + { + fprintf(stderr, "No IB devices found.\n"); + exit(1); + } + + for (i = 0; i < ndev; i++) + if(!strcmp(deviceName, dlist[i]->name)) + device = dlist[i]; + + if (!device) + { + fprintf(stderr, "Couldn't find device %s\n", deviceName); + exit(1); + } + /* Open context */ + context = ibv_open_device(device); + if (NULL == context) + { + fprintf(stderr, "Unable to open device.\n"); + exit(1); + } + + /* Allocate PD */ + pd = ibv_alloc_pd(context); + if (!pd) + { + fprintf(stderr, "Unable to allocate PD.\n"); + exit(1); + } + + /* Create CQ */ + cq = ibv_create_cq(context, 2048, NULL, NULL, 0); + if (!cq) + { + fprintf(stderr, "Unable to create cq.\n"); + exit(1); + } + + /* Create SRQ */ + memset(&srqiattr, 0, sizeof(srqiattr)); + srqiattr.attr.max_wr = 2048; + srqiattr.attr.max_sge = 4; + srqiattr.attr.srq_limit = 1024; + srq = ibv_create_srq(pd, &srqiattr); + if (NULL == srq) + { + fprintf(stderr, "Unable to create sreq.\n"); + exit(1); + } + + memset(&qpiattr, 0, sizeof(qpiattr)); + qpiattr.send_cq = cq; + qpiattr.recv_cq = cq; + qpiattr.srq = srq; + qpiattr.cap.max_send_wr = 128; + qpiattr.cap.max_recv_wr = 4; + qpiattr.cap.max_send_sge = 5; + qpiattr.cap.max_recv_sge = 4; + qpiattr.cap.max_inline_data = 512; + qpiattr.qp_type = IBV_QPT_RC; + qpiattr.sq_sig_all = 1; + qp = ibv_create_qp(pd, &qpiattr); + + if (!qp) + { + fprintf(stderr, "Unable to create QP %d.\n", i); + exit(1); + } + + return 0; +} + +int init_rc_qp(uint8_t port, uint16_t pkey_index) +{ + struct ibv_qp_attr attr = { + .qp_state = IBV_QPS_INIT, + .pkey_index = pkey_index, + .port_num = port, + .qp_access_flags = 0 + }; + + return ibv_modify_qp(qp, &attr, + IBV_QP_STATE | + IBV_QP_PKEY_INDEX | + IBV_QP_PORT | + IBV_QP_ACCESS_FLAGS); +} + +int main(int argc, char *argv[]) +{ + uint16_t pkey_index; + uint8_t port; + int ret; + + if (argc != 4) + { + printf("Please enter \n"); + exit(1); + } + port = atoi(argv[2]); + pkey_index = atoi(argv[3]); + + init_ib_rsrc(argv[1]); + + ret = init_rc_qp(port, pkey_index); + cleanup_ib_rsrc(); + exit(ret); +} diff --git a/tests/infiniband_pkey/ibpkey_test.conf b/tests/infiniband_pkey/ibpkey_test.conf new file mode 100644 index 0000000..ac4e9cc --- /dev/null +++ b/tests/infiniband_pkey/ibpkey_test.conf @@ -0,0 +1,14 @@ +# Enable(1)/Disable these tests +SELINUX_INFINIBAND_PKEY_TEST=0 + +# Infiniband device to use. +SELINUX_INFINIBAND_PKEY_TEST_DEV=mlx5_3 + +# Physical port on the device to use. +SELINUX_INFINIBAND_PKEY_TEST_PORT=1 + +# CSV list of pkeys indexes that should be allowed. +SELINUX_INFINIBAND_TEST_ALLOWED_PKEYS=0 + +# CSV list of pkey indexes that should fail. +SELINUX_INFINIBAND_TEST_DENIED_PKEYS=1,2,3 diff --git a/tests/infiniband_pkey/test b/tests/infiniband_pkey/test new file mode 100644 index 0000000..89d1a7c --- /dev/null +++ b/tests/infiniband_pkey/test @@ -0,0 +1,45 @@ +#!/usr/bin/perl + +use Test; + +BEGIN { plan tests => 2} + +$basedir = $0; $basedir =~ s|(.*)/[^/]*|$1|; + +my %conf; +my $confpath = $basedir."/ibpkey_test.conf"; +open($f, $confpath) or die ("Couldn't open $confpath"); +while($r = <$f>) { + if ($r =~ /^\s*#/ || $r =~ /^\s*$/) { next; } + chomp $r; + ($k,$v) = split(/=/, $r); + $conf{$k} = $v; +} + +if ($conf{SELINUX_INFINIBAND_PKEY_TEST} eq 1) { + $device = $conf{SELINUX_INFINIBAND_PKEY_TEST_DEV}; + $port = $conf{SELINUX_INFINIBAND_PKEY_TEST_PORT}; + @allowed_pkeys = split(/,/, $conf{SELINUX_INFINIBAND_TEST_ALLOWED_PKEYS}); + @denied_pkeys = split(/,/, $conf{SELINUX_INFINIBAND_TEST_DENIED_PKEYS}); + + foreach (@allowed_pkeys) { + $result = system "runcon -t test_ibpkey_modify_t $basedir/create_modify_qp $device $port $_"; + if($result ne 0) { + last; + } + } + ok($result, 0); + + foreach (@denied_pkeys) { + $result = system "runcon -t test_ibpkey_modify_t $basedir/create_modify_qp $device $port $_"; + if ($result>>8 ne 13) { + last; + } + } + + ok($result>>8, 13); +} else { + ok(1, 0); + ok(1, 0); +} +exit;