From patchwork Tue May 9 20:50:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9718963 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 E898660364 for ; Tue, 9 May 2017 20:52:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA7B92848B for ; Tue, 9 May 2017 20:52:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CF59C2848E; Tue, 9 May 2017 20:52:24 +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]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A283528389 for ; Tue, 9 May 2017 20:52:23 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,316,1491264000"; d="scan'208";a="5619611" IronPort-PHdr: =?us-ascii?q?9a23=3A6y4tuRLu2gcnDV3cC9mcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgQK/T9rarrMEGX3/hxlliBBdydsKMbzbKP+Pm6CSQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5Y75+Ngm6oRjeusULn4dvKbs6xwfUrHdPZ+?= =?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+b7uV6We2zjG4nrhh8rz6yzckijYnJg5gaylHC9ShhwYY6Ps?= =?us-ascii?q?O3SEhmbt68F5tQrT2aO5FrTcw8XWFkoCM6xaceuZKhfSgKzpIqzAPcZfyfa4WE?= =?us-ascii?q?/x3uWemLLTp4mX5pYqyzihms/US61+HwTtS43VJEoyZfndTBtGoB2wHS58WHUP?= =?us-ascii?q?dx41mt1DKJ2gvO8O9LO1o0mrDeK5M5x74wkYccvlrbEy/tnUX2kLeWdkI5+ui0?= =?us-ascii?q?8+jnYqvpppubN4JslgHxKL4ums2iAeQjKAQOQ2ia9vi81L3k50H5RqlFjuYqna?= =?us-ascii?q?XDtZDaJMAbqra4Aw9TzIkj9w6yAyqp3dkXh3UKLE9JdAiZg4XmJV3COu30Ae+6?= =?us-ascii?q?g1u2kTdrw/7GPqfmApXINnXDi6nufbJ8605a1QoywslT6IlTCrEcJvL8RlH+tM?= =?us-ascii?q?fDAx8lMw273+bnCNJn2oMYQmKAGLWVMKzVsV+W/u4vOfWDZJcJuDbhLPgo//zu?= =?us-ascii?q?jXg/mVAHYamp3YEYaHajE/RkJEWZZ3/sjc0aEWcWoAU+VvfqhEeFUT5JaHa4R7?= =?us-ascii?q?g86S0jCIK6EYfDQZiggL6D3CihApJWZXtGCleKEXfpaYWJQPkMaCaPIs5uiTME?= =?us-ascii?q?SL6hS5M81R20sw/60bVnJPLO+iIErZLjyMR15+rLmBA89Dx0C8Gd3H+XT2xvkG?= =?us-ascii?q?MHWSI53KdloUNn0leDy694g/5GGtNP+/NFSAA6NYTTz+ZiEdD9RhrBfsuVSFah?= =?us-ascii?q?WtipHC0+Ttc2w98If0ZxBs6vjg7d0CqwAr8UlruLBJou/qLawXfxO953y2za26?= =?us-ascii?q?k5k1kmXsxPOHW7ia5j7QfTHZXEnFmel6avaasTxjXN9HuZwWqIok5YTBZ6Ub/Z?= =?us-ascii?q?UnAHekvWsdP561vCTr6vDrQnNBBMycuGKqdTa93pi09KRPH5N9TEYGKxmnmwCg?= =?us-ascii?q?iSyrOKcoXqZ30X3D/BB0gcjwAT4XGGOBAgCSe5uW3eFj1uFUn0bkP06+Z+snK7?= =?us-ascii?q?TlQszwGOdUJuy6S69gQShfyGRPMZxqgEtzs5qzVoAFa92MrbC9SapwV7eqVTfd?= =?us-ascii?q?I94Exc2GLcrwx9P4WsL7tsh14FaQh3uFnu1xpvAIVajccqtG8qzBZ1Ka+A01NO?= =?us-ascii?q?bTCY3ZftOrDMKWn95hOva6nL2l3E19aW4KgP4uwiq1r/pAGpClYi83J/3tZPzn?= =?us-ascii?q?Sc/JTKAxQIUZ/qSEk46x16q6vdYikn6IPezWdsPrWssj/ex9IpA/Moyg2uf9dF?= =?us-ascii?q?N6OEDxPyHtYBB8ioL+wrlV2pYQgCPOxI8q47Id+mfeOc2KG3JOZggC6mjWNf7Y?= =?us-ascii?q?FzyE2M8zZ8RfDS35Ye2PyYwBWIVy3ng1e8t8D7g4dEZSsdHmCn0yjrGJZRZrFu?= =?us-ascii?q?fYYMEWquP9C4ych/h5H3X35V70KsB1QD2MC1YxWSdED90RdW1UsJvXytgTG4wC?= =?us-ascii?q?BskzE1sqqf2zTDw+LjdBoDPm5EWnJigEz2LoeqldAaW1Kkbw8zlBuq/Uz63bRU?= =?us-ascii?q?pLxjL2nPRkdFZzb2L2B+XaussbqCedRD548osSVQVuS8bkuXSrr8oxscySzjBW?= =?us-ascii?q?xeyCo8dzGwtZXzhwZ6h36FLHZvsHrZftl9xRPe5NzHWf5dxyEGSzd8iTnWAFi8?= =?us-ascii?q?Itao8M6Pl5fbs+C+UWOhWYFIcSXxy4OPqje773VwARKjh/CzhsHnEQ8i3C/h0N?= =?us-ascii?q?lqUSHIowjmYob30KS7P/lqflJ1BFDg8Mp2AIZ+kpE/hJsIw3gVmo2V/WYbkWf0?= =?us-ascii?q?KdhbwbjxbGcJRTIR2dHZ+hPq2EpnLnKVwIL5UG6Qws59a9m8ZWMZxjgx78ZUB6?= =?us-ascii?q?eI9LZEhzd6okKkrQLNZvhwhjQdxuUo6H4BmOwJuxQiziOGArAUA0ZYITbglxOS?= =?us-ascii?q?79CxtK9XfnqgcaCs1EpimtCsFK+CogdBV3viZJciGzJ/7sVlPFLKznLz9pnueM?= =?us-ascii?q?PMYtILqh2UjxDAgvBNKJ0ri/oKgTFqNn78vX05y+83lBJu0ou8vISdLGVt5q25?= =?us-ascii?q?CAZCNjLpf8MT5i3tjaFGk8aOxY+vA5FhFSsTXJTyS/KoDCwdte78OgaTCz0ztG?= =?us-ascii?q?2bGaHFEQ+E70dmsmjPHIy1OHGZI3kZ19piSweHKExZng8UQC0wnoQlGQCy2Mzh?= =?us-ascii?q?bEB56ygf5lHirBtM1uVoNxzkX2fRugindzA0SIKFIxpO9AFC4EXVPtKC4eJvBS?= =?us-ascii?q?1Y+YehrAOVIGyBewtIFX0JWlCDB137O7mh/93A8+yGCeqiM/vBe6+BpPdYV/iW?= =?us-ascii?q?2ZKvyZdp8CyUNsqRJHViCeM02lZbV3BjB8vZgykPSzAQly/Vdc6Xvhm99jdyrs?= =?us-ascii?q?+l9PTrXwLu6JCVBLRONNVj4Re2gb2MN+SIniZ2NS5Y1o8QxX/P0LUf0kQShD9z?= =?us-ascii?q?eDm2C7sAszLNTKXLmqJMFREUdyZzONFP76Im0QlHIdTbhc/t1r5kkv41DE9IVV?= =?us-ascii?q?r7ms6zfcwKO3qwNF3GBEaRL7SGOTPLw8DxYaymT71fkORUuAe0uTqBFE/jJDuD?= =?us-ascii?q?nSHzVx+zKeFMkD2bPBtGtYGlbBliEnbsTNTnah2nN996ljw2zqMqiXzUL2IcNi?= =?us-ascii?q?J8c0xVpL2K8SxYmul/G3BG7nd9MOaEgDiW4PPXKpYMq/RrHD95l/lA73Q51rtV?= =?us-ascii?q?9jtLSOZxmCvPqN5huUumnvCTyjpgUxpPqjFLiJiNvUp8JaXT7oNAVmrc/BIR8W?= =?us-ascii?q?WQDAwHp8B/Bd3xoa9QxcbAlLnoJTdZ6d3U49ETB8fKJ8KcKnYhNwTmGCLMBgsf?= =?us-ascii?q?UTGrLX3fh1BakPyK7XKVr5c6qp/qmJcVV7BUSkc6FvIABURjBtACJ413Xjw8m7?= =?us-ascii?q?6BkMEI/Wa+rAXWRMhCpJ/HWeidAevxJzuCirlEfwUHwbX9LYsJN43731dtal51?= =?us-ascii?q?nYjQHErQR99NqDV7bgAouEVN7GR+Tmor1kL5bQOt5WUfFeSznh83lAR+Z/8i9C?= =?us-ascii?q?3r41gpJVrHvzc/kE40mdr5mz+RayLxIL22XY5IFyr+r1IxPY/jQwZpcQ2ymlRp?= =?us-ascii?q?NDTERrJVkbRtbmVriAjSuZtBB/FcUbFEYB8XxfGSefoky1JcpTu7xUVf/+vKFY?= =?us-ascii?q?NilBc2cZ6rt39A3RxsY8QxJaHLJ6pJyUNQhr6UsS+uzeAxww4eK1wL8GyMZC4C?= =?us-ascii?q?oFYIOaU+Jyq04uxs7hSPmyFdd2gXSfUluOhq+V89O+mb1C3g0qRDJV22N+yRN6?= =?us-ascii?q?OZoXbPlM6STlM2yEwIi1FP/aJq3sc7b0qUS0cvwaOMGBQOM8rCLxxaYNRW9HjS?= =?us-ascii?q?ZiuBq/vCwYhyP4mnEeDoV+COvr4Ogk24BAYpA5gM7sMZE5axyk7YM8bnI6MeyR?= =?us-ascii?q?g2/gvrPk+FDPNHeRKQjjgIv9y/zIV23YlBJjARG2N9Pjur5rzPvA8lnOKDXMsq?= =?us-ascii?q?YncdRoYEMnU2WNeklC5fvnVACyK60u0fyAif9TP8oT7QDDbkZdp5ePiUfQ9sCM?= =?us-ascii?q?2x+Tgn6Ki5l1rX8pTYJ2HnOtVvocPA6eQfp5mbEfxUVqV9v13am4ZGW3ygS3TP?= =?us-ascii?q?HsKtJ5jsd4ksasT5CnWgUl2/kT01SdvxPNa2I6iHhgHoXZpbvJOd3D89Kc+3Di?= =?us-ascii?q?seFAtop+Ef+KJ8YhUOY4Y6YR7tsAQ+K6y/IQeD39qzQmasKSFZQOJFweW8ebNX?= =?us-ascii?q?0zImbvWmx3s4UpE60+63/FYXS5EOjxHR2eisaJFbUSnzHHxdfAPPqjAimmd6N+?= =?us-ascii?q?Y92OE/zArGsVkBKTyLcvJmaHBctdEmGVySOWl2CnY/R1KEloXM/Ais0qsI8CRA?= =?us-ascii?q?gdZbz/dFsGPksZ/FYDOgQqurqY/asyA4d9gpv7VxMZD/IsuBrJ7ekSHfTJjUsg?= =?us-ascii?q?2BTiG6EuFXlcVOLy1DQflHg2clNdYBuYpb5ko7Tt0+KKBXCKkwurCqbiJpDTQU?= =?us-ascii?q?zS8YS4yA3DsCguOn27XCjxmebY4sPQADvphZntQdVCt2bT8Eq6+4S4XajWmERX?= =?us-ascii?q?YXIA0L9wRD+BoAlpNsfuDi+IfIVoJDxCNNrvJ7VyvKGYNk913lRWGKmVL4Uumu?= =?us-ascii?q?k/S13QJOy/LhysMbVwRlCUha3OlbjVcoKKttJKkOoIHKtj6IdUX1vGLpyeumK1?= =?us-ascii?q?lRydHad1LiForFsHDwUisC9n0IXYVP0m3QFYwOkwplb6YmvFtNLJq6dUb+5jwk?= =?us-ascii?q?woVpEKO7Vc2wxlYqs2gJSDmwH9pGEeFmv0rdWCd5bJCztJXlJ5JST3dK952Htl?= =?us-ascii?q?dZll9hMy2ixJpdKsFN4yIMUyNVrTWbotSyVNVJ2dVqAJ8UPtd/p3D9FbtFOJiX?= =?us-ascii?q?v305pLjvxWHc+z8irFe63jWyFrS/T+JB4WIeHAApKH6fqkkrFOQs9WjT/krKsl?= =?us-ascii?q?Bu8OdRHqKPgllpoDZhApBOAS5E1X+/L1tpSnlGr/5XKKXSc81SRfkyeR+vNAI/?= =?us-ascii?q?Ff4gw0yG41t0kW3/YyNsqgtQ4zrdUBUsVSkJnrftniUTqt2gOT8fUJ9IcSktby?= =?us-ascii?q?LeJA6BnyBYogpfYVlwW58FGtZF560b3YxM88rCU0msMzsKXBh/OQ8jzPVQi1ZD?= =?us-ascii?q?sF2GdiDZEwWob+zDshptfceetMSpNuj2/B9bioP7t+A176cDR3q4lgC2XN/RsZ?= =?us-ascii?q?T8ucOQtkuSaqj3LvewYXnfQzjQlRqwn6srD4HW/yjPNwpWM4J1yXQ4bpT9C2PH?= =?us-ascii?q?IBpLKrkHKEpcUKB1dc9JovtGZ8N+fqYG57NtDAqdRhzzAIyvsOVGLlHLSDTEMS?= =?us-ascii?q?qO7+y/rpjP7bHGTejgYdKMyGjZT61rOZd19Cf0F63s0YBA5kr8wu1t+V9iSVja?= =?us-ascii?q?LyCBq8zsJhsQ5Mm+bETto4EpECjNAJd3jXrt3F1PeNQRQy226pQX0pdZ5Gz3Se?= =?us-ascii?q?Ji3Uj5qPdS+KV86Ykr/7Bpzt+5JbvIKftEr0BoHwOZBhhu9pUxGmhwXX5RYu4W?= =?us-ascii?q?KPfVY6sZkdriq+ftF6wY8BeV4fBWacPbJ0HdncmyEjOcRgZenAcGsj4aKhGT1+?= =?us-ascii?q?Celq9xVMalofT52kMx7Fi/NBEGyqtt6Z2D+qqSq+/ddwHRwqQcWqj2WsPzqawh?= =?us-ascii?q?u0GI6v0imr4OYGt1bBC5H+UGSs4S3GHgzbstzS42FcPMAa7g8uZZV30lhjLgh4?= =?us-ascii?q?x9H1IOF/MSGbqG5oVenmE9m+DDN90WdK5CmnyVGh6/Dr8C02Or5DeLIGl4mBHB?= =?us-ascii?q?zQv8QWSp7F/5tSV4WzfDz8//kkpJUbm6HUFSXyu1Nk9/tDOAJhHouMD2uaQy60?= =?us-ascii?q?E2KXfkucmIlGauN7JbBcr/JMaTISMsvlIYkIUxRsCz2YAcAdeyPM0e8HVgYfvF?= =?us-ascii?q?92OqkyhBrrxch4XC48Ga5PPXHWWhj6KAsbmNwi5XymQgt1El9t+gLu3O58GNQ/?= =?us-ascii?q?mw02YRVCJ/tgvaUh67tLPUslcUOVaR30fTgowKOdNZ0mck2UH6/uQjR8gz9ApG?= =?us-ascii?q?HIbae/wCvSzzOCfzwVuHYdI3Vyye3iBSHl3rEVh3BrI82GP2vMLGj3vQ/UMnRp?= =?us-ascii?q?VofUz9mRN3F5k4KV4q6FUPwyoCEBICZgqHA7yzHkTqM5cEWlYfZhid27i6YKg3?= =?us-ascii?q?11Vpwryz/O/TcfB8B60VO/lGjw6Oh1ZaFYgUsa0fXLJ8Y0VS9LPTpgX5F4fnWO?= =?us-ascii?q?XpmmQqOv2oWMBa9toZuGE47ga4XRqg5o9J76wHh5CQaq5EfZ/Msdhk70h9+T4A?= =?us-ascii?q?aixNgRZ4jxOjUuAQvfvj7cbfsJqp7OauSaksSv4P9xcuG2Rxk5vwgV4kodHN1O?= =?us-ascii?q?dQUI7Vhprl8ABLPXGKvJzW0x5mKeoBM4irZqpv920bJygCIHIDJcaWa+Mi7C9p?= =?us-ascii?q?KjrT4UJND9gRatMZM8rNmBxUhVfyWL5J7MrbB0WUC4FteMA092D30iw68YMgUu?= =?us-ascii?q?b87z+7PZ/f4EtXP/xdkCVslMnPpOwUwfrOFicX4WOWawVuwi+YzZmCFerw9/2W?= =?us-ascii?q?yN7IT1MGAjI2U4BFKTqN5wOnQPa1lJLuUg+T8c/8npY+dEOWRnysk6UIqaJMHv?= =?us-ascii?q?BaiiT7xDdSDIb1iOyJs9C08mtYqkVHEJpv7R3CAKhQIpd7Ng7kmcSwWkd8AS//?= =?us-ascii?q?eMXVdhUwouqW2vkD7Pl+N0fkYo8bOB0Ewarg6XVJVgtuVKL2vlGBUOIUY9tmTu?= =?us-ascii?q?/Ern9L5o97Lq8PPUKSpJr0oTdUplE2BxUpaLwrrjBAcEnBghFVUb7uuLEckgsc?= =?us-ascii?q?TcJ5uUhUFGK/JG0+/CHHWb1IgqeeDvIV8zOTTrEBUkhzPSN+Rgm62JNwdLezmv?= =?us-ascii?q?BHqGxGlDtnoPc2yzxmWAe8uSr0qqIP3jIg+Le4uC8dtnxFSuWejjrHCFRCzPQM?= =?us-ascii?q?lqccCHfi5EeiYHkCcov9+r1nKtnh9YU75XQwfwkjdTUcXeu8EyHwk7+IAouXvd?= =?us-ascii?q?Jdmh6CosPOYKS3LSgPK7s9yBXjR2Nn3gjZhhZo/3MBQi+84988OIW9JcElyzKq?= =?us-ascii?q?GWfFelYM7KdJvdD/tFERSus5d09hzH9l0seZWi0HXNbPFHotjgg4dWVEd4pO6R?= =?us-ascii?q?AeF6kvjDeHoK1G/gUPbTfPFYSl/IjQktvS1Xk7U9hq2nrcpreZiZMyzH1lh9R0?= =?us-ascii?q?4zaMuHQSd+3YS8hsAnzy1odD1+PzfPCtsuEbSIt81rutSvgCMtOs+WGuwpVlRl?= =?us-ascii?q?elxqgCH1q+KOID2rbbUyK+RG2EWOSEb2uMkCg9MkLo4xmnMEE3Yt9Qr0AhKuvC?= =?us-ascii?q?moJclwr5XLNxRyWQplzbzGs4POMYbQ02u4CnewoUQ+4XfeScI/YhwOEmAlsWc3?= =?us-ascii?q?DJBTd2C/OxsVO1h4d0JXNg4VnhbOT29gDmN8eSGgUaEYHEs5F94/u6RniOOXV4?= =?us-ascii?q?1h19IFF09/vDF1Q2ruJca5GRndzKiNRh3+8FcPNtMSMmt94WnYJj7pKU39mWfh?= =?us-ascii?q?HLyZbyPsrVovmeA/3Q1UgqfXtaUrUBawPv+4o6JsI5W6HUHbZBsxQTG6w6QJ05?= =?us-ascii?q?N2jv76x1LQJzcgvUZLuqmMnqovyEaoFTp3/M4VI6ND3ctAEbyvyoUQx7aIinhn?= =?us-ascii?q?vqIJAqRzJOs8NiBwBjHItOB8MAtRSoD4STmKGhhN+741l6tPMSsarsFvDK08y0?= =?us-ascii?q?34J1X5dE/kGLJDLRC7NwgkR5j+S9nuvA0oPvBsz8Y98EUvZ0QnLdYL/cAoq/Mi?= =?us-ascii?q?6OOt77e0Ne976c0bR5UgieZSzgW6qGtTakNOl/4Uggy4x3ZuzTzDs347Hcwtvy?= =?us-ascii?q?aHlRpj2/on6RKJtf8FvKCPTFXx1KTfqF8WBlHbAYbIfz++kOLdwiz8aG4wZt9D?= =?us-ascii?q?RNytCII6u/oU/W3EJ0a5bbI1D02yY2Q4UKJw6/MUQ0i2/DtnvdGWhcLtSjKcR1?= =?us-ascii?q?hdaaFADi50lwmWErYW5MAXToRdaXOWcF38K+ZQuK9B9EDtoZmO63Y0E4vLWoSe?= =?us-ascii?q?Z0IpVFhfmqtLIfnNZrMS7PR89aMDrLIb9rODpREuXPpF81Yh4Ls7g1Rp05ZZ6Q?= =?us-ascii?q?L0MbKE2A0z/9zRPe0U3ocNyhzL2GLz0R/nVDzrLFyiRMpxKjtfaCnMLsTKrVbI?= =?us-ascii?q?roU/7WMSolUCyaRDspHEm1+VakoecEvOGCLWYRuF8UfjmSCAkVpqx1qtjQFGDT?= =?us-ascii?q?k/V5fJIWnPCaRzzwSCpgmao9HClErlqMQ/sdGgnSdHLhnm5ctxa5Jv9N4HLpdb?= =?us-ascii?q?uYybRJW+YOGItDbuWZQ8fEefBZPzoolDAZOOGmf93GrrY5yUnFTW0DHKnN6lKe?= =?us-ascii?q?TVSaQvuGxzLkRY8VpZQ7ujI0+tLMmS96C7/IP7iapzGy84O1jz2VufPAWWk3Yk?= =?us-ascii?q?w0geUCAG+bzBlGNm4EF4JdhEa4WaOEZkBRxFo1mOlu3FkKYw01XXpwgVNMm/Po?= =?us-ascii?q?NsRfAXwJlmyjRuZOOFx+CjI9+U2i5wD2ZdUGvtCVTGhboOhfAbEBJeUlvdGEcJ?= =?us-ascii?q?Abx+wkiXc/+CE=3D?= X-IPAS-Result: =?us-ascii?q?A2EUYQBSKxJZ/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgwE?= =?us-ascii?q?pYoEMjnSQYoILAZVuKAOKb1cBAQEBAQEBAQIBAmgogjMiK1QBAQEBAQEBAQFMM?= =?us-ascii?q?TwGAQIkVQMJAQEXCCkIAwFTGQWIUIFMBLRzOiYCinuIPY1nBZAigQGMYocci3+?= =?us-ascii?q?CV4hAhlKUQFiBCk8hFYR2RByBZnOGOSuCEAEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 09 May 2017 20:52:22 +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 v49KqLLU005868; Tue, 9 May 2017 16:52:22 -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 v49KpJ2d149482 for ; Tue, 9 May 2017 16:51:19 -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 v49KpH4x005429 for ; Tue, 9 May 2017 16:51:18 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B6AgDVKhJZf4GlL8FdHAEBBAEBCgEBgyyBC4EMjnSQYpgBJIYAAoVEAQIBAQEBAQITAQEhXYUWAwMnUhAYCDFXGYhVgVC0cjqKcAEBCCiIPY1nBZAigQGMYocci3+CV48SlEBWgQtPIRWFOhyBZj02hjkrghABAQE X-IPAS-Result: A1B6AgDVKhJZf4GlL8FdHAEBBAEBCgEBgyyBC4EMjnSQYpgBJIYAAoVEAQIBAQEBAQITAQEhXYUWAwMnUhAYCDFXGYhVgVC0cjqKcAEBCCiIPY1nBZAigQGMYocci3+CV48SlEBWgQtPIRWFOhyBZj02hjkrghABAQE X-IronPort-AV: E=Sophos;i="5.38,316,1491278400"; d="scan'208";a="6046342" 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; 09 May 2017 16:51:17 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3ATjU7KRd2ndcjWnmYRBnT+vNxlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcuyYR7h7PlgxGXEQZ/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?y4R1Vlbt6iDZRQryaaN5FqQs84Xm5npjg6xqUDuZGhZCgG0pUnxxjZZveacIaI?= =?us-ascii?q?+gruWPuVLDp2nn5od7Cyiwyv/UWhyuDwTNS43EhOoydDj9LCrGoC1wbJ5ciCUv?= =?us-ascii?q?Z9/lmu2TKI1w3L7+FLP0Q0la7BJJ4nxb4xmYAfvljEHiPsmUX2iLeadkQi+ue2?= =?us-ascii?q?9+Tqeqjqq5uSOoNuhQzzML4iltG+DOk4KAQCQnaX9OCk2L3m50L5QbFKjvMskq?= =?us-ascii?q?netZDXPdkUqbS/Aw9UzIkj7xS/Aiyj0NsGmXkHKEhKeBSAj4nmIV3BPPf4DfKn?= =?us-ascii?q?j1S2jDhr3+zGPqHmApjVNXjMjrPhfbd7605Bxws+1sxf5pJIBbEBJ/L/QEnxtM?= =?us-ascii?q?fCARMjPAy0xPjnW51B0dYFVGaOBLKJGL/Dul+PoOQ0Kq+DY5FGliz6Lq0J7vim?= =?us-ascii?q?r2IjllIbZuH90ZIRaX28HNxjLkGdaHzrkpEKFmJc7Vl2d/DjlFDXCW0bXH21Ra?= =?us-ascii?q?9po2hjUI8=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0EIPQBSKxJZf4GlL8FdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwGBC4EMjnSQYoIMlXUkhgAChUQBAQEBAQEBAQIBAhABASFdgjM?= =?us-ascii?q?iASpUAQEBAQEBAQEBTDE8AwMnUhAYCDFXGYhVgVC0czqKcQEBCCiIPY1nBZAig?= =?us-ascii?q?QGMYocci3+CV48SlEBWgQxPIRWFOhyBZj02hjkrghABAQE?= X-IPAS-Result: =?us-ascii?q?A0EIPQBSKxJZf4GlL8FdHAEBBAEBCgEBFwEBBAEBCgEBgwG?= =?us-ascii?q?BC4EMjnSQYoIMlXUkhgAChUQBAQEBAQEBAQIBAhABASFdgjMiASpUAQEBAQEBA?= =?us-ascii?q?QEBTDE8AwMnUhAYCDFXGYhVgVC0czqKcQEBCCiIPY1nBZAigQGMYocci3+CV48?= =?us-ascii?q?SlEBWgQxPIRWFOhyBZj02hjkrghABAQE?= X-IronPort-AV: E=Sophos;i="5.38,316,1491264000"; d="scan'208";a="5619501" 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; 09 May 2017 20:51:05 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 9 May 2017 23:50:58 +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 v49Koor5031538; Tue, 9 May 2017 23:50:57 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH 5/9] libsepol: Add ibendport ocontext handling Date: Tue, 9 May 2017 23:50:38 +0300 Message-Id: <1494363042-121766-6-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 IB end port ocontext data. Also add support for querying a IB end port sid to checkpolicy. Signed-off-by: Daniel Jurgens --- checkpolicy/checkpolicy.c | 20 ++++++++++++++ libsepol/include/sepol/policydb/services.h | 10 +++++++ libsepol/src/expand.c | 8 +++++ libsepol/src/libsepol.map.in | 1 + libsepol/src/module_to_cil.c | 15 ++++++++++ libsepol/src/policydb.c | 21 +++++++++++++- libsepol/src/services.c | 39 ++++++++++++++++++++++++++++ libsepol/src/write.c | 14 ++++++++++ 8 files changed, 126 insertions(+), 2 deletions(-) diff --git a/checkpolicy/checkpolicy.c b/checkpolicy/checkpolicy.c index 0f12347..72431d6 100644 --- a/checkpolicy/checkpolicy.c +++ b/checkpolicy/checkpolicy.c @@ -701,6 +701,7 @@ int main(int argc, char **argv) printf("i) display constraint expressions\n"); printf("j) display validatetrans expressions\n"); printf("k) Call ibpkey_sid\n"); + printf("l) Call ibendport_sid\n"); #ifdef EQUIVTYPES printf("z) Show equivalent types\n"); #endif @@ -1247,6 +1248,25 @@ int main(int argc, char **argv) printf("sid %d\n", ssid); } break; + case 'l': + printf("device name (eg. mlx4_0)? "); + FGETS(ans, sizeof(ans), stdin); + ans[strlen(ans) - 1] = 0; + + name = malloc((strlen(ans) + 1) * sizeof(char)); + if (!name) { + fprintf(stderr, "couldn't malloc string.\n"); + break; + } + strcpy(name, ans); + + printf("port? "); + FGETS(ans, sizeof(ans), stdin); + port = atoi(ans); + sepol_ibendport_sid(0, 0, name, port, &ssid); + printf("sid %d\n", ssid); + free(name); + 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 2d7aed1..aa8d718 100644 --- a/libsepol/include/sepol/policydb/services.h +++ b/libsepol/include/sepol/policydb/services.h @@ -199,6 +199,16 @@ extern int sepol_ibpkey_sid(uint16_t domain, sepol_security_id_t *out_sid); /* + * Return the SID of the ibendport specified by + * `domain', `type', `dev_name', and `port'. + */ +extern int sepol_ibendport_sid(uint16_t domain, + uint16_t type, + char *dev_name, + uint8_t port, + 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 c45ecbe..061945e 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -2226,6 +2226,14 @@ static int ocontext_copy_selinux(expand_state_t *state) n->u.ibpkey.low_pkey = c->u.ibpkey.low_pkey; n->u.ibpkey.high_pkey = c->u.ibpkey.high_pkey; break; + case OCON_IBENDPORT: + n->u.ibendport.dev_name = strdup(c->u.ibendport.dev_name); + if (!n->u.ibendport.dev_name) { + ERR(state->handle, "Out of memory!"); + return -1; + } + n->u.ibendport.port = c->u.ibendport.port; + 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 36225d1..dd1fec2 100644 --- a/libsepol/src/libsepol.map.in +++ b/libsepol/src/libsepol.map.in @@ -7,6 +7,7 @@ LIBSEPOL_1.0 { sepol_iface_*; sepol_port_*; sepol_ibpkey_*; + sepol_ibendport_*; 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 db3f9c8..4b9f2c8 100644 --- a/libsepol/src/module_to_cil.c +++ b/libsepol/src/module_to_cil.c @@ -2585,6 +2585,7 @@ static int ocontext_selinux_isid_to_cil(struct policydb *pdb, struct ocontext *i "scmp_packet", "devnull", "ibpkey", + "ibendport", NULL }; @@ -2763,6 +2764,19 @@ exit: return rc; } +static int ocontext_selinux_ibendport_to_cil(struct policydb *pdb, struct ocontext *ibendports) +{ + struct ocontext *ibendport; + + for (ibendport = ibendports; ibendport; ibendport = ibendport->next) { + cil_printf("(ibendportcon %s %u ", ibendport->u.ibendport.dev_name, ibendport->u.ibendport.port); + context_to_cil(pdb, &ibendport->context[0]); + + cil_printf(")\n"); + } + + return 0; +} static int ocontext_selinux_fsuse_to_cil(struct policydb *pdb, struct ocontext *fsuses) { @@ -2917,6 +2931,7 @@ static int ocontexts_to_cil(struct policydb *pdb) ocontext_selinux_fsuse_to_cil, ocontext_selinux_node6_to_cil, ocontext_selinux_ibpkey_to_cil, + ocontext_selinux_ibendport_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 8b76c6a..6c9f2f9 100644 --- a/libsepol/src/policydb.c +++ b/libsepol/src/policydb.c @@ -198,7 +198,7 @@ static struct policydb_compat_info policydb_compat[] = { .type = POLICY_KERN, .version = POLICYDB_VERSION_INFINIBAND, .sym_num = SYM_NUM, - .ocon_num = OCON_IBPKEY + 1, + .ocon_num = OCON_IBENDPORT + 1, .target_platform = SEPOL_TARGET_SELINUX, }, { @@ -303,7 +303,7 @@ static struct policydb_compat_info policydb_compat[] = { .type = POLICY_BASE, .version = MOD_POLICYDB_VERSION_INFINIBAND, .sym_num = SYM_NUM, - .ocon_num = OCON_IBPKEY + 1, + .ocon_num = OCON_IBENDPORT + 1, .target_platform = SEPOL_TARGET_SELINUX, }, { @@ -2829,6 +2829,23 @@ static int ocontext_read_selinux(struct policydb_compat_info *info, (&c->context[0], p, fp)) return -1; break; + case OCON_IBENDPORT: + rc = next_entry(buf, fp, sizeof(uint32_t) * 2); + if (rc < 0) + return -1; + len = le32_to_cpu(buf[0]); + c->u.ibendport.dev_name = malloc(len + 1); + if (!c->u.ibendport.dev_name) + return -1; + rc = next_entry(c->u.ibendport.dev_name, fp, len); + if (rc < 0) + return -1; + c->u.ibendport.dev_name[len] = 0; + c->u.ibendport.port = le32_to_cpu(buf[1]); + 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 39903d1..d4a068a 100644 --- a/libsepol/src/services.c +++ b/libsepol/src/services.c @@ -1970,6 +1970,45 @@ out: } /* + * Return the SID of the subnet management interface specified by + * `domain', `type', `device name', and `port'. + */ +int hidden sepol_ibendport_sid(uint16_t domain __attribute__ ((unused)), + uint16_t type __attribute__ ((unused)), + char *dev_name, + uint8_t port, + sepol_security_id_t *out_sid) +{ + ocontext_t *c; + int rc = 0; + + c = policydb->ocontexts[OCON_IBENDPORT]; + while (c) { + if (c->u.ibendport.port == port && + !strncmp(dev_name, c->u.ibendport.dev_name, 64)) + 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 fa1b7d1..e3ff389 100644 --- a/libsepol/src/write.c +++ b/libsepol/src/write.c @@ -1426,6 +1426,20 @@ static int ocontext_write_selinux(struct policydb_compat_info *info, if (context_write(p, &c->context[0], fp)) return POLICYDB_ERROR; break; + case OCON_IBENDPORT: + len = strlen(c->u.ibendport.dev_name); + buf[0] = cpu_to_le32(len); + buf[1] = cpu_to_le32(c->u.ibendport.port); + items = put_entry(buf, sizeof(uint32_t), 2, fp); + if (items != 2) + return POLICYDB_ERROR; + items = put_entry(c->u.ibendport.dev_name, 1, len, fp); + if (items != len) + 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;