From patchwork Wed May 30 14:11:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Enderborg X-Patchwork-Id: 10439079 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 9558A60327 for ; Wed, 30 May 2018 14:20:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6F4F929019 for ; Wed, 30 May 2018 14:20:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6B5E128FE2; Wed, 30 May 2018 14:20:56 +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=-5.2 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from uhil19pa10.eemsg.mail.mil (uhil19pa10.eemsg.mail.mil [214.24.21.83]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3C22A28EAB for ; Wed, 30 May 2018 14:20:47 +0000 (UTC) Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by uhil19pa10.eemsg.mail.mil with ESMTP/TLS/AES256-SHA; 30 May 2018 14:20:46 +0000 X-IronPort-AV: E=Sophos;i="5.49,460,1520899200"; d="scan'208";a="13920376" IronPort-PHdr: =?us-ascii?q?9a23=3AxrOvchAKx375PW9F1ta0UyQJP3N1i/DPJgcQr6?= =?us-ascii?q?AfoPdwSPnyoc2wAkXT6L1XgUPTWs2DsrQY07eQ6/iocFdDyK7JiGoFfp1IWk?= =?us-ascii?q?1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBA?= =?us-ascii?q?j0OxZrKeTpAI7SiNm82/yv95HJbAhEmDqwbaluIBmqsA7cqtQYjYx+J6gr1x?= =?us-ascii?q?DHuGFIe+NYxWNpIVKcgRPx7dqu8ZBg7ipdpesv+9ZPXqvmcas4S6dYDCk9PG?= =?us-ascii?q?Au+MLrrxjDQhCR6XYaT24bjwBHAwnB7BH9Q5fxri73vfdz1SWGIcH7S60/VC?= =?us-ascii?q?+85Kl3VhDnlCYHNyY48G7JjMxwkLlbqw+lqxBm3oLYfJ2ZOP94c6zTZ9MaQX?= =?us-ascii?q?dKUNhXWSJPH4iwa5IDA/cdMepdqYT2ulkAogakBQS0BO3h1DFGiHzx06I43e?= =?us-ascii?q?QuHhzI3BQiEt4TvnnbsNr7O7kJUe2u0KnFzy/OY+9M1Dvh9oTFdA0qr/GWXb?= =?us-ascii?q?J3dMrc0VMhGB3ZjlqOs4zuIjyb1uIQvGeF9epvTuWvi3QoqwpspTWv3tkjip?= =?us-ascii?q?XXiYIP0FzL6yN5z5srKt2iU0F7ZsSkEJRLuiGBMIt2RMMjT3t0tyY9z70LoJ?= =?us-ascii?q?i2dzUJxpQ/3xPTdvOKfoeS7h/jSeqdOyl0iX17dL6lmhq+6Uatx+/mWsWp3l?= =?us-ascii?q?tHqjBJnsTMu30MzRDf9MyKR/1g9Um7wzmPzRrc6uRcLEAxkqrUNoAuz6Yrlp?= =?us-ascii?q?oWrUTDBij2mFjqjKOOdkUr5Oyo6+P/b7X6vJCcLY50ihzlMqg0hsy+Afg3Mg?= =?us-ascii?q?gJX2SB/+SzyKbj8lHjTLVPj/02lrHVsJHcJcsFuq60GxJZ34ks5hqlDzqqzc?= =?us-ascii?q?4UkWcIIV5bYh6LkpDlO1TUL/D5Cfe/jU6skDBux/3eJb3uHJHNLnnFkLf8cr?= =?us-ascii?q?dx8lVTyA0uzdBZ+51bFKoBLenvWk7xqNPYDhg5Pxayw+b8EtpxzIweWWWRAq?= =?us-ascii?q?OBKqPdrUeI5v4zI+mLfIIVujH9K/4/6P7yjX82g1kdcLKr3ZsQbnC4G+5pI1?= =?us-ascii?q?6FYXXymNcBCn0Gvg0kTOzlkFeCSyJcZ26uX6Ig4TE2EICmDYXZSY+xg7yBxy?= =?us-ascii?q?C7HptXZmBYEV2MH3Pod5iLWvgXdSKSJNNhkiEeWbimUY8h2gmktBXmxLp/Mu?= =?us-ascii?q?rU5ioYuIr71Ndr/OLcixcy9T1oD8SayGyNTn97kX0WSDMs26B/u0N9wE+Z0a?= =?us-ascii?q?dkm/xYCcBT5/RRXwgnMp7cyep6BM3sVQLFf9eEU0ypTcu8ATE2VN4xxMUOY0?= =?us-ascii?q?llEdW4kh/DxzaqA6MSl7GTGZM07rjT32LqKslhzHbG0bUugEM9QstTL2GmgL?= =?us-ascii?q?Bw9xTLDY7Tj0qZj7qqdbgb3CPV9WeDy3aOs19cUAFuVKXKQ2wfZlHWrNni4U?= =?us-ascii?q?PCV6GhCbIiMgRbyM6CLrBFatrmjFlcQ/fjItveaXqrm2isHRaI2q+MbI3ydm?= =?us-ascii?q?QT3SXdDE0EnB4J/XudOwgxGDquo2XEDDN0DVLveUTs8etgp3ynUk841QaKb1?= =?us-ascii?q?du17Ct4B4ameScS+8P3rIDoCohpS90E0y7393KCtqAvBFsfKBEYdM8+VtHzm?= =?us-ascii?q?zYtxdnMpynNaBiiUYUcx5rsEP2yxV3FoJAnNAprHwwzwpyLr+Y3UhCdzyC3p?= =?us-ascii?q?DwPaDXJnP1/BC1ZK7cwkve38qO+qcT9PQ4rE3usxu0GUo48nVozcNV3mCG6Z?= =?us-ascii?q?rWCQoeS5XxUlw49xJivbHVfjE955/I1X1rKaS7riXN29Y3C+s+1hahf9BfPb?= =?us-ascii?q?ifFADuEs0VGc6uKPArm1ezdB4EOv5d9LIsNcO8a/SGwLKrPPpnnD++l2RI/Z?= =?us-ascii?q?1y31mD9yp5Re/ExZAFzO+E3gGfTTfzkE+hstzrmYBDfTwSBWS/yTLjBI5Keq?= =?us-ascii?q?1/Zp0LCWGpI8y5w9VxnZjtV2Re9FG9G1MMwNWpdgaKb1zhwQ1Q0lwaoHK9li?= =?us-ascii?q?u80zx7jSsprrGE0SzQ3evibgEIOnNORGV4ilfsO4e0hcgAXEe0dwgpiAel5U?= =?us-ascii?q?HiyqhFpaRwM3XTQUBSfyTsM25iUqywtryNY8NU7JMosCNXX/6mYVCdULL9pA?= =?us-ascii?q?Ea0yz7FWtE2D87by2quon+nxFijGKdLW1zrGbAdcFr2xjf4N3cRfhM3jsJXy?= =?us-ascii?q?R4kiHXBlm6P9mo4dqUjI3PsuagWGK9TpdTazXkzZuctCun4m1nGQe/n/e3mt?= =?us-ascii?q?3jDwc6yzP0195kVCjTtxb8f5Xk17+gPeJgZEloC0f269BmFYFmjoswmJYQ1G?= =?us-ascii?q?AZhpqL+3oHinz+MdZF1qL4d3oNQyAEw8LP7Ajiwk1jIWqDx5jlWXWF3sthe9?= =?us-ascii?q?66b3sO2i0n8sBKDLmb7KRekitzvlq3sxjRbONgnjcG1/Qu8mUaj/sSuAoq0y?= =?us-ascii?q?WdGKwdEldWPSzrjRSI4M6xoL9RZGmxbbi6zFB+ksy5DLGevgFcX270eokkHS?= =?us-ascii?q?Bt9ch/LlTM32Dz6o3+ftnfc84TvAWOkxjcl+hVNI4xlv0SiCp/I239oHklxv?= =?us-ascii?q?UnghxvwZG7vJGLK2t386K/GBJYMSf1Z8wL8DH3kalehtqW35yoHph5GTUKXJ?= =?us-ascii?q?/oQuyzHTIXsvTnOQiOHyMgqneHGbrfGgqf51l8o3LJDZ+rK2mdJGMFwtV6WB?= =?us-ascii?q?mdOEtfjRgaXDogmJ45CgeqxMn6fUd3+D8e+1n4qgFWxeJwLRn/VWXfqxm0ZT?= =?us-ascii?q?coUpSfKwBW7g5a7UfPLcOe9v5zHz1f/pC5sQOCNmmbZwNODWEVR0CJHE7jMa?= =?us-ascii?q?e05dnB8umYAey+I+HIYbqQtexUT+2Iyo630ot64zaMMd2CPnd4D/Ilx0VDRm?= =?us-ascii?q?p2G8LFmzUIUCwajDjCYNKepBum/S13tM+/+uzxWA3z/YuPF6dSMdJ39hCwm6?= =?us-ascii?q?eMLfaQhD5iJDZW15MM32TIyKQR3F4TjSFhbT+tHqgBtSHXSKLcgKhXDwQUay?= =?us-ascii?q?lrLstH87o83hVROc7ckt76zaV3gvkxC1dETlzhhtqpadYRI26jKFzLHl2LO6?= =?us-ascii?q?qCJT3KxcH3fKy9RKZMg+RUrR2wpC2bH1XtPzuZiznpTBevMedWgCGcJhxet5?= =?us-ascii?q?m3cgxxBmj7UNLmdhq7PcdxjT03xb00gm3FNXUHPDdmbUxNtLqQ4TlfgvVlFG?= =?us-ascii?q?xL9mBlIvWcmyaF8+nYLY4bvuBqAiR7kOJa5m83xKZL4y5fRfx6gi3SosRpo1?= =?us-ascii?q?G8nemF0iBnXwZWqjZXmIKLul1vNr/W9pZaR3bL4gkA7WKICxsUodtlD8fgu6?= =?us-ascii?q?FUytfUk6LyJy1O89XO/csTH8LUMt6IMGI9MRr1Hz7ZFBcFTTmuNW3FnUxdl/?= =?us-ascii?q?CT+WOTrpchsJjsn4QBSrxAWVMpEfMaD1hqE8YZIJdrRD8kl6CUjNIQ73qksB?= =?us-ascii?q?bRXNlavozAVv+KA/XvKDaYjaFDZxsMwLP4MZocO5b+20xjdll6hprFF1DXXd?= =?us-ascii?q?BXrS1rdhU0r1lV8HhiUm0z3FroagWz73AJEf65hR02igxlYeQx7jjs5Uw3Jl?= =?us-ascii?q?nLpCcqlkk+h8nliyiLcDHtNKewQZ1WCy3sukgrLJz7WBh6YheonUN4NDfJXK?= =?us-ascii?q?lej7p6dW92jw/ct4NPGeRCQqxEehMQw++YZ+kw21RGtiqn3VNH5ffCCZZ6iQ?= =?us-ascii?q?Qla4Csr3Nd1AJ4d9M6P7bQJLBOzllenaKBoDOn1v0rwA8fO0YM8HmeeCgWt0?= =?us-ascii?q?wULrMmPTan/vRw6QyenDtOYGwMV/0wov108EM8OuOAwjnv075FN0C9LeufL7?= =?us-ascii?q?mWu2LYj86HXksw1l8Ul0lC5bV2ytksc06VV0Ap0buQGA8EOtbFKQFQc8Vd7m?= =?us-ascii?q?PTfTqUveXL3511I523Fvr0Qu+WqKYUnkWkER41H4QN68QBGYWs0EHYLMr8Mb?= =?us-ascii?q?EFyBUs6x7wK1mfCvRGZg6Lmi8do86j1J93wZVdJjYFDGpnNSW356rYqREyj/?= =?us-ascii?q?qGXNY2ZHAaXo0eOX8tQ8K6mjRWv3JZADm5z+IV0g6C4CHgpi7IFjnzc8JjZO?= =?us-ascii?q?uIZRNrENy54isw866thFHN75reOX/1Nc55utDV8+Mbp4yLC/ROTblyq03cgZ?= =?us-ascii?q?VXR2S2U27TFt64P4Lwa48tbdPoCna6VVi/iyktQcnoIdijNLSFjwbzSIlIt4?= =?us-ascii?q?mb2SwsOtWmFjECARtwof8M5L5kbw0Zf5U7eQLotxg5N6GnPAiY0M+hTHq2JD?= =?us-ascii?q?RKSPlfyeG6Z71JwCo2cu+11mcvTpEgw+mw604NS4kAjgvCyva7e4leTS/zF2?= =?us-ascii?q?RHewrVvyo5kHNuO/0uwucl2hzIr0cTMzSKdOxvZ2xEu9A8BVySIXVqBGo3XU?= =?us-ascii?q?WcjY/Z7g6qwb8S4zNXn8xI3u1drHj+opjfbSqiWaCxtZrVsysgbd0no6JrMo?= =?us-ascii?q?zuOcqGu43AkTPBVpXQtReFUCGiHfpAhtdQOD5YQOVPmWw9PMwJo5BB6UkvWc?= =?us-ascii?q?ciJrxPDqYsq6ukaDV+Cy4d0SsZV4Sd3DMfmeewwb3amQmMcJ46KhwLrI1Cgs?= =?us-ascii?q?cBUy5xei4evKijV4HMmG+eRGkLJwMT7QpX6QIFkY9wefvl75TUQ59WzD5WuO?= =?us-ascii?q?l0UirNFpln7Vf7TXuWgVfgQvW7j+OpxR5SzO7r0tQDQhF/E1Vdx+BMmksrM7?= =?us-ascii?q?x3KqgQvo/WsjCTb0/6unziyPe+LllL1cLUb0H4DJbCtWfkTi0c/ngUSJRTyH?= =?us-ascii?q?3DEJQdiBB1aKA1q1VQOIqmYFrx5yQ4x4R1GLm1TcCryEw/rXkcQyelDsFMBP?= =?us-ascii?q?x4v1LPQD1qfZSrp4v/O5lIRW9Q4pKdoU9DkEpxKy651YZcK8ZV7z4OWzhAvy?= =?us-ascii?q?6Qs8asR81Yx8B2FYMMLclitHvnHqNLJoSRqWUsurPz0n/Z5yw8sFCiyTWvBq?= =?us-ascii?q?C3UuNZ8HcaGggyO2uerUwvAPc2/WfJ7lDBqFZ08PlHBrKXl0V+vC59HoxSBj?= =?us-ascii?q?ZOzX2qNFpzQ2Vav+hYNajYfddRTOU1ZR+qJxMxD+Um31CT8UFyg3j5fzR4th?= =?us-ascii?q?FG9CDFQwk0SS4Vj6/3mTIAt86nOSUVS45TYDUlaCfFNRyUlT5LsxZYdk5lRY?= =?us-ascii?q?oVAtBb9LEHxYFU5NbNSV6wKSEZWxxvLho40eFDlUFZrUqYZTvQDRGvdfbSqB?= =?us-ascii?q?14YdmerMi1LPTj5ghHjpnrsOci96UMX3emgxGiQcjCr4/gsd2HrleOdL3mPO?= =?us-ascii?q?KifHDMVyXMjRSshbc+FZbK4SnTMA1fK5Zk1Xooe5/hCXTEPR5ePaIUO1JbVb?= =?us-ascii?q?xmadVBuu1aYtVreKIN+aBzGhKHWgngF5a0oflAMFnTWS/eIDmb/eynv43f97?= =?us-ascii?q?rdRvb8ZsaU3XbIX7p3Potm6Tn8A7rq05VR+lDx2vd28kN1U0bGPjuErNT8Ig?= =?us-ascii?q?ML+MiieVfjvpIzGzPWG418kH33xkFPb8AXWTGl8IwEyJNF73b9UeB43VL1sO?= =?us-ascii?q?1c7blk7pQ47K5yxMeoP6jSL+9asUh9DhiSGApq6o0nAHJjSGBJfu8RNPDRcL?= =?us-ascii?q?wWjcDzquD3E6gX5wOQ++FCdNTIOVrOmsilBTGaUxBEmx0BqTECJAuGy/GFg7?= =?us-ascii?q?N0SdqipeXh2EIt4l2+IwUDzL9z5YaL5LCIpO7Rbxve17QEXLblRt/rpLQ2p0?= =?us-ascii?q?yS/eEklKIJemFtZQ2nFPMQVs8bxmfl16wqzCQsE83ZH7364/5DS2g5ni/8lJ?= =?us-ascii?q?BhAlUWAO0bEaCM/YREkWcyg/bZOcEOcqBehmaPEgapEroFyX6t9yuXL3dqjw?= =?us-ascii?q?rL0xHxW2yz6kH5rTN2QCvL1dfjkVFVWqOxBUhMQyqjIVV4vy+XPAr0qNr3vr?= =?us-ascii?q?w47EUtMmzhtN+Aj2WhN61KEM34PtyTOzE0pEgQjJ0zWNOgxZwbFcC6INcL/3?= =?us-ascii?q?F0duHe5H+zky9dv6dHgJLT4sCU+/rNB3avk7aXq66TyzBE1Hc3oUsz6te6Nv?= =?us-ascii?q?HB/9eKWein134NTydjvAvMRwW6qr3Ar1EaI0OL0kbLmJASPt5DwHk40lrr6/?= =?us-ascii?q?QkQN0u6gpRDJvAZ+kFpTDpIjT421GfY8g4ViOGyTtYAkr1EUVkGKg7wG/wpN?= =?us-ascii?q?jGlWvM9F0oSIhwcFbnhR9uA4UjN00t7FkXwiweEQkCch2bFKunBVj5IosEW0?= =?us-ascii?q?kDbg6H3Lugdqc0w0Jz2LWv6/HXbeBmAKoNLPldhBaUnFdHApIWrbEeQLVkdl?= =?us-ascii?q?9S7qHXvBbtC5TnX/X9kXowNOG1Td5a8c8Dqnsi+RyzRxy+5pdf97wbkoyHdr?= =?us-ascii?q?ZYYZjQu8Bx90hn6iAJdixRhxh/iBS1UfsCq+Dn49jbtoeo6+m1WaYpWeoX7R?= =?us-ascii?q?g1CH5kg5v2nl8jvcnd1/1ARY3NlYT/7AdNLmaMuIbbzxZ8Lu4OJJiwfLp69n?= =?us-ascii?q?UHIC8eJ2kVPdeNbvkx7CBsPC/U51xYDcMGfckYM9bVmQBIlk3pX6le9sXHFV?= =?us-ascii?q?+DEId/bt0m4WXxxjA095s8T+nh5SS5JZDa9V5NOe1MgD9rlNLYq+gf2eDSBz?= =?us-ascii?q?QP4XmFdxh1xTuPy5uKC/bw++WA0s3bV1MCHi4rTohcJTuC+Qq8Ruq2lZXkSR?= =?us-ascii?q?2U6s7tgJ0kcEKfW32xkL4DsqlSDe5Kkj/70SRGFoDpm/KVtMKh6GpJtlJdFo?= =?us-ascii?q?Z+9hnFGLhCMZV6PhT4jdOnRk9mBivwYMvUbAYhuPKKxucQ5OVzL0n+apEVIh?= =?us-ascii?q?IKz7L38nRUQRFoSLHoolaVR+QRa8V6SPnctHBa9ZpgK7MTPFiavJHqoTNIqF?= =?us-ascii?q?c4AQA3bL8wqidXdlLJnA1TWqb7pKQMig0CXt5loUVMA36/OHoi5zrbUqRYlK?= =?us-ascii?q?yRCP0W8jWQSawDSEdoPTl9QxOy3pVhZb2pkepBsmxYgiN3uOIq3CB+RBugpS?= =?us-ascii?q?3soLoA1ik+97G+qDUMomdFTuGZkyfUFVVD0uoFgroGB3bl81y8b2EJbJHu77?= =?us-ascii?q?l/OcTg6Y4h7mwxYRo9ey0GXPygBD/rgqKJA4yPtddciwCXuMXKc7C/Ny8SNq?= =?us-ascii?q?4yyRj7XXhyzhDenAp08GsMWjih4sckJJ+8Ock52CWlAm3bdFcQ4qNTrsT9r1?= =?us-ascii?q?kLTPE5aVl52mVsztCHRjERRMzIA2s1iQwkZntffZJb7R8VDbIogiqJvqZa4g?= =?us-ascii?q?EUeinbHZq/9onWg8jIxWE3Tc12yWLOuq2FmpQq3WVhm9N16C6OpXsTe/XcU8?= =?us-ascii?q?9tGXjzypxfxPf/Z/q3tOAHT5FqyLO7UP8NKsOj43e52I12Wk+5wbQTB1+5P/?= =?us-ascii?q?UfybfbUielT2qYVP+Vc2iNmTY2LEry5RiuLl0qZ8ZGtUg9MvHNhpREjQ3uTa?= =?us-ascii?q?t0RjmMpV/c1GEjM/kVdwExuIi8YAEKUegRZ/ScJegp3f0+B1sMb2PTEStwFe?= =?us-ascii?q?C2rUannJJnNHV4/UX6fePt/xjkMNuXHRkEC5Tarp9q+fGhQGKOI3pgwwNzPE?= =?us-ascii?q?Vu8OffDVsxvPdGc5mNhdjQm8h70ekdevd2Py09v8Icl4Ng5ISPzseFbwvRzp?= =?us-ascii?q?fzJNHSpPiUGfvfwFo2ejISbr1MNRv4+4ggeNM/V7DJF7xDsjwHAq4rBpcmMj?= =?us-ascii?q?G1vJl9MQc7VwnWfrn81tHju+ajfpJJozrT6VUqIWHXvBhVjrSPUQFjb52sz0?= =?us-ascii?q?73KZQ0SyMJ+8ZhETN6DYBPHIUGtAPhDJmKzuXzpsWw8AtCsvULquKkB+jDzt?= =?us-ascii?q?Wi9514RZlB/UiCNzuXA7Nk1AAtrO23j+yI957rE8L5MYcGXe12WSjBLLrBBJ?= =?us-ascii?q?++MRqJIMv3f0MA+LmZhvYxfhyXZS39F4ibriKpMu4stUkyzI11eOj7yTEp67?= =?us-ascii?q?jd38u0bGZe8GPrgXmUO9N74VDEAvbSF0ZYTfeJ/mF/EYUNYIf0/ftIOtsnlp?= =?us-ascii?q?zUtxJ+6DVEzdutP7mqrkiK3FlyM53cMh2tk3I9WI8XMFGkPEAxm27FuzHYBn?= =?us-ascii?q?hBKsWMN8ZgmpCWAwbr6k03nnsiMCoJTm7pQ8qBfGsWwcSzYCWU+w9RSdUOhe?= =?us-ascii?q?i6fQg/rKLkDaEiAZhflujimf1B2fZgLyXeQoISazrdNrB7FjpYCuHeoh4jZR?= =?us-ascii?q?tS9/B/Yo4oYdCjaAVPFUyjxCX0wBqImRnsfsGo0a2KCCIX9GhXiazD3CQKpg?= =?us-ascii?q?O8//2eh5uwfqreacTOUeLfKmIIUD2XXz41C0nhrU+pp/ce+veeLWoFqFcObQ?= =?us-ascii?q?qJDwgC4KtoqI6DXSfoheR/cchS17ihUCfqRXg9zfNqXHwZvF2QQ/cFCQjdZm?= =?us-ascii?q?Pgh2wZogG5O/tQ5i2+PaCAzKYMCvQfWtUKf/CcWNSefPlfI3EtlzFKXYT0c9?= =?us-ascii?q?7dquM/1VTFBSscHrLT/VKTBEiRXrSHxj3tUIlU94g5syYl4JTRyylwFanF?= X-IPAS-Result: =?us-ascii?q?A2CLAwANsg5b/wHyM5BcGwEBAQEDAQEBCQEBAYNBA4EFX?= =?us-ascii?q?BYSjFqMAYMIk1CBXSoTAYZeITgUAQIBAQEBAQECAWsoQg4BgWQkAYJPAwMBA?= =?us-ascii?q?iQTFCAOAwkBAT4CCAgDAS0VEQYBBwsFGASDAYIBAwGnHTODeAEBhEuBaIg3g?= =?us-ascii?q?VQ/gQ+HTQESAYVzAodEkSEHAoFnjG4LgTuGUoR/K5JAIWFxTSNQgkOCIBeNY?= =?us-ascii?q?QE3bXoBAYgOhFSCOAEB?= Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 30 May 2018 14:20:45 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus.infosec.tycho.ncsc.mil [192.168.25.40]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w4UEKcgq011712; Wed, 30 May 2018 10:20:43 -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 w4UECYmI011028 for ; Wed, 30 May 2018 10:12:34 -0400 Received: from goalie.tycho.ncsc.mil (goalie.infosec.tycho.ncsc.mil [144.51.242.250]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w4UECcOZ011002; Wed, 30 May 2018 10:12:38 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1DzAADrrw5blywbGNZcHQEBBQELAYNBg?= =?us-ascii?q?WQWEot7jGCDCJM8gXiEdwKCHCE0GAECAQEBAQEBAhQBAQEBAQYYBoYAAwMnYj8?= =?us-ascii?q?SVwYBEoMiggQBpxIzg3gBAYRLgWiIN4FUP4EPjVQCh0SRIQcCgWeMbguBO4ZSh?= =?us-ascii?q?H8rkimCCk0jgxOCIA4JEY1QATdtkBYBAQ?= X-IPAS-Result: =?us-ascii?q?A1DzAADrrw5blywbGNZcHQEBBQELAYNBgWQWEot7jGCDCJM?= =?us-ascii?q?8gXiEdwKCHCE0GAECAQEBAQEBAhQBAQEBAQYYBoYAAwMnYj8SVwYBEoMiggQBp?= =?us-ascii?q?xIzg3gBAYRLgWiIN4FUP4EPjVQCh0SRIQcCgWeMbguBO4ZShH8rkimCCk0jgxO?= =?us-ascii?q?CIA4JEY1QATdtkBYBAQ?= X-IronPort-AV: E=Sophos;i="5.49,460,1520913600"; d="scan'208";a="288401" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 30 May 2018 10:12:37 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3Ag3FqmhVMP/mGcbSIGBwL7v4v1sPV8LGtZVwlr6?= =?us-ascii?q?E/grcLSJyIuqrYZRaCtKdThVPEFb/W9+hDw7KP9fy4BCpYud6oizMrSNR0TR?= =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?= =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9uLBi6txndutULioZ+N6g9zQ?= =?us-ascii?q?fErGFVcOpM32NoIlyTnxf45siu+ZNo7jpdtfE8+cNeSKv2Z6s3Q6BWAzQgKG?= =?us-ascii?q?A1+dbktQLfQguV53sTSXsZnxxVCAXY9h76X5Pxsizntuph3SSRIMP7QawoVT?= =?us-ascii?q?mk8qxmUwHjhjsZODEl8WHXks1wg7xdoBK9vBx03orYbJiIOPZiYq/ReNUXTn?= =?us-ascii?q?dDUMlMTSxMGp6yYYsRAeQPPuhWqIvyp1UBohSiHgSsGP/jxyVUinLswaE2z+?= =?us-ascii?q?IsGhzG0gw6GNIOtWzZos/rO6cOT++11rTDwzrFb/xLxzj98pPHchc7ofGDQL?= =?us-ascii?q?l9dtLRxlczFwzblFWcs5LqPzWI2esTqWiU9O1gVfigi2M8sAFxpT6vx8c2ho?= =?us-ascii?q?bVgYIVz0nJ+CNky4g2Pd21UFB3bcOrHZdKqS2XOJF6Tt0gTm1ytys3xaUKtJ?= =?us-ascii?q?C5cSQQ1ZgqyRrSZ+aaf4WI4x/vTvidLDN+iXl4YrywnQyy/lKlyuDkVsm7zl?= =?us-ascii?q?JKri1dn9bCrH4D2QLe58aZR/Vn4kqtxTaC2xrN5e5aJEA0jqXbJ4QkwrEql5?= =?us-ascii?q?oTtV7PHir3mEXylKOWd0Mk9fa06+n/fLnqu5CRO5VqhgzxKKgihM6yDf43Pw?= =?us-ascii?q?UBR2Sb/P6z1Lzn/U33WrVKifg2n7HDvp/EOcQUuLS5DxVa3IYl9hmwES2m38?= =?us-ascii?q?8fnXkdI1JIYwmHj4/vO1DOOvz3EfC/g1G0nDdx2//GJqHhAonKLnXbi7fuYK?= =?us-ascii?q?195lVAyAsz0d9f55VUBqsHIPLoQED9rtPYDhgnMwas2eboFM191p8CWWKIGq?= =?us-ascii?q?KZK73dsVuJ5uIpPumNa5QYuCr9Kvc55/7uimU1mVkGfaazx5cXZ3e4Huo1a3?= =?us-ascii?q?meNC70j8sMCyEHuAYzVubtklKqSjlVdjC5WKdqonkDAZ+iRaLEQZqgyOiZ1T?= =?us-ascii?q?q/NoVfe2QDD1eLC3qufIKBDbNEUz6fOs9slHQ/ULGlT4IwnUW1uBTS16tsLu?= =?us-ascii?q?2S/DYR853kyo4xr8DJlBp6zTVuDt/Vh2yVRnt1hUsQTiU3x7h7qEdwjFCZ3v?= =?us-ascii?q?48y95RENFIr9ZOSB07LtaIzeV/Bsu0XkTEec2TSU2ORc+vCjU8CNk2xolKK2?= =?us-ascii?q?p0HdSviljhwjClDrkO3+iHDZo1/6be9338I8J0zXHWkqImig9iCudIKGLuoq?= =?us-ascii?q?Nz+Q/JC8adn0GUm6itb6g0xiPB9G6fi2GJuRccGFprXKHEW20PTlfHptT+oE?= =?us-ascii?q?XZRvmhDqpxdkMVzc+EN7sPcdDikE9HWOamPdPSfma8s3m/CAzOxb6WaofuPW?= =?us-ascii?q?IH03OZQBwAkgYO7TOFOBI4CyOJvW3TFnptGEjpbkeq9vNx/jfzBHQ51Q6HJ2?= =?us-ascii?q?ApkfKV8xoRlPrWA6cI06gLtQ8hojFwDVD71NXTXZ7I7TJoYaEUTJt7qHJM9m?= =?us-ascii?q?/fsQFsdNT0N6l/glsVcCxzvkXzx1NpDIhc18kgqTUhyw8keoyC11YUTz6E0I?= =?us-ascii?q?q4F7vbJ3P4+wqgI/rO103TypCb/KsC8v4/sVrLpwavBwwp9HAxgIod6GeV+p?= =?us-ascii?q?ifVFlaapn2SEtiskEi/+uAMCAg+4PZ02FtOqCoszjEnsgkH/Yh1g3/JoVCKK?= =?us-ascii?q?mITV7qGpVEQcWjLfcl3V2gbxZCOeFWp+Y4PMKjIv2B3qPjfONthymvgmkP5o?= =?us-ascii?q?dhmlmN+CxxRq+A35sMz/yCmArSUTD6gVo=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0C/AAAksA5blywbGNZcHQEBBQELAYN?= =?us-ascii?q?BgWQWEot7jGCDCJM8gXiEdwKCHCE0GAECAQEBAQEBAgETAQEBAQEGGAZXgjU?= =?us-ascii?q?kAYJPAwMnYj8SVwYBEoMiggQBpxIzg3gBAYRLgWiIN4FUP4EPjVQCh0SRIQc?= =?us-ascii?q?CgWeMbguBO4ZShH8rkimCCk0jgxOCIA4JEY1QATdtkBYBAQ?= X-IPAS-Result: =?us-ascii?q?A0C/AAAksA5blywbGNZcHQEBBQELAYNBgWQWEot7jGCDC?= =?us-ascii?q?JM8gXiEdwKCHCE0GAECAQEBAQEBAgETAQEBAQEGGAZXgjUkAYJPAwMnYj8SV?= =?us-ascii?q?wYBEoMiggQBpxIzg3gBAYRLgWiIN4FUP4EPjVQCh0SRIQcCgWeMbguBO4ZSh?= =?us-ascii?q?H8rkimCCk0jgxOCIA4JEY1QATdtkBYBAQ?= X-IronPort-AV: E=Sophos;i="5.49,460,1520899200"; d="scan'208";a="12288821" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from updc3cpa05.eemsg.mail.mil ([214.24.27.44]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 30 May 2018 14:12:36 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;0fa7eff4-3bd7-4d42-8877-a7f3df6e4b32 Received: from localhost.localdomain (localhost [127.0.0.1]) by UPDCF3IC09.oob.disa.mil (Postfix) with SMTP id 40wswB5dBqz2NhLJ; Wed, 30 May 2018 14:11:38 +0000 (UTC) Received: from UPBD19PA06.eemsg.mil (unknown [192.168.18.7]) by UPDCF3IC09.oob.disa.mil (Postfix) with ESMTP id 40wswB07hHz2NhM4; Wed, 30 May 2018 14:11:38 +0000 (UTC) Authentication-Results: upbd19pa06.eemsg.mail.mil; dkim=none (message not signed) header.i=none X-EEMSG-check-008: 313316238|UPBD19PA06_EEMSG_MP6.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 37.139.156.29 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0DNAABvrw5bhx2ciyVcHAEBAQQBAQoBAYU7Eot7jGCDCJM8gXiEdwIIghQhNBgBAgEBAQEBAQIUAQEBCgsJCCgvhSkDAydiPxJXBgESgyKCBacQM4N4AQGES4FoCQGILYFUP4EPjVQCh0SRIQcCgWeMbguBO4ZShH8rkimCCk0jgxOCIA4JjWEBNz0wkBYBAQ X-IPAS-Result: A0DNAABvrw5bhx2ciyVcHAEBAQQBAQoBAYU7Eot7jGCDCJM8gXiEdwIIghQhNBgBAgEBAQEBAQIUAQEBCgsJCCgvhSkDAydiPxJXBgESgyKCBacQM4N4AQGES4FoCQGILYFUP4EPjVQCh0SRIQcCgWeMbguBO4ZShH8rkimCCk0jgxOCIA4JjWEBNz0wkBYBAQ Received: from seldsegrel01.sonyericsson.com ([37.139.156.29]) by upbd19pa06.eemsg.mail.mil with ESMTP; 30 May 2018 14:11:37 +0000 X-EEMSG-check-009: 444-444 From: Peter Enderborg To: , Paul Moore , Stephen Smalley , Eric Paris , James Morris , Daniel Jurgens , Doug Ledford , , , , "Serge E . Hallyn" , "Paul E . McKenney" Date: Wed, 30 May 2018 16:11:02 +0200 Message-ID: <20180530141104.28569-4-peter.enderborg@sony.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180530141104.28569-1-peter.enderborg@sony.com> References: <20180530141104.28569-1-peter.enderborg@sony.com> MIME-Version: 1.0 X-Mailman-Approved-At: Wed, 30 May 2018 10:18:15 -0400 Subject: [PATCH V3 3/5 selinux-next] selinux: sidtab_clone switch to use rwlock. X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.21 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 We need a copy of sidtabs, so change the generic sidtab_clone as from a function pointer and let it use a read rwlock while do the clone. Signed-off-by: Peter Enderborg --- security/selinux/ss/services.c | 20 +------------------- security/selinux/ss/sidtab.c | 39 ++++++++++++++++++++++++++++++++------- security/selinux/ss/sidtab.h | 3 ++- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 4f3ce389084c..2be471d72c85 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -1891,19 +1891,6 @@ int security_change_sid(struct selinux_state *state, out_sid, false); } -/* Clone the SID into the new SID table. */ -static int clone_sid(u32 sid, - struct context *context, - void *arg) -{ - struct sidtab *s = arg; - - if (sid > SECINITSID_NUM) - return sidtab_insert(s, sid, context); - else - return 0; -} - static inline int convert_context_handle_invalid_context( struct selinux_state *state, struct context *context) @@ -2199,10 +2186,7 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) goto err; } - /* Clone the SID table. */ - sidtab_shutdown(old_set->sidtab); - - rc = sidtab_map(old_set->sidtab, clone_sid, next_set->sidtab); + rc = sidtab_clone(old_set->sidtab, next_set->sidtab); if (rc) goto err; @@ -2926,8 +2910,6 @@ int security_set_bools(struct selinux_state *state, int len, int *values) goto out; } - seqno = ++state->ss->latest_granting; - state->ss->active_set = next_set; rc = 0; out: if (!rc) { diff --git a/security/selinux/ss/sidtab.c b/security/selinux/ss/sidtab.c index 5be31b7af225..811503cd7c2b 100644 --- a/security/selinux/ss/sidtab.c +++ b/security/selinux/ss/sidtab.c @@ -27,7 +27,7 @@ int sidtab_init(struct sidtab *s) s->nel = 0; s->next_sid = 1; s->shutdown = 0; - spin_lock_init(&s->lock); + rwlock_init(&s->lock); return 0; } @@ -116,6 +116,31 @@ struct context *sidtab_search_force(struct sidtab *s, u32 sid) return sidtab_search_core(s, sid, 1); } +int sidtab_clone(struct sidtab *s, struct sidtab *d) +{ + int i, rc = 0; + struct sidtab_node *cur; + + if (!s || !d) + goto errout; + + read_lock(&s->lock); + for (i = 0; i < SIDTAB_SIZE; i++) { + cur = s->htable[i]; + while (cur) { + if (cur->sid > SECINITSID_NUM) + rc = sidtab_insert(d, cur->sid, &cur->context); + if (rc) + goto out; + cur = cur->next; + } + } +out: + read_unlock(&s->lock); +errout: + return rc; +} + int sidtab_map(struct sidtab *s, int (*apply) (u32 sid, struct context *context, @@ -202,7 +227,7 @@ int sidtab_context_to_sid(struct sidtab *s, if (!sid) sid = sidtab_search_context(s, context); if (!sid) { - spin_lock_irqsave(&s->lock, flags); + write_lock_irqsave(&s->lock, flags); /* Rescan now that we hold the lock. */ sid = sidtab_search_context(s, context); if (sid) @@ -221,7 +246,7 @@ int sidtab_context_to_sid(struct sidtab *s, if (ret) s->next_sid--; unlock_out: - spin_unlock_irqrestore(&s->lock, flags); + write_unlock_irqrestore(&s->lock, flags); } if (ret) @@ -287,21 +312,21 @@ void sidtab_set(struct sidtab *dst, struct sidtab *src) unsigned long flags; int i; - spin_lock_irqsave(&src->lock, flags); + write_lock_irqsave(&src->lock, flags); dst->htable = src->htable; dst->nel = src->nel; dst->next_sid = src->next_sid; dst->shutdown = 0; for (i = 0; i < SIDTAB_CACHE_LEN; i++) dst->cache[i] = NULL; - spin_unlock_irqrestore(&src->lock, flags); + write_unlock_irqrestore(&src->lock, flags); } void sidtab_shutdown(struct sidtab *s) { unsigned long flags; - spin_lock_irqsave(&s->lock, flags); + write_lock_irqsave(&s->lock, flags); s->shutdown = 1; - spin_unlock_irqrestore(&s->lock, flags); + write_unlock_irqrestore(&s->lock, flags); } diff --git a/security/selinux/ss/sidtab.h b/security/selinux/ss/sidtab.h index a1a1d2617b6f..6751f8bcbd66 100644 --- a/security/selinux/ss/sidtab.h +++ b/security/selinux/ss/sidtab.h @@ -29,7 +29,7 @@ struct sidtab { unsigned char shutdown; #define SIDTAB_CACHE_LEN 3 struct sidtab_node *cache[SIDTAB_CACHE_LEN]; - spinlock_t lock; + rwlock_t lock; }; int sidtab_init(struct sidtab *s); @@ -51,6 +51,7 @@ void sidtab_hash_eval(struct sidtab *h, char *tag); void sidtab_destroy(struct sidtab *s); void sidtab_set(struct sidtab *dst, struct sidtab *src); void sidtab_shutdown(struct sidtab *s); +int sidtab_clone(struct sidtab *s, struct sidtab *d); #endif /* _SS_SIDTAB_H_ */