From patchwork Tue May 30 16:34:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9755095 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 CA524601D2 for ; Tue, 30 May 2017 18:21:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B820626C9B for ; Tue, 30 May 2017 18:21:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC52B26E56; Tue, 30 May 2017 18:21:48 +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 5582026C9B for ; Tue, 30 May 2017 18:21:46 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,419,1491264000"; d="scan'208";a="6201629" IronPort-PHdr: =?us-ascii?q?9a23=3AsJVKkxLrwTFi9wk/cdmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgQK/rzrarrMEGX3/hxlliBBdydsKMbzbaK+Pm6ASQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5Y75+Nhq7oAreusULn4duNrs6xwfUrHdPZ+?= =?us-ascii?q?lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2465MvwtRne?= =?us-ascii?q?VgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVzmu87tnRRn1gy?= =?us-ascii?q?gJLT459HzchNJ2gqxVvRmtowVzz5PIbI2QMvd1Y6HTcs4ARWdZXshfSTFPDI2/?= =?us-ascii?q?YYUIDeUBM/5Yoovgq1YAsxS+HhKhCP/zxjJSmnP7x7E23/gnHArb3AIgBdUOsH?= =?us-ascii?q?HModv7LqgSV/2+wq3VzTXZYPNZxzH96JPVeR0mvP6DR7RwccvPxkkrFQPIlVCQ?= =?us-ascii?q?ppLhPzORzOsNtW+b7uV6We2zjG4nrhh8rz6yzckvkonEnp8Zx1/L+CljwIs5OM?= =?us-ascii?q?e0RFB0bNK6CpdcqjmWO5ZyT84sWW1ltyQ3xqcbtZO6fCUG0okrywDbZvGBboOG?= =?us-ascii?q?+AjsVPyLLjd9nH9lfbW/iAus/kW40e38U9W00E5NripYjtnArnAN2ALX6siAUv?= =?us-ascii?q?Z94l2u2SyO1wDO8eFIO1w0lKrHJJ4hxb48jJwTvljYHiDqgkn2ia6WdkE89uip?= =?us-ascii?q?7eTofKnmq4eBO4J7hQzyKKQjltGlDegmPQUCQXKX9fmk2L3m50L5QbFKjvMskq?= =?us-ascii?q?netZDXPd8bqbC9Aw9U1IYj9hm+Ay6939QfgHkHKk5Kdwycj4XyJ1HPIOz3Dfe4?= =?us-ascii?q?g1i2ljdr3OrJMqfuApXKMHjPiK3hcqpl605A1AozyshS55BTCrEHOv3zRk/xu8?= =?us-ascii?q?beDhIiMQy0xODnCNBn2YMFRWKAHLWZMLjIvV+P/OIvLPGGZJUJtzblN/gl+/nu?= =?us-ascii?q?gGc7mV8fZ6amwZgXaGu/HvRgIkWZf2HhgtkFEWcXsQsxV/HqiFueUT5OfXqyWL?= =?us-ascii?q?g85j4jAoK8EYjDXpytgKCG3CqjEJxWZ2RGClWSHnfybIiEVekDZz+VIs97iDME?= =?us-ascii?q?TaKhS4gj1R6wqAD616BrLu3O+i0XrZjjzsR65/XPlREu8jx5F9mS3H2IT2FzmG?= =?us-ascii?q?MIWyI60bthoUNj0FeD0Kl5g/teFdBJ4fNGTBs6P4bGz+NmE9DyRh7BftCRRVm7?= =?us-ascii?q?XtWpGysxQ8ktzN8JZkZyB8+tjgvf3yawBb8aiaCLDoQu8q3Ax3jxO9p9y3He2a?= =?us-ascii?q?ghjlgmRc1POHajhq577gTTBojJn1+fl6mwb6Qc3y/N9HmdwmaUukFXThJwW73f?= =?us-ascii?q?XX8DfkvWscj55kTaQrCwEbQoKBFByc+ZKqZRct3ml09GRPb4ONTGZ2K+gXu/Cg?= =?us-ascii?q?iSyrOLdorqdH0X3D/BB0gcjwAT4XGGOBAwBie7uW3eCiBhFVP0Y0739Ol+sHK7?= =?us-ascii?q?QlYvzwCEdE1tzb21+gQahfaEUfMcwqoEuDs9qzVzBFu93MjZC9mHpwp8Z6hcYs?= =?us-ascii?q?ky4FRA1WLErQB9OYagL696jF4Ebwt3p1/u1wlwCohYi8clsWkqzAtsJqKCy15O?= =?us-ascii?q?bS+X3ZXqNr3QMGny8wila7TK1VHGzNaW5qAP5ewjq1XtpgGpEVEi82l83tlO1X?= =?us-ascii?q?uc4ZvLDA8IXpL3SEo38QZ1p63CaCkn+4zUzWFsMbWzsjLa1dMmHu8lygq+cNdF?= =?us-ascii?q?K6OJDxHyHNMAB8e1NewqnkKlbhUePOBd7KQ0Jd+pd+Oa2K63O+ZthC6mgnla74?= =?us-ascii?q?B8yE2M8zFxRfLP35YA3/6XxBCHVyvmgFenrM/3hZhOZSsOEWqn1SjkGIlRa7V0?= =?us-ascii?q?fYYKDWeuJ9O4xs5lipH3RXFY7lmjC0kB2M+zdhqYd0b90hFI1UQLvXynnjO1zy?= =?us-ascii?q?J1kz41sqqf2zbOz/7+exoHPW5LQmZigEzoIYi1idAVRlKobw8zmBui/0b6yLBR?= =?us-ascii?q?pL5jIGnLXUdIYy/2InlmUquxrbqCf9dD6Ig2viVTUeS8Z02aS7HmrhsByyPjHm?= =?us-ascii?q?1exDEneDGxoJn5mQJ1iH6FJnZpsHXZYd1wxQvY5NHEX/5R2T4GRC1mhjnNGle8?= =?us-ascii?q?ONeo8M6Pl5feru++THitVppJcSnk1YmArje05XV2AR2jmPC+gsXnHhIn0S//zd?= =?us-ascii?q?VlTz/Eow37Yonvy6S6NuRnc1JtBFPg7cp6HZ1xnpE2hJ4OxXgQno+V8mYfkWfv?= =?us-ascii?q?LdVb3rrzbHkTSj4N2N7Y+wvl11NlLnKSwYL2SGmdztFmZ9mgbWMcwjg94NxSCK?= =?us-ascii?q?eI8LxEmjN4okS+rQ3MevV9gDEdxuYu6HIAheEGphYtxD2HAr8OBUlYITDslxOQ?= =?us-ascii?q?4tCmtqpXeWKvfKOs20p/gdCgDKiOog9GV3b/YJsiGjVw7spnOlLWzHLz8p3keM?= =?us-ascii?q?XXbd8Lrh2biQrAj+xLJ5IpjPUKgzZnNnznvXA+1u47lgJh3YuhvISdMGVt+7+5?= =?us-ascii?q?AgREOTLracMT/SvtjalAkcqM2YCgAIlhEC0RXJT0VfKoDC4StfP/OgaACjI8rG?= =?us-ascii?q?ubGb3aHQKE5kdpsW/AE5exN36NPHkZ19JiRBuDK0NDnAAYRjI6noQ2Fgqy3szu?= =?us-ascii?q?bF955iwN5l7/shZMz/hnNx37UmjBuAeodi07R4KEIRpQ8A5C+1zVPtCE4eJrAS?= =?us-ascii?q?5U5JuhoxKRKmaDfQRHEXkJWlCYB1DkJrSu/8PM8uaCCuq7NfTOZbKOqOxFWviS?= =?us-ascii?q?2Z2v15Fq/zGWNsWAJnNiFeE02lJfXXBlHMTUgzsPSzYJmC3QdM6UvhG8+jFwrs?= =?us-ascii?q?Ck6/nkQh7g5Y6VB7tVK9Vv9Ai8gb2fOO6ImCZ5NTFY24sKxX/S0rcfxEYShjpg?= =?us-ascii?q?dzmsC7QArjLNTKzRmq9RFREbbT98NMpS4KI4xAVNPtTbitzt3L5ikvE1E0tFVU?= =?us-ascii?q?DmmsyxfcwFPXqyO03BBEaKKLSGIibGw8DpbqyiV7JcluJUtwe/uTyDCU/sIiyD?= =?us-ascii?q?lyX1VxCoKexDkTqbMwJEt4GyaBZiE3bjQcn9ahKhM993kCc2zqcuinPOKG4cNy?= =?us-ascii?q?Jzc1lUor2M6iNYgfV+G2tb4npjM+aEhz6T7/PEJZYOrftrHiN0mvpB4Hsg1bta?= =?us-ascii?q?9i5ES+JumCbJtd5huU+mnfOAyjV5SxpCsDBLi5yXvU96I6XW6oFAWWrY/BIK9W?= =?us-ascii?q?ifEBUKp9RiCt3poK1f18bAm7nyKDhY9dLY58wcB9LbKMifKnouLQLpGCLIDAsC?= =?us-ascii?q?VTOkL27fiFZDkP6M7XCVqYA6pYbqmJoLULBbVVg1GegdCkVqBtACJ413Xjw8m7?= =?us-ascii?q?6BkMEI/Wa+rAXWRMhCopDHUfeSDe/1KDaejLhLeR0IzqjiLYQUKIL72FdvZUV9?= =?us-ascii?q?nITPB0XfR8tNojF7Yg8yvkpN7GB0Tncv1EL9dgOt/HgTGOa3nh82jgtxf/8g9D?= =?us-ascii?q?Lr41c5KFrFujcwkFUxmdXihDCebiT9LKGuUoFKEyD0rVQ+MovnQwZpag2/hUpk?= =?us-ascii?q?OyneSLJVlLZgdmdriBTAuZRVH/5cVq5EYB4KyfGRefoozUxWqj+7yk9f+evFFZ?= =?us-ascii?q?ximRMwcZGytHJPxRhsbMQpKqzQP6dG1VlQhriTsS+v2OAx2BUeKFgN8W+Ifi4H?= =?us-ascii?q?plAIPKE8JyW05uxs9RCCmzxbdWcRUPoqpPRq+V4jNOSEziLtyKRMJV6rN+yYNa?= =?us-ascii?q?+ZvHLAlcGQSFMqykwIj1VF/aRx0co7bkWbTV4vzLqMGBQSLsfNMxtVb9BV9Hnd?= =?us-ascii?q?ZiaBr/nCwY9vP4W8CuDpTfWCtKAKjUK4BAwpBZgD7twdHpmw10HVNcPnLLkfyR?= =?us-ascii?q?oz4gTqJVKFAe9GeBKNjTcLuca/zIV43YNFPDESHX19MTmr5rbQvgIqm+SMXNM3?= =?us-ascii?q?YnccQ4sFOWk7V9G9my5co3tPFiK30v4DxAiE8TD8ujzaDCPgYNp7ePeUeRRsBc?= =?us-ascii?q?m1+TUl86m5k1jX8oneJ2zhOtRivcfP5v8Aq5aBFfxUUaF3s13AlIlAW3yqT2nP?= =?us-ascii?q?HMapJ5jxboksasD0Cna6U1Gklj01TsfwM8y2IaSShwHnW5pUupGB3D8/Lc+9Ci?= =?us-ascii?q?0eGxBoqu4Z4KJ8ZBEMbIQjbh7ttwU+Mau/IAGC3di1WGmtKCFZT/9GweW0erxb?= =?us-ascii?q?1SwsYfGmyHE4VJE10/G38VIRRJENlhzR3uisZ49FXCfpB3NdZRvApTAil2d7LO?= =?us-ascii?q?Yzwv0zwBTSsVkTKzqLbvBmaHRYv9EgAlOfOXp2Cnc5R1+YiYrM/Aus0qsP8CRD?= =?us-ascii?q?hNlU0PdKsH7ksp/YejKsV7ShqY/JvCo4cdgmv6pxPJT5IsuAtZPRgjzfTJ7Usg?= =?us-ascii?q?2eSCC0DudUlMJMLSxfW/RHhWYlOckatoVb8koxSt0yJ7pRB6kwvrqqcyZrDTYO?= =?us-ascii?q?zS8FUIONxCYCjfqh1LbBmReQdZsjPAYCsJpcntsXSzR2bT8GpK+/S4XWkHeJSn?= =?us-ascii?q?IRLwcJ6gRD/xkNlpNqfu///orHUptMyz9Qo/J7VivLF5Zo91vnSmGYm1f4UvCh?= =?us-ascii?q?n/av3Q1M0PLmysMbVwJnCUhB2+ZWkVMlKb9tJ6YMvo7KszqIdULgs2Lu0+amJU?= =?us-ascii?q?dextPKeFHiC4rFr2X8WDUG+XIIXY9P1G3fFZMKngVjcqYruVNMLJqlekvl5jwk?= =?us-ascii?q?xoVpH6WjWsyxwVYqs2oGTT+wE9VdE+FmrE7XWDp9bpCqrpXlJ4tdQmtO952YtV?= =?us-ascii?q?hZjF9tMi6ixJpbM8FC/DgMXD1VrjWcuNu9U8pD2MBsA58LONd/tG/3GLlYN5iJ?= =?us-ascii?q?v302prvvx2fW+zAmqli6wimzFrS5T+Je8WweHBkpJ2SApUkuCess7nnd8krXvl?= =?us-ascii?q?By4ehbGqCFjV9trzZlApBOGjFJ2Gi5L1R0SXlLqPlaJLjQc8NHWfUyYwGgOwAm?= =?us-ascii?q?H/48w0OJ5V10nWv+YyFqtgtV4TrdUBMwVSYImbrihCMRqtm/OTAET5JHcy8hYz?= =?us-ascii?q?3CKwKBliBdpAxfZF1yW5AFHtZF/KkW3YlT/sXcUkujND8KXAd8OQIizfpQi1NM?= =?us-ascii?q?vF+eeS/DEQqibezPvQFvfceNsM6pK+z08xxJioz7rOw19bgPSnO9lAKxRtDeqp?= =?us-ascii?q?PzuceRtkuSbqv4NfOzYWPZRjjWkR+wnaskD4XN/yXLKgpUNYR1yXo+bpj9EmPL?= =?us-ascii?q?ORNGJ7wFKEZFSa96bshJrf5Aa89iZqkJ5bdnBgibSRP3BIyvsP5GI07LRTTFMy?= =?us-ascii?q?WO6PGwoZ7I4LzGTujge9aMyGrZTKJxIpd68yP0G7Pw3Y9Z4Er21e9n9llmRlje?= =?us-ascii?q?LyCBsNPhKxsX5Mm4aETtoIAmECjLAJd0jHrt3FtPd9QWQy2t9JQX1o9Z5Gz3Se?= =?us-ascii?q?Ji3Uj5qPdS+KV86Ykr/7Bpzt+5JaXIJvRAtk9nGRyUCR909pg2BWh/WmRRYvMQ?= =?us-ascii?q?KPjNfKQWl8buq/vtG6wQ8h2V9PRTacHbKEHZhsm/FjacRARGnAgbrz4aIBGc1/?= =?us-ascii?q?mYlKBqUsulufL22kQ241i5NBIGyq5i5Zuc8KqSuODXdwfRzaQDWqXyQMPzqq8h?= =?us-ascii?q?u0KU5f0hjrIOe2p1YwO9EOcHTc4d2n3gzb02wiIwDsPDBazv9OREV3IjkTLqg4?= =?us-ascii?q?p9EEkOGvMIAbqL+pxTnmE5m+PFMd0WdrpNmn2VGR6lFb8CzmWr6zCMLWlgjRzP?= =?us-ascii?q?3Av8QWSp7F/5tSV4WzfDz8//kkpJUbm6HVtdUDCtOUBmqzOPIArptN3stKQu8E?= =?us-ascii?q?42M3LrtNSRlGugIrxbBcv/K8KAISMsvlIYkIUxRsCz2YAcAde9JMwR8HR+Y/bF?= =?us-ascii?q?5WOkjTJOo6Bdh4XE+sGV4PLXHXu+gKKGt7WB3jdYymI3vVsn8NCvKunO58GWQ/?= =?us-ascii?q?Svz2sRTSZ/uw7aUh6wtLPar04bOVaK0EfNl4wGJNdZ0mck1kv+/ugsXMoz9BlC?= =?us-ascii?q?FobHf/4CpDHyNyHuzlmDeN83TTeR0ydJEV3pC1V4H7I82G3otsLTiXjQ40EoRp?= =?us-ascii?q?V3d0H/nhN3Dp44KEw351gVwyoDDRANZgqGDLGsHknqMYwEWlUdZhudwbi6YKA3?= =?us-ascii?q?3Vdpzb+14+/Td+N8DbIXNvlBlg6OgERbGpUOvK0GWr18Z0NS9K7ZpwjlEYjnXO?= =?us-ascii?q?HqlWEuOv2xQ8Ba990ZtnQ57wanXRWg9YtM77YViZCPbK5EYoLAvMNi4Ed94z4A?= =?us-ascii?q?aChNjAJ4jxOjXuAWvPrj7cTDsJq09uauU74gR/kN9xcqA2RxlZ3wj044rN7K1u?= =?us-ascii?q?dcRYzViZjl/wBWOXGKopva3wN6KeUQN4KhZKxg+GkfJygCO3IOOsKba/Ym7C93?= =?us-ascii?q?LjrT+1xCD9gIZdMZIMrChwBUhVf0WLFI7MbbHEGXC5trfcAy82X30Cw18Yc7Uu?= =?us-ascii?q?v45z+5O5bf701KP/NEiylsj8zNpOwUwfrUFSgW7mKUaxxrzSOYy5iCEez8/eOS?= =?us-ascii?q?x9HIT1kGBDI5U59BJDqe/gyqXva6lJfzXQyI8cL8nJU+dEaURnywgqsFqLpMHv?= =?us-ascii?q?BchSX7xDReEZr1h/2Nudq29GRXrkFHEJp07RDdHaVfOZN7OQj3lsa1XUV8Ayr/?= =?us-ascii?q?d9vSdhUwpOqXyOAM4/99N0vlf4MbJAwLy67i43pPUgRuUKL2vkqeXe8Ja9tpVO?= =?us-ascii?q?jErmtM5Yx9JKEBOlmdpJr3rjZHs102DwopZ6U2rjNEbEXOmxdVW6nssr4algQc?= =?us-ascii?q?ScJ5uVNLGW+oOmI+4DrHVaJPgKaNCPwV9iiTQbEPUkVpNCN+WBC12JR1dru3nP?= =?us-ascii?q?BHrHlJnidgr/gryTBmQgWzuTH0raIXxT0g4K24tCkGuXFdT+WejT3HCVNYwfQO?= =?us-ascii?q?kKcTFnfi6VunYHUZa4vy+rZnL9z69YY9+3Q/fQkjfyoeUOSiFS7wga2IAoiUvd?= =?us-ascii?q?NSnhGNvtvBbaOpISgUKLs91QrpR2Jh3QjGgBZo7GwLTy2v7N8gI4W8N9gqxi6s?= =?us-ascii?q?GWXAb1YM5aVJsMrtulIRSus5d09hyn150sebXi0NWNDPG2EtgwgmaWVFcIpD6R?= =?us-ascii?q?geF6kpnjaHoLJL/gQVYDfICISq5JPcncDS2XkyVd1q3H7ZprWZhpM2131og890?= =?us-ascii?q?7i+LuHkJa+zYUtNjAnvt2Ydb0+D+YeuisvwfQot81LuhSOMCMtWk+Wau3ZVqW0?= =?us-ascii?q?ylxrcZH1eiMu8M3LTbUyCjSWKGX+SHaW6MkCglMkTq/xmnMkU3aNtWr086KubN?= =?us-ascii?q?nYBTlwv9Ub5vXSWQoVjbzHA/MeMEaQ05pZ2rewsQTO4ef+KcP/QhwOUiCFsQaH?= =?us-ascii?q?/EBTN2C+iysVG3hoh6NXJg4UH0Yen29wDmN9ySGgIaHoHGtJ5x/ue6RnmAOX9m?= =?us-ascii?q?wx1+Jk509/3QF14prO9Tb46RncTMh9R8yeMFeeliMSk8ut4LhI1u8oiV0MaPcR?= =?us-ascii?q?HU0JnyP9XVreaCD/3Y1UQqdXlQUqAFbgPt+4U6Itk5VqXdHLtBpxQcBLQ1T4I6?= =?us-ascii?q?Omf09aF0MBlzfRDLaLSzmMnqqfqBZoFIqH/O8lIwMCDctgUEyvywUwN2dIiqh3?= =?us-ascii?q?HoL5ArWjJBrsFiCgd8HIRRBcwMtQynDICImKujkd++51t6u/MWsar3Ev3K0NW5?= =?us-ascii?q?34NsX5lV/ECLODfRBLJ3gkR+lemyg+3P0p/2Cc/4ftMETud7SHbfarDaBoW/Ni?= =?us-ascii?q?6OOsXkdk5d7bGc1LN5UhOMZCH2WKaIuzGkNPV67kUh1IN4ZPDcwScu777Fwtvy?= =?us-ascii?q?YX9UpiO4on6UO5tT9lvKBfbRXxhMU/qK7H5lHbELbYvz7OoONMYtz8Sc4wly6j?= =?us-ascii?q?RC19CII7agrk/KxE17cZPbLE302yc2Q4UKJw6/MUQ0i2/DtnvdGWhcLtSjKcR1?= =?us-ascii?q?gtaaFB/t505qlmw2e25BHHboRdeWOWgG1MK+ZBGK+BhND9kdg+69YVQ4ubGqSe?= =?us-ascii?q?l0JpVFnv2nu64cntpuLyHPRdNaPz3LLLNsJTpeEPnAqEIzYhEat7g1W4E1ZYWB?= =?us-ascii?q?IU4cLEiByTnyzRbZ0UHued2jzrqJID0R8nVB1b7F1iJMpwahs/aDnsLjSKzZbI?= =?us-ascii?q?3xXPPKPyoqTCqVRS4zEUm3/VepoOQEvP6CLmcEo1AUfzieCAgNqaBztdLQFHPc?= =?us-ascii?q?mfV/fJ0Wg/CXQyLwSCh/lKooHCZLtFuMTuEFFQbMan/unmtctBalJv9W8nLvd6?= =?us-ascii?q?eYybZNW+wKHotMdeWUQ8DWefBbOzgllzYUNf2if9LCtbY501PJTWwfE6XS8l2R?= =?us-ascii?q?UlKWEbSgwGfwUIEUuZUkkjY58dLX2ClsGuLHOKjb7yWi6aaknS2YvqvYTWBrbE?= =?us-ascii?q?srxKoaCXSF6AFJNWVBDtYSokyrSamFNGhW03d8petokz0RYgt+VGYmhnFfmvew?= =?us-ascii?q?Hs9xTFMQiGqoR+1AZ1dyWmBjtXSW6xH/NIRT8fvYQHVTo/5VEYc=3D?= X-IPAS-Result: =?us-ascii?q?A2HhAQADty1Z/wHyM5BcGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgwEpgW+OfZB2mAQliFlXAQEBAQEBAQECAQJoKIIzJIJCBgECJ?= =?us-ascii?q?FUDCQEBFwgpCAMBUwcSBYhTgVIErjM6JgKLWIhBjXoFiUeGYoEDjHeTKoIEhTy?= =?us-ascii?q?DYAyGSZROWIEKUSMVRoQ/AUMcgWZzhxYqghMBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 30 May 2017 18:20:55 +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 v4UIISql002028; Tue, 30 May 2017 14:19:17 -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 v4UGZQO4050580 for ; Tue, 30 May 2017 12:35:26 -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 v4UGZQ9E022986 for ; Tue, 30 May 2017 12:35:26 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CpAQDhni1Zf4GlL8FcGwEBAQMBAQEJAQEBgyyCGI59kHaYCIYkAoMqAQIBAQEBAQITAQEhXYUZAwMnUhAYCDFXBxKIWIFWrm06i0wyiEGNegWJR4ZigQOMd5MqggSFPINshkmUTlaBC1EjFUaFAxyBZj02hxYqghMBAQE X-IPAS-Result: A1CpAQDhni1Zf4GlL8FcGwEBAQMBAQEJAQEBgyyCGI59kHaYCIYkAoMqAQIBAQEBAQITAQEhXYUZAwMnUhAYCDFXBxKIWIFWrm06i0wyiEGNegWJR4ZigQOMd5MqggSFPINshkmUTlaBC1EjFUaFAxyBZj02hxYqghMBAQE X-IronPort-AV: E=Sophos;i="5.38,418,1491278400"; d="scan'208";a="6071043" 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; 30 May 2017 12:35:20 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AZ35GWBNWWSo7LxMkR7cl6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0Lfr/rarrMEGX3/hxlliBBdydsKMbzbaK+PGxEUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6/bL9oIxi7ogrdu80SjIB/Nqs/1xzFr2dSde?= =?us-ascii?q?9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLY?= =?us-ascii?q?TQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVQTlgz?= =?us-ascii?q?kbOTEn7G7Xi9RwjKNFrxKnuxx/2JPfbIWMOPZjYq/RYdYWSGxcVchTSiNBGJux?= =?us-ascii?q?YYsRAeQcM+hWrI7zqFkArRalGQWgGPnixiNSi3PqwaE31fkqHwHc3AwnGtIDqH?= =?us-ascii?q?rao8/zNKwPVe610bPIzTrdYPNQwjf29Y/FfQ07rvGKXLJ/b87RyUs0GgPAkFqQ?= =?us-ascii?q?rYjlMCmT1uQKvGmX9fZvVeWqi2M+rQx6vzuhxt80h4XUgo8YxErI+Cp7zYovON?= =?us-ascii?q?G1SU52bcS5HJdOsyyXMZZ9TNk4TGFyoik6z6ULuZ6lcygOz5Qq3xvfZOKDc4iM?= =?us-ascii?q?+B3jUuGRIDhiiH15f7KznRey8Uy4xu39UMm7zkpKozJYntTIuH0BzRPe58qdRv?= =?us-ascii?q?dg/0qs2SyD2x3N5uxAOUw0kLDUK58lwr4+jJoTtkHDEzfrl0rsiq+Wd1sr+uyq?= =?us-ascii?q?6+n8Z7XpuJucN4tuhQH4NaQvldazDvg/MggLR2Sb4/iz1KX//U3lR7VHluY2nb?= =?us-ascii?q?fdsJDbI8Qbu6G4DhRJ0ocj9xm/DzCm3M4enXkcNl1JYh2Hj4/3OwKGHPetFvq7?= =?us-ascii?q?glKxgB931vvGOfvnGZyLIX/d1P/6ca1V919XyA11y8tWoZ1TFPVJOPvuXmfpvc?= =?us-ascii?q?HcSxo+NBa5he3gDYZTzIQbDE6GBOe7LbndvFmTrrYjKu+NaYsXkDPwL/ws4fn+?= =?us-ascii?q?y3Q+nAlOLuGSwZILZSXgTbxdKEKDbC+p249ZHA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0FOAQCJni1Zf4GlL8FcGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBgwGCGI59kHaYCIYkAoMqAQEBAQEBAQECAQIQAQEhXYI?= =?us-ascii?q?zJAGCQQMDJ1IQGAgxVwcSiFiBVq5sOotMMohBjXoFiUeGYoEDjHeTKoIEhTyDb?= =?us-ascii?q?IZJlE5WgQxRIxVGhQMcgWY9NocWKoITAQEB?= X-IPAS-Result: =?us-ascii?q?A0FOAQCJni1Zf4GlL8FcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwGCGI59kHaYCIYkAoMqAQEBAQEBAQECAQIQAQEhXYIzJAGCQQMDJ1IQG?= =?us-ascii?q?AgxVwcSiFiBVq5sOotMMohBjXoFiUeGYoEDjHeTKoIEhTyDbIZJlE5WgQxRIxV?= =?us-ascii?q?GhQMcgWY9NocWKoITAQEB?= X-IronPort-AV: E=Sophos;i="5.38,418,1491264000"; d="scan'208";a="6194599" 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; 30 May 2017 16:35:12 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 30 May 2017 19:35:03 +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 v4UGYvUE022204; Tue, 30 May 2017 19:35:01 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov, sds@tycho.nsa.gov, paul@paul-moore.com Subject: [PATCH v2 1/2] selinux-testsuite: Infiniband pkey tests Date: Tue, 30 May 2017 19:34:50 +0300 Message-Id: <1496162091-129822-2-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1496162091-129822-1-git-send-email-danielj@mellanox.com> References: <1496162091-129822-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 disabled they will always show as passed. Signed-off-by: Daniel Jurgens --- v1: - Synchronized interface names with refpolicy changes. - Changed pkey test to not assume the default pkey is labeled, instead it take a list of indexes with labeled and unlabeled pkeys. It checks that the labeled aren't allowed, unlabeled are allowed, and it labels the unlabeled ones to make sure they aren't allowed when labeled. v2: Stephen Smalley: - Ifdef around new corenet_ib* interfaces. - Updated README with libibverbs-devel dependency. - Ran new test program through astyle with recommended settings. --- README | 12 ++- policy/Makefile | 3 +- policy/test_ibpkey.te | 30 +++++++ tests/Makefile | 4 +- tests/infiniband_pkey/Makefile | 7 ++ tests/infiniband_pkey/create_modify_qp.c | 136 +++++++++++++++++++++++++++++++ tests/infiniband_pkey/ibpkey_test.conf | 18 ++++ tests/infiniband_pkey/test | 84 +++++++++++++++++++ 8 files changed, 290 insertions(+), 4 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..a4c8ebb 100644 --- a/README +++ b/README @@ -68,8 +68,9 @@ libselinux-devel # to build some of the test programs net-tools # for ifconfig, used by capable_net/test netlabel_tools # to load NetLabel configuration during inet_socket tests iptables # to load iptables SECMARK rules during inet_socket tests +libibverbs-devel # to build ibpkey test program. -yum install perl-Test perl-Test-Harness perl-Test-Simple selinux-policy-devel gcc libselinux-devel net-tools netlabel_tools iptables +yum install perl-Test perl-Test-Harness perl-Test-Simple selinux-policy-devel gcc libselinux-devel net-tools netlabel_tools iptables libibverbs-devel The testsuite requires a pre-existing base policy configuration of SELinux, using either the old example policy or the reference policy @@ -195,3 +196,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 7bc7f95..46c9fb5 100644 --- a/policy/Makefile +++ b/policy/Makefile @@ -22,7 +22,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..373404c --- /dev/null +++ b/policy/test_ibpkey.te @@ -0,0 +1,30 @@ +################################# +# +# Policy for testing Infiniband Pkey access. +# + +attribute ibpkeydomain; + +# Domain for process. +type test_ibpkey_access_t; +domain_type(test_ibpkey_access_t) +unconfined_runs_test(test_ibpkey_access_t) +typeattribute test_ibpkey_access_t testdomain; +typeattribute test_ibpkey_access_t ibpkeydomain; + +dev_rw_infiniband_dev(test_ibpkey_access_t) +dev_rw_sysfs(test_ibpkey_access_t) + +# Define a pkey type for labeling pkeys during the test. +type test_ibpkey_t; +ifdef(`corenet_ib_pkey',` +corenet_ib_pkey(test_ibpkey_t) +') + +ifdef(`corenet_ib_access_unlabeled_pkeys',` +corenet_ib_access_unlabeled_pkeys(test_ibpkey_access_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..0c89e91 --- /dev/null +++ b/tests/infiniband_pkey/create_modify_qp.c @@ -0,0 +1,136 @@ +#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..59f738d --- /dev/null +++ b/tests/infiniband_pkey/ibpkey_test.conf @@ -0,0 +1,18 @@ +# 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 pkey table indexes containing labeled PKeys +# These will not be allowed. +SELINUX_INFINIBAND_TEST_LABELED_PKEYS= + +# CSV list of pkey table indexes containing unlabelde PKeys +# This will be allowed, then temporarily labeled to see that +# they are disallowed. +SELINUX_INFINIBAND_TEST_UNLABELED_PKEYS=0 + diff --git a/tests/infiniband_pkey/test b/tests/infiniband_pkey/test new file mode 100644 index 0000000..d40a1f6 --- /dev/null +++ b/tests/infiniband_pkey/test @@ -0,0 +1,84 @@ +#!/usr/bin/perl + +use Test; + +BEGIN { plan tests => 3} + +$basedir = $0; $basedir =~ s|(.*)/[^/]*|$1|; + +my %conf; +$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; +} +close($f); + +if ($conf{SELINUX_INFINIBAND_PKEY_TEST} eq 1) { + $device = $conf{SELINUX_INFINIBAND_PKEY_TEST_DEV}; + $port = $conf{SELINUX_INFINIBAND_PKEY_TEST_PORT}; + + # Read GID 0, to get the subnet prefix. + $gid_path = "/sys/class/infiniband/".$device."/ports/".$port."/gids/0"; + open($f, $gid_path) or die ("Couldn't open $gid_path"); + $gid = <$f>; + close($f); + # The gid sysfs shows a fully expanded ipv6 address, just take the + # top half. + @tmp = unpack('(a20)*', $gid); + $subnet_prefix = $tmp[0].":"; + + @labeled_pkeys = split(/,/, $conf{SELINUX_INFINIBAND_TEST_LABELED_PKEYS}); + @unlabeled_pkeys = split(/,/, $conf{SELINUX_INFINIBAND_TEST_UNLABELED_PKEYS}); + + foreach (@unlabeled_pkeys) { + $result = system "runcon -t test_ibpkey_access_t $basedir/create_modify_qp $device $port $_"; + if($result ne 0) { + last; + } + } + if (@unlabeled_pkeys) { + ok($result, 0); + } else { + ok(1); + } + + foreach (@unlabeled_pkeys) { + $pkey_path = "/sys/class/infiniband/".$device."/ports/".$port."/pkeys/".$_; + open($f, $pkey_path) or die ("Couldn't open $pkey_path"); + $pkey_val = <$f>; + close($f); + + system "semanage ibpkey -a -t test_ibpkey_t -x $subnet_prefix $pkey_val"; + $result = system "runcon -t test_ibpkey_access_t $basedir/create_modify_qp $device $port $_"; + system "semanage ibpkey -d -t test_ibpkey_t -x $subnet_prefix $pkey_val"; + if ($result>>8 ne 13) { + last; + } + } + if (@unlabeled_pkeys) { + ok($result>>8, 13); + } else { + ok(1); + } + + foreach (@labeled_pkeys) { + $result = system "runcon -t test_ibpkey_access_t $basedir/create_modify_qp $device $port $_"; + if ($result>>8 ne 13) { + last; + } + } + if (@labeled_pkeys) { + ok($result>>8, 13); + } else { + ok(1); + } +} else { + ok(1); + ok(1); + ok(1); +} +exit;