From patchwork Fri May 19 12:48:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9737159 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 292656034C for ; Fri, 19 May 2017 12:56:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D64D2892F for ; Fri, 19 May 2017 12:56:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1193F28933; Fri, 19 May 2017 12:56:47 +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=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (smtp.nsa.gov [8.44.101.8]) (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 2FFE32892F for ; Fri, 19 May 2017 12:56:45 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,364,1491264000"; d="scan'208";a="7241687" IronPort-PHdr: =?us-ascii?q?9a23=3AWshIRRLsacA2LTwpitmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgQK/X8rarrMEGX3/hxlliBBdydsKMbzbCP+P2wEUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6/bL9oMhm6sArdu8kVjIB/Nqs/1xzFr2dSde?= =?us-ascii?q?9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLY?= =?us-ascii?q?TQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVRHniD?= =?us-ascii?q?0DNzUk7m/ZjMJ+h79frB64uhBz34vYbYeIP/R8Y6zdZ8sXS2pfUMhMWSJPAYSy?= =?us-ascii?q?YIkBD+oZP+tUsofwqEUVrRalGQWgGPnixiNSi3PqwaE31fkqHwHc3AwnGtIDqH?= =?us-ascii?q?rao8/zNKwPVe610bPIzTrdYPNQwjf29Y/FfQ07rvGKXLJ/b87RyUs0GgPAkFqQ?= =?us-ascii?q?rYjlMCmT1uQKvGmX9fZvVeWqi2M+rQx6vzuhxt80h4XUiY8YxUrI+CVkzIovO9?= =?us-ascii?q?G1R1B3bcS5HJdIqi2XM4V7TtktTmxqoio217wLtJ6hcCQX1pgqwxjSYOGdfYeS?= =?us-ascii?q?+BLsTuORLC99hHJiZb2wmQ6/8VOlyu3gTsm010tKrjZdntnMqH8N0xvT59CbSv?= =?us-ascii?q?Rn5Eeh2CuP1xvJ5uFYIUE7iarbK5k7zr42ipUTqljMEjXzmEX3iK+abkQk+u62?= =?us-ascii?q?5OT7erjqu5CROoBuhgz+L6gigNKzDOsmPgQUQmSX4eG826fi/U39TrVKlPo2kq?= =?us-ascii?q?zBvZDBO8sboq+5AwlI0ocs8hqwFDCm0MkenXYbMl1FYwmKj5TpOl7SIPD4Cu2z?= =?us-ascii?q?g1K3kDhx3fzGMbrhAovVInjZjLjhZap961JbyAcrz9Bf4JRUBasdIPLzQEDxss?= =?us-ascii?q?fVDh0+MwyyxuboEs591p8AVmKVGa+VKqTSsUWH5ug3OemDeJcVuCrhK/gi//Pu?= =?us-ascii?q?j305lkUBcqmqxpsXb3a4HvV4I0iCb3rshsoBEGgRsQojSuzqlECCXSRUZ3aoUK?= =?us-ascii?q?I2/is7B56+DYffWoCth6SM3D+lEZJNeG9GDFGMEWvvd4ifWvcDdjydLdF7njwD?= =?us-ascii?q?T7ihRJcr1Quyuw/i17pnMu3U9zUFupLk0th14fDcmg829Tx1FMmSyX+CT3tznm?= =?us-ascii?q?8SQD82xq9/q1Rnylifyah4n+BYFdtL6vxUTgc1L4TcwvdmBND1XwLOYs2GSE26?= =?us-ascii?q?Qtm8BzE+UM4xyccUY0lhA9WikgzD3y2yDr8UkbyLGII78qbC0Hj0Ocl912zG1a?= =?us-ascii?q?k6glkhWstAK2umhqtl+AjSA47GiEKZlqmweaQbxi7N+3+JzXCSs0FATA5wTaLF?= =?us-ascii?q?UGgfZ0rXqtT54FjPT7qqCbg+MwtBz9SOKq1QZd3zjlVGRenjN8rEb2K3hWiwGQ?= =?us-ascii?q?6CxqmQY4ryZ2UdwCLdBVAKkgAS+XaGMBYxBj26rmLQEjNhCFXvY1n2/ulmsnO7?= =?us-ascii?q?SU00wB+WYE19zba1/QQVhfOEQfMJwr0EoDshqylzHFul0dLWEcCPpwx9c6Vdet?= =?us-ascii?q?Mw+1JH1XrYtwBkJZyhIbtiikQZcwRtsEPkzw93BZlYkcg2sHMqyxJ/KaGC31NC?= =?us-ascii?q?cDOYwIv9Or7NJWnx+xCvdrTa2lbE0NaZ4q0P8ug3q03/vAG1EUov629o3MRP03?= =?us-ascii?q?ud+JrKFhEfXojtXUYy7RR6oKvaYiYl7YPOyXJsKbW0siPF298xGOQq0BKgcMlE?= =?us-ascii?q?MKOYFA7yFNYXB9OyJ+wrhVepaA4EPOFI+6IuOcOpaeeG0raxPOl8hDKmkXhH4I?= =?us-ascii?q?dl30KX+Sp8UOnI340Zw/yDxQuHUTD8jVmkss/tn4BIfzcSEXSjySL8Ho5eerVy?= =?us-ascii?q?fZoXCWepO8C2yM9xh5rxW3FG7l6jHEgL2NG3dhqIdFP9wAhQ2V4QoXy9liuy1y?= =?us-ascii?q?Z0nC0xrqqDwCzOxPzvdAYaNWFWRWltl1PsLJOogNAdWUincxImlAC55UrgwahU?= =?us-ascii?q?urh/JXHJQUhUZyj2M31iUqyou7qcYs5A9I8osSJNUOimfV+aSrn9ox0V0y74G2?= =?us-ascii?q?texTY7eCuwupX+hRB6j3idLHlrpnrDZc5w3Qvf5MDbRfNJ2joGRTJ4iSXOClin?= =?us-ascii?q?Idap+dSUl5HesuGxTG+hTYVTcSjtzYOBqCS7/ndmARuhkPCvgtfnCxQ10Tfn19?= =?us-ascii?q?l2UiXFtAz8Yo7v16S+L+1nZFVnBFjy6sdhAYF+j5c/hIoK1XgdnJWV8mINkX3v?= =?us-ascii?q?PtVDxaL+cH0NSCYTw9HP/Qjl3FdvIWiTy43iUXWdxtdhZ968Ym4N3yIx88ZKCK?= =?us-ascii?q?CI47Bemyt6vEa4pxrLYfdhhjcd1ecu6HkCjuEKpgUtyD6dD6sRHUZGOyzsjBKI?= =?us-ascii?q?4M6irKlNY2ava7ew3lJknd+9FLGCvh1cWHHhd5c6ByBw88F/P0zU0HLp7IHkZM?= =?us-ascii?q?ffbcgIux2JiBfPkfJVKIkrmvoRgipnJHj9smE7xO41ihxux566s5adJ2Vr4q25?= =?us-ascii?q?HgZSNifpaMML5jHtkaFek96I34CpA5psASsLXJ31QvKoCj4Ss+roNxqWGj0mtn?= =?us-ascii?q?ibAabfHROY6Ep+t3LACY2rN3WMKXYFzNViWBmcKFVRgA8OWjU2hJk5FhqlxMb5?= =?us-ascii?q?akd2+igR5kLkqhtL0u9oNBn+UmPBqwqzbzc0T5afLBRI4QFe+0fVMcue7udtEC?= =?us-ascii?q?1C+J2ushCNIHSBZwtUFWEJRlCEB1f7M7mg/9bA9fSYBu27L/bVb7WBt/FRV/CS?= =?us-ascii?q?xZ21yotm5TGMNseRMXZ+E/03wE1DXWp2G87BgTUAVzQXlz7Rb86cvBq84Dd7r8?= =?us-ascii?q?6l/PTuQg3v4YyPCrtJPNp15x+2hL2PN+mKhCZ2MTxYzI8DxWfUyLgD214fky9u?= =?us-ascii?q?dyOzHrsdri7CVqTQmrNQDx4AcC58LtdH76cm0glKI87bhcv/1qRkgf4tF1dFSV?= =?us-ascii?q?vhl9mvZcwQOW69LEvHCV2FNLSHPz3L2N33Ya29Sb1WlupUsQG/uTeBHE/nJDiD?= =?us-ascii?q?kCPpVx+3O+FWkC6bJABeuJ26cht1FGfjV8zpZQe0MN9tlzI236Y5hmjQOm4fLD?= =?us-ascii?q?h8aVlCoqeU7SNFhPVwAXZB4mN5LemDmCaY7+7YJowQsfR1HiR+j/ha72giy7tJ?= =?us-ascii?q?8CFEQ+R4mC3Trt5qp1GpjPKPxyF9XxVQsDZLg5iHvUJ4OaXW7pNAQ2rL/AoR7W?= =?us-ascii?q?WMDBQHv8BqCtzgu6BXzNjCj7/8JylZ/NLV58QcAdLYKMWdMHouKRDpAiLbDBMZ?= =?us-ascii?q?TT63MmHSn1ZSkP6I+X2LsJc3sZ/smIIQRb9dUVw6DPIaCkB+E9wFL5Z7RDQkka?= =?us-ascii?q?SUjMQQ/3qxsAHRRNlGvpDATv+SHfLvKDODgbleYBsJwK33LYIIOY3h3ExtdFp6?= =?us-ascii?q?kZ/WFErXWNBCvjdubhQooElX9nhxUHEz0Vr/agyx+H8TCeK0nhkuhwt4f+si7j?= =?us-ascii?q?Ps7kw0JlrNvyswjFM+mdP+gTCScT79NqGwUp9KCyDsrUg+Lov7QxppbQ21hUFk?= =?us-ascii?q?LinLR6lPgLR6b2BklA/ctIBUFv5dV61LfRgQxf+PZ/Uyz1tdqj+rxUlZ6uvZEZ?= =?us-ascii?q?FijhclcYawr3Jc3AJudMM6KrbOJKpI01dQnbmDsTWy1uArxw8fKV0N/32Ody4V?= =?us-ascii?q?okwIN6UmJiqy8uxq9wOChyNJeHIQWPoyvvJq6kQ9NvyEzyLnyb5MNEaxNu2YL6?= =?us-ascii?q?6CtGjAk9OITkk31kMSmElP5aJ23ts7c0qIS0Avy6OcFw8XOsrGKAFVaddS9XfI?= =?us-ascii?q?cCmStuXNxI56MJ+mFuD0V+OOsrgbgl68FgYzA4sM9tgBHoWr0EzAMMjoMLsFyR?= =?us-ascii?q?Ir5AT3OVmIF+pJdwyRkDcGosC/y5l30ZNbJj4DHWV3KT+36arPpg82nPqDW887?= =?us-ascii?q?YnQAXooELH02XtG6my5CsnRPCzm3yv4WxBKE7zDiuiTaFCP8YMZ7ZPeIeRNsD8?= =?us-ascii?q?m7+Sk+86izjl7X7pXeJmHhONt/u9/O6fkVqI2dB/NSU7Z9r1/Wm5NESHyyT27P?= =?us-ascii?q?Ddm1KoD/a4k2d9P0DGq6X0e+izIyQcbxOsqtLqiWjgHpQ4ZUrJeU3Co5Oc+7CD?= =?us-ascii?q?4eBw96p/sf66JkeQ0Df507bAbyuAQ6NqywPBmX3c2rQ2etLztWSP9fwv+harNM?= =?us-ascii?q?ziojdOm6xGIuTpEn1eW391ACRI0ShBHE2fmjf5VeUTT0GnFFYArAuyw5mnN7Oe?= =?us-ascii?q?kv3Ocw3gnIsUIGPDCRdO1lcmtEv8szBVmKO3V5FnI4R0OAjYrE+gOsxbYS/ypB?= =?us-ascii?q?kNZU1u1FtGP+sIfGbjyxQqKmtZLbvjE8Ytghpq1+LZbsItCatJ/EmDzQUoXQuB?= =?us-ascii?q?WfUCGmD/pahsRQICVATfZUm2EqI9AJtJFd5ko2Usc+I71PB7c2prC2dzVrES4S?= =?us-ascii?q?wTUeV4Oa0zwImv281KfClheMbJQiNwQJsI9YjdsHVC55eTgTpLO5V4rMiW+LVG?= =?us-ascii?q?wLIAYV7QRD4AIAl4BwfuD54IrGVpBM0TtWr+hyUiTVCpli70H7RX2OgVjkVPWh?= =?us-ascii?q?lPSk3AxIwP3w0tkbWRt/CUlHyOZVjUYoKa94JLcOsYLQtT+Ib0z6tnr3yOS6PF?= =?us-ascii?q?lR1dHUd1rgAYrdsmr8VjcT+WcaRI9IzHHfG48fkw9+aKYsv1VDPpypelz55zw/?= =?us-ascii?q?3IRpHr+4Vc+xy1Yit3YGSD+gE8BdBOF+rFLXRDplboixp5X/JpVSRHVc+J6Gpl?= =?us-ascii?q?dYkUVtMjK5xoFGJ8FL/DEMQCBFoS+Bs9uqVM1Dxch2AocQItd4vnfwA79ENISU?= =?us-ascii?q?o3ItoLDvzGHW+ywkuleg2DqzA7O4T/5e/2AGGgUmPX6epVMrD+Qx6Wrd707Csk?= =?us-ascii?q?hs/+hFAriAk19xrCx6HpBUCTZDzWqlIEhrTHlar+VaL7zYc85bQ/YsfhKgJgIx?= =?us-ascii?q?FeU40EyT4UF7g2r2bzZ0tgRE5yDXRxM0WjUNgrfxhT0erdmqNiQUS51UcTksbT?= =?us-ascii?q?rJJgyAlC9LuxZfbl1lVIoCAtZZ4b0b25Vb/tbaQ0a2NS4FRABiNh4/0fdHj05M?= =?us-ascii?q?rliXeSDHAgq0bvvPthp3fdmPo8K3MPv5+xpIhZ39vOA+6aoDW2WsmRexTtDGs4?= =?us-ascii?q?/8qtqKu1OWdKfjL+2ze2LOTCTXgBCrgrckEoPK8DTNPwpdN5l602ArYZz7BW7M?= =?us-ascii?q?JxRGKLoRJ1BHWqBiddVGvudaatd4eKYT56BiGA+ISwjyGIyrsPlGNEzcRSrfLy?= =?us-ascii?q?WG9uywv57T4abaSej6acyG32zHTL5vPpdm9Tn7HK/n0YpE9Ury3vdi6F96SUTc?= =?us-ascii?q?PC+bt9nhIB0E5NW5dkT+pJIpBS3ZDI12kHXz2kFKb9AXTDGy8JQE1JNZ7279Se?= =?us-ascii?q?Bi3Ujpt+1S7L1k5pMp471yzMe0OKPSKehbsUB7AxibHANq9o43DGh4XWBRbfcb?= =?us-ascii?q?KO3NcqQBkcDut+f3GrQV6BKP/exZZ8HHJ0bclcahETycVQZLnAEaqT4dNAec0e?= =?us-ascii?q?CKm7NsQ8a/uef5wl4t40S5LhMew7Bt+IaE+q6MpODJahvc1qULVbbxScPytLss?= =?us-ascii?q?vVme5fo+lL4BYmZ1eRGoEPABVs4BwWft1aYqzSY3HsPCGbLg/eRPV3M/njLugZ?= =?us-ascii?q?ByBU4WGu8OHbqW4Ytegno4m/bHOdEMdaBCgGmPHwa+ErAe0X6r9zeXIG59jxHL?= =?us-ascii?q?1BHwR3+z7FDooiJjRCvMzs3skkxLWbmrC0ZSWDCpOUxjsD+VOgrnqsb3s7wv7E?= =?us-ascii?q?4qKmzkqM6NlGy5NbNNAsLwOceRISYxpFMYlpExQMKg2ZwDE9qnPNgR6G1+bufZ?= =?us-ascii?q?626zly9BuKJHiorF78Gb5PrYAH6gj7eApLWV3jBYzXo4sk8j5dC8LP3O4MeKQ/?= =?us-ascii?q?uw3WYLUyh/oxfBXwKyqrHDtFAbI1KL313EmIMUJdFUxmI42Vv45Oc5T9I86h5e?= =?us-ascii?q?GpzGZ/wcuTD5ICH0zkqHY9IrSime1CNaHlD0EVl9A6U83Xz/vcLXmnfK+l0oQI?= =?us-ascii?q?Zwe1bhhRNpE4UyMVgt50QPwiofDQgNbgiWDLCpBEv/N4QLSVMOaQ+Z07imZKg4?= =?us-ascii?q?wVd/wrS15O/cdeZ8HbYCNu5Bjg6Sm1hWAokZsawFQLNyYVBd9q/XphT6C4f9Qv?= =?us-ascii?q?jmkWE9OuGyQs9H788WrWYi4hy4Rxq685hP9bEbiIqHdqRce5jDoNh871t75T4I?= =?us-ascii?q?biFNmAJwjw+lXuAcquHj5cLbsJmx5ua1SqktQ+QX9x4pB2VxlJbwmEosoc3L2O?= =?us-ascii?q?dcRIzVjp7/8ANXL36JponayR98JvQKK46xe7Zg7XoHLTAEJ30SJdqWd+U84yh1?= =?us-ascii?q?PTXP/VxNHMcMaskePMXTgg1bl0zpWL5S9srHAFCYEJ18d9o172btzjA674c8WP?= =?us-ascii?q?766DCqPZDf801NP/RbgSVjjt3CvvYawebSCCUM5XmZagR1zT2Cy5aXFvbw5v+A?= =?us-ascii?q?yNfKWFMaBiQ2SZtSJCKe+Qy7Qeq4jJrpXR2S6s/vh5I+c0WcRmevk6QBs6ZMF/?= =?us-ascii?q?NAiyrg0zhaCI/1nfKUvMC25GtRqFJHDJ557QfZF6VHIpV7JRP4m9GtRkh9GiT/?= =?us-ascii?q?f8XUeQA1uOaMx+cM5OJ+N1DlZYIAJxIJxL375WBSTgt0R778pkyZUv4JZNt6VP?= =?us-ascii?q?PEqWhY6Y18JK8UJ1iRvYHkoDhOplA3Bg8pdbAxoydVdknLhgJVXbj7tKQHigsG?= =?us-ascii?q?Xt5zoVVMFn6oOGIi+zrHUrxYjKuWCPwV9DWfVLABU0VsMiNjXhy02ZRue72ynf?= =?us-ascii?q?BEs2NLhT19oPk00zN8QBuzpCzsq7gL2T0+5LGyrC8BtmBdTuWCjyfIDk1OzPUU?= =?us-ascii?q?jagGDXbv8li8YGQeY4vz57lnPt7s9Y4743QweR8jZTEJXfy8CyHsiKOFGo6Pv8?= =?us-ascii?q?xShB6DvMXDdrGyIjIUNrsj1RLvXX593RbCnBxw6msEXi2g7MM4JIW6IcslyS6o?= =?us-ascii?q?GW/VdVkS5qNJtND8tUUMTOswaFNu3H9v0s6ZSS0RXMbPAXo6jhA4aWVYd5JO8R?= =?us-ascii?q?0aF6kogzaQualG+gAUYCvKHYm+/4nQnNvI2WMjQttwwWLWvKKFjIsw0HJ5g9N0?= =?us-ascii?q?8jKOuHMKeuzEUs9sB2P+1pteyePiZPWirOQHRJFgyLu/TP8IKtOj9neu2JV2Rk?= =?us-ascii?q?+lwawTH1+4MO8AxbfbVDyoSW+CVuSIdGiMmSg2Mkjo6RmuMFI3dN9Ar1UhPeva?= =?us-ascii?q?mp5ciwrhXKtvSSqOo1/b0HcuMfgedwIxpIenZxIKQ/AMaOSGIugu2vI+AkMWb3?= =?us-ascii?q?DVBSt2F/O2sVm1kYh1JXpg5UT6Yfzz/Q39MdqSGxwEEYvEoZ5r/fy1WHiNOXh6?= =?us-ascii?q?zB19JEN07fvQF0wttu9AdJachdbRh8xh0e4Ea/hiLzYwutsSmoJ/84mbzt2GcR?= =?us-ascii?q?bLzpb9PdvVuOSXA+XDz0Q2fWFXSr0ZYQfr6IghJt45X6fcHaBFvRQdGac6XIYh?= =?us-ascii?q?OHnv+61uKgN8bBLRbqyugsb2vuKLeodUp3jO41I0LSfcvQADy/OtQQx/bpCqnG?= =?us-ascii?q?nyIIsrSzJAtdJtDBxmEJFIG8MaoAqtG4SUl72ji9+t50N6vPcHsbHuBfDO1dS5?= =?us-ascii?q?2ZhxXpdd6UKEIDbRBLdkgl57geSqmPjNyZrxBt34edMCSud7RnXKaqLJHomlLT?= =?us-ascii?q?KOIM38cVZc87GAyLJ5TgmRZCfhUqqDriKrKPVk4UQ9yox/Z+fT0j0t77fF19v2?= =?us-ascii?q?ZmFboDqjrHGTOJtY9lzKCvTUXwhIRvqd7GZlAaoXYJP29OgUMtwix8OT7hJu7D?= =?us-ascii?q?REzMuFI6+hrlLD2kJ7aZLXNk3p1DglWYMSOhSwLVMsgXPFqnTaGXlTNdOrJc5p?= =?us-ascii?q?gNaUFRzt+1JxlXs2ZmFfBmXkX8yRNnYf28K/Yg2K6Q1KAs0fkO+3Y044q7ayRf?= =?us-ascii?q?NmO5pfheWqr7IHkdBzJyHIXshaMDnaLKVqMTpJEuXPuF8obwYLs7cvQYg1f5mO?= =?us-ascii?q?L10DMEqb1yPyyRHN0Vb1d9yxzqqJJjgZ8mlfxbLfzTdMvxW5ueqegsD7UrDZaZ?= =?us-ascii?q?b2XOTIMCokTTGXXjIyHlys+Vi6uvoIpv2YIX0QoloMeCKdFBYTprxzrdjXFmLT?= =?us-ascii?q?guNjfJgWi/2bWC39UzN4m7QoBiZKtEGMRPwDGRPQb3D/nGoP8DClc/RM53P+cJ?= =?us-ascii?q?WDwbdOHvcRBs1LaPLdC8PRZPR2Pz41knAcP+GmcpvXqLN9mknEVkMFAqLI8xuY?= =?us-ascii?q?V0fQTfuCg3rmRYwPvpMcoiMy+8nImiZ8HuLPJbnb7zKq/4K2izyUkffTWmkkfw?= =?us-ascii?q?o+h+dGSHKMyR8GKGwKF8A9uUfxT6rGbEFJkDopgOYowRgXdQJoTnpl0VVZmf+8?= =?us-ascii?q?HotSTltHonmpRagqZVY/Li4q8kKM+UWmbdUGuM3XRUdb+78IQIwaPL8j74yBa/?= =?us-ascii?q?hY++ogwD8z+H9yiC6aFV4Iy1vd/g=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2HfAQDq6h5Z/wHyM5BcGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgyqBbo55kH2XfiiLfFcBAQEBAQEBAQIBAmgogjMkgkIDAwECJ?= =?us-ascii?q?FACAwMJAQEXCCkIAwFTBxIFih8EsVs6JgKLKIg9jXABBJEpjGyTHosZhlOURli?= =?us-ascii?q?BCk8hFUaEdxyBZnOJHAEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 19 May 2017 12:56:43 +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 v4JCuUNw009534; Fri, 19 May 2017 08:56:34 -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 v4JCu8tG092337 for ; Fri, 19 May 2017 08:56:08 -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 v4JCu7AM009462 for ; Fri, 19 May 2017 08:56:07 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1CvAwCi6h5Z/4GlL8FcHAEBBAEBCgEBhUOOeZB9mAWGJAKGTgECAQEBAQECayiFGQMDJ1ACEBgIMVcHEooosVs6ix4BMYg9jXAFkSmMbJMekWyURleBCk8hFUaEdxyBZj02iRwBAQE X-IPAS-Result: A1CvAwCi6h5Z/4GlL8FcHAEBBAEBCgEBhUOOeZB9mAWGJAKGTgECAQEBAQECayiFGQMDJ1ACEBgIMVcHEooosVs6ix4BMYg9jXAFkSmMbJMekWyURleBCk8hFUaEdxyBZj02iRwBAQE X-IronPort-AV: E=Sophos;i="5.38,364,1491278400"; d="scan'208";a="6059141" 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; 19 May 2017 08:56:07 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3Aya57nh/u017sm/9uRHKM819IXTAuvvDOBiVQ1KB3?= =?us-ascii?q?1u4cTK2v8tzYMVDF4r011RmSDNqdsasP1rqempujcFRI2YyGvnEGfc4EfD4+ou?= =?us-ascii?q?JSoTYdBtWYA1bwNv/gYn9yNs1DUFh44yPzahANS47xaFLIv3K98yMZFAnhOgpp?= =?us-ascii?q?POT1HZPZg9iq2+yo9ZDeZwdFiCCjbb9vIxm7rQbcvdQKjIV/Lao81gHHqWZSde?= =?us-ascii?q?RMwmNoK1OTnxLi6cq14ZVu7Sdete8/+sBZSan1cLg2QrJeDDQ9LmA6/9brugXZ?= =?us-ascii?q?TQuO/XQTTGMbmQdVDgff7RH6WpDxsjbmtud4xSKXM9H6QawyVD+/9KpgVgPmhz?= =?us-ascii?q?kbOD446GHXi9J/jKRHoBK6uhdzx5fYbJyJOPZie6/Qe84RS2hcUcZLTyFPAp2y?= =?us-ascii?q?YZYBAeQCOuhXrYf9qkASoReiHwSgGPnixiNUinLwwKY00/4hEQbD3AE4EdwBqn?= =?us-ascii?q?LUp8jxOqcPS+C1w7fHzTPYb/hL3jry9ZLHchYgof6SWbJwc9HcyUwxGAPBilWf?= =?us-ascii?q?s4rlPzSa1+gXr2eb6O9gWPuphmU6qA9xuiCiytooh4THnI4YxVLJ+T9kzIs0Jd?= =?us-ascii?q?C0UlN3bcCgHZZWqiqULZF5Qtk4TGFtoCs6yqMJuZq8fCUSzZQo2Rrfa/idfIiO?= =?us-ascii?q?5RLiW/ydLit/hH5/ebK/gw6+8UmmyuLiSsm5yEtGoy5Ln9XWuX0A1Qbf5tWGR/?= =?us-ascii?q?Z95EutxCiD2gTL5uFBO080lK7bK5A7wr43k5oeqVnMETXwmEX3kqCWckck9/Ot?= =?us-ascii?q?6+v5ZrXmooWTN4lzigDxKKghhsu/AeEgPggUQ2eb4fi81KHk/UDhW7VFkPk2kq?= =?us-ascii?q?jfsJDHKsUWvbK5Ag9J3YYj7BazFTGm0M8CknUdI1JFfwyH3MDVPATFIOr5FuiX?= =?us-ascii?q?mFOxi3JwwPSAOafuRt3VJ2XHuK/oYLI47klb0gd1xtdao9pPBqopPOP4Wki3ss?= =?us-ascii?q?fRSBA+LUj8zv7uEtRm/psXQ2OUGquQO66UtkWHoqojJ+SAaogPtB7nJvQl7uKo?= =?us-ascii?q?hng83RcGcKCvm5saZmypNvVgP0idJ3Hrh5NJEW4O+BA5V+Hsk0GFWj17aHO7Xq?= =?us-ascii?q?Z67TY+W6y8CoKWaomryJ6cxii2GIYeMmxPDFGBFXXAcoiAX/4KbzLUKchkxG9X?= =?us-ascii?q?HYO9QpMsgEn9/DTxzKBqe6+NonUV?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0HmAgAi6x5Z/4GlL8FcHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBhRiOeZB9mAWGJAKGTgEBAQEBAQEBAgECaCiCMyQBgkEDAydQAhA?= =?us-ascii?q?YCDFXBxKKKLFcOoseATGIPY1wBZEpjGyTHpFslEZYgQpPIRVGhHccgWY9NokcA?= =?us-ascii?q?QEB?= X-IPAS-Result: =?us-ascii?q?A0HmAgAi6x5Z/4GlL8FcHAEBBAEBCgEBFwEBBAEBCgEBhRi?= =?us-ascii?q?OeZB9mAWGJAKGTgEBAQEBAQEBAgECaCiCMyQBgkEDAydQAhAYCDFXBxKKKLFcO?= =?us-ascii?q?oseATGIPY1wBZEpjGyTHpFslEZYgQpPIRVGhHccgWY9NokcAQEB?= X-IronPort-AV: E=Sophos;i="5.38,364,1491264000"; d="scan'208";a="5934259" 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; 19 May 2017 12:56:06 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 19 May 2017 15:49:19 +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 v4JCn8HR027204; Fri, 19 May 2017 15:49:17 +0300 From: Dan Jurgens To: chrisw@sous-sol.org, paul@paul-moore.com, sds@tycho.nsa.gov, eparis@parisplace.org, dledford@redhat.com, sean.hefty@intel.com, hal.rosenstock@gmail.com Subject: [PATCH v7 3/9] selinux lsm IB/core: Implement LSM notification system Date: Fri, 19 May 2017 15:48:53 +0300 Message-Id: <1495198139-69993-4-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1495198139-69993-1-git-send-email-danielj@mellanox.com> References: <1495198139-69993-1-git-send-email-danielj@mellanox.com> X-Mailman-Approved-At: Fri, 19 May 2017 08:56:30 -0400 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: Cc: linux-rdma@vger.kernel.org, linux-security-module@vger.kernel.org, selinux@tycho.nsa.gov Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP From: Daniel Jurgens Add a generic notificaiton mechanism in the LSM. Interested consumers can register a callback with the LSM and security modules can produce events. Because access to Infiniband QPs are enforced in the setup phase of a connection security should be enforced again if the policy changes. Register infiniband devices for policy change notification and check all QPs on that device when the notification is received. Add a call to the notification mechanism from SELinux when the AVC cache changes or setenforce is cleared. Signed-off-by: Daniel Jurgens Acked-by: James Morris --- v2: - new patch that has the generic notification, replaces selinux and IB/core patches related to the ib_flush callback. Yuval Shaia and Paul Moore v3: - use notifier chains. Paul Moore v4: - Seperate avc callback for LSM notifier. Paul Moore v5: - Fix link error when CONFIG_SECURITY is not set. Build Robot drivers/infiniband/core/device.c | 53 ++++++++++++++++++++++++++++++++++++++++ include/linux/security.h | 23 +++++++++++++++++ security/security.c | 20 +++++++++++++++ security/selinux/hooks.c | 11 +++++++++ security/selinux/selinuxfs.c | 2 ++ 5 files changed, 109 insertions(+) diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 92e0b89..63ebaab 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include #include #include @@ -82,6 +84,14 @@ static LIST_HEAD(client_list); static DEFINE_MUTEX(device_mutex); static DECLARE_RWSEM(lists_rwsem); +static int ib_security_change(struct notifier_block *nb, unsigned long event, + void *lsm_data); +static void ib_policy_change_task(struct work_struct *work); +static DECLARE_WORK(ib_policy_change_work, ib_policy_change_task); + +static struct notifier_block ibdev_lsm_nb = { + .notifier_call = ib_security_change, +}; static int ib_device_check_mandatory(struct ib_device *device) { @@ -341,6 +351,40 @@ static int setup_port_pkey_list(struct ib_device *device) return 0; } +static void ib_policy_change_task(struct work_struct *work) +{ + struct ib_device *dev; + + down_read(&lists_rwsem); + list_for_each_entry(dev, &device_list, core_list) { + int i; + + for (i = rdma_start_port(dev); i <= rdma_end_port(dev); i++) { + u64 sp; + int ret = ib_get_cached_subnet_prefix(dev, + i, + &sp); + + WARN_ONCE(ret, + "ib_get_cached_subnet_prefix err: %d, this should never happen here\n", + ret); + ib_security_cache_change(dev, i, sp); + } + } + up_read(&lists_rwsem); +} + +static int ib_security_change(struct notifier_block *nb, unsigned long event, + void *lsm_data) +{ + if (event != LSM_POLICY_CHANGE) + return NOTIFY_DONE; + + schedule_work(&ib_policy_change_work); + + return NOTIFY_OK; +} + /** * ib_register_device - Register an IB device with IB core * @device:Device to register @@ -1104,10 +1148,18 @@ static int __init ib_core_init(void) goto err_sa; } + ret = register_lsm_notifier(&ibdev_lsm_nb); + if (ret) { + pr_warn("Couldn't register LSM notifier. ret %d\n", ret); + goto err_ibnl_clients; + } + ib_cache_setup(); return 0; +err_ibnl_clients: + ib_remove_ibnl_clients(); err_sa: ib_sa_cleanup(); err_mad: @@ -1127,6 +1179,7 @@ static int __init ib_core_init(void) static void __exit ib_core_cleanup(void) { + unregister_lsm_notifier(&ibdev_lsm_nb); ib_cache_cleanup(); ib_remove_ibnl_clients(); ib_sa_cleanup(); diff --git a/include/linux/security.h b/include/linux/security.h index 8c73ee0..f96e333 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -69,6 +69,10 @@ struct audit_krule; struct user_namespace; struct timezone; +enum lsm_event { + LSM_POLICY_CHANGE, +}; + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, int audit); @@ -164,6 +168,10 @@ struct security_mnt_opts { int num_mnt_opts; }; +int call_lsm_notifier(enum lsm_event event, void *data); +int register_lsm_notifier(struct notifier_block *nb); +int unregister_lsm_notifier(struct notifier_block *nb); + static inline void security_init_mnt_opts(struct security_mnt_opts *opts) { opts->mnt_opts = NULL; @@ -382,6 +390,21 @@ int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); struct security_mnt_opts { }; +static inline int call_lsm_notifier(enum lsm_event event, void *data) +{ + return 0; +} + +static inline int register_lsm_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline int unregister_lsm_notifier(struct notifier_block *nb) +{ + return 0; +} + static inline void security_init_mnt_opts(struct security_mnt_opts *opts) { } diff --git a/security/security.c b/security/security.c index a142a0b..6eef315 100644 --- a/security/security.c +++ b/security/security.c @@ -35,6 +35,8 @@ #define SECURITY_NAME_MAX 10 struct security_hook_heads security_hook_heads __lsm_ro_after_init; +static ATOMIC_NOTIFIER_HEAD(lsm_notifier_chain); + char *lsm_names; /* Boot-time LSM user choice */ static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = @@ -162,6 +164,24 @@ void __init security_add_hooks(struct security_hook_list *hooks, int count, panic("%s - Cannot get early memory.\n", __func__); } +int call_lsm_notifier(enum lsm_event event, void *data) +{ + return atomic_notifier_call_chain(&lsm_notifier_chain, event, data); +} +EXPORT_SYMBOL(call_lsm_notifier); + +int register_lsm_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_register(&lsm_notifier_chain, nb); +} +EXPORT_SYMBOL(register_lsm_notifier); + +int unregister_lsm_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_unregister(&lsm_notifier_chain, nb); +} +EXPORT_SYMBOL(unregister_lsm_notifier); + /* * Hook list operation macros. * diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index e298000..bc77c56 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -171,6 +171,14 @@ static int selinux_netcache_avc_callback(u32 event) return 0; } +static int selinux_lsm_notifier_avc_callback(u32 event) +{ + if (event == AVC_CALLBACK_RESET) + call_lsm_notifier(LSM_POLICY_CHANGE, NULL); + + return 0; +} + /* * initialise the security for the init task */ @@ -6399,6 +6407,9 @@ static __init int selinux_init(void) if (avc_add_callback(selinux_netcache_avc_callback, AVC_CALLBACK_RESET)) panic("SELinux: Unable to register AVC netcache callback\n"); + if (avc_add_callback(selinux_lsm_notifier_avc_callback, AVC_CALLBACK_RESET)) + panic("SELinux: Unable to register AVC LSM notifier callback\n"); + if (selinux_enforcing) printk(KERN_DEBUG "SELinux: Starting in enforcing mode\n"); else diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index ce71718..c8467dd 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -163,6 +163,8 @@ static ssize_t sel_write_enforce(struct file *file, const char __user *buf, avc_ss_reset(0); selnl_notify_setenforce(selinux_enforcing); selinux_status_update_setenforce(selinux_enforcing); + if (!selinux_enforcing) + call_lsm_notifier(LSM_POLICY_CHANGE, NULL); } length = count; out: