From patchwork Mon May 15 20:42:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Jurgens X-Patchwork-Id: 9727969 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 0944A6028A for ; Mon, 15 May 2017 20:50:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DBEBD289A3 for ; Mon, 15 May 2017 20:50:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D0DCE289A8; Mon, 15 May 2017 20:50:20 +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 ACF23289A3 for ; Mon, 15 May 2017 20:50:19 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,346,1491264000"; d="scan'208";a="5797749" IronPort-PHdr: =?us-ascii?q?9a23=3AvtssgB/gqMCMmP9uRHKM819IXTAuvvDOBiVQ1KB5?= =?us-ascii?q?0uIeIJqq85mqBkHD//Il1AaPBtSErasfwLOL6ejJYi8p2d65qncMcZhBBVcuqP?= =?us-ascii?q?49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6?= =?us-ascii?q?JvjvGo7Vks+7y/2+94fdbghMhjexe65+IRu5oQnMtsQan5ZpJ7osxBfOvnZGYf?= =?us-ascii?q?ldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2Yu5M32rhbD?= =?us-ascii?q?VheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RSiu4qF2QxDmki?= =?us-ascii?q?cHMyMy/n/RhMJ+kalXpAutqwFjz4LRZoyeKfhwcb7Hfd4CRWRPQNtfWSJCDI27?= =?us-ascii?q?bYQPAfIBMORFo4TzuVQOtgCzCRWwCO711jNFnGP60bE83u88EQ/GxgsgH9cWvX?= =?us-ascii?q?rattr1MroZX+SozKnSwjXMcfVW2Szg44XPbx8uu/eMXbNufsrVy0kiDAbFgUuU?= =?us-ascii?q?qYzhJTyV0OMNsmeB4+V8UuKvjncqpgdsqTahwccsj5PGhoMTyl3c9CV225g6Jd?= =?us-ascii?q?ulR05jZt6kCodQuzuHOIRoXMMuW3potzogxb0Ao5K7eDMFxZI6zBDcc/yKa5WE?= =?us-ascii?q?7x3sWeqLITp0mWhpdKywihqs60Ss1/XwWtSw3VtEtCZIndvBumoQ2xHS6sWLUO?= =?us-ascii?q?Zx8lml1DuJygvd8PtLIVoumqreM5Mhx7kwmYcNvknbBS/2nVn2jLeRdkU55uik?= =?us-ascii?q?8+Tnbavipp+bL4J0lhvxMr4vmsyiGuQ0KBQOXmiH9uS8073v50v5T6lRjvIqiK?= =?us-ascii?q?XZtZHaJcADqq64BQ9azJoj5g6iAzqp39kUh3kKIE9fdB6ZgIXlJUvCLO3gAfe6?= =?us-ascii?q?mVuskTNrx/7cPr3mB5XANmPDn6nlfbZ87U5c1QUywclE6JJTF7EBJu78VVHqtN?= =?us-ascii?q?HDEh84MxC7w+bgCNln0IMeQniADrWWMKPVr1+E/vgvLPWUZI8JpDb9LOAo5/zp?= =?us-ascii?q?jX8/g1AdYamp0oERaH2jHPRmJEOZYX/2jdcaDWcFoBA+TPfwhF2FSz5TaG64X7?= =?us-ascii?q?gg6TEjFIKmEYDDS5ivgLyDxii0Ap5WZntBClCKEHfoaZ6JW/kIaCKPLc5uiSEE?= =?us-ascii?q?Vb69S488zx2usxX6y7V/JOrO5iIYrY7j1MRy5+DLjRE96yd7ANqb02GMU2F0mX?= =?us-ascii?q?gFRz4o069hv0Nx0FCD0bJ3g/ZAD9xc++tJUhsmNZ7b1+F1FtfyWgTHftiUVlmm?= =?us-ascii?q?RtSmDCorQd0v2d8OZFxxG9K4jhDMxyCqGaMal6SXBJwo9aLRx2X+J9pnxHbcz6?= =?us-ascii?q?Quk14mQs5TOmK8na5/6xLfB4jXnEWFj6yqb7gT3DbR9GefymqDpEBYUAhsUarb?= =?us-ascii?q?WXAQeE7Wosrl5kPYT76jErMnMhNfxs6EL6tFcNzpjVFdS/fkN9XSeWWxm32/BR?= =?us-ascii?q?yQ3LODcJLqe3kB3CXaEEUFkwES/XGANQUlAyehp3vSDD1oFV71ZUPj6/N+qHC6?= =?us-ascii?q?Tk8q0Q6GdUth2KSp+hQNn/yTV+sT3q4YuCcmszh7B02y09XSC9qBvAphYL5cbc?= =?us-ascii?q?km4FhZyW3VrRd9MYKkL6BjgF4ebgt2sljy2BR3EIVAjNMqoGkkzQVoNaKYy1RB?= =?us-ascii?q?dzWC0ZD3IL3XJXH4/AqzZK7OxlHezNGW978R5/QgsVrjpgCpFlE5/nV/ydZVyX?= =?us-ascii?q?qc5o7SDAoWS53+Tlg4+wJ9p7HAbSk3/5nU2mF0Mamorj/C3MokBeUkyhaketdQ?= =?us-ascii?q?LrmEGRT8E8IEGseuL/YqlEKxbhIeO+BS9rA7MN+6d/ec366rJulgliq8jWtb+I?= =?us-ascii?q?B9zl6M9y1kR+7GxZYK2feY0ReGVzfnl1qht9j3mYFdaTEJEGu/0jLoBIlLZq19?= =?us-ascii?q?ZYwLE3uhI9WrxtVigJ7gQ31Y+0SgB1MBxc+kYhmSYEb+3Q1XyEQbu3unmTG3zz?= =?us-ascii?q?ZsiTEmsrKf3DDSw+TlbBcIIHNERHNjjVjyO4i5lMoVU1StbwQzkxul/0n6zbBB?= =?us-ascii?q?pKtjN2nTXVtIfy/uIm5+SKSwsqSNY9VT6JIotiVaS/+8bkybSrHjpRsazyLjEH?= =?us-ascii?q?FEyDA9aT6qpo3znwZmh2KFMHZzsH3ZdNlrxRfR/tzcQuVR3iYdSSljjznXAVa9?= =?us-ascii?q?P9yz8tWSjZvDtP6xV365XJ1JbSbr1Z+AtDe85WByDxywhfSzmsH5Hgggyi/2zM?= =?us-ascii?q?dqWjvSrBnnf4nr0r62MeV9fklnHFX88dZ1Gplikossg5EdwWQaiYiI8noGi2jz?= =?us-ascii?q?Nc5W1r75bHoIWTEE2cXV4BT/1E1lMH2J25rzVm+Bzct5e9m6fmQW1zoj78BLFK?= =?us-ascii?q?iU8LtEnTFvrlWkrQLRZv59njgGxPsq6X4ahfsGuBAqzimHBbASB0ZYNzT2lxuU?= =?us-ascii?q?99C+sLlXZGG3fLi01Up+hsyhAKiZog5CXHb5e5EiHTJ/78hkK1LMyHzz6ofleN?= =?us-ascii?q?bMdtIfrBuUnAncj+JNMpI+iuIKhTZ7OWL6pXAl0ek7jRhq3Z6kpoiIN2Jt/ayi?= =?us-ascii?q?Dx5DKz36e9gT9ivqjaZEkcacx5qvEYl5GjUXQJvoSuqlECoIuvT6MwaCCiczpm?= =?us-ascii?q?2AFrrYGQ+f9EBmr3TUHpCuK32XIn4Zwsl4SBmbOkNfnBgeXC8mkZ4hCgCq2Mvh?= =?us-ascii?q?fV965j8P4F74sQBByuF2OBn5SWffohmnaisuRJiYNhpW4RlI513JPsyG8uJzAy?= =?us-ascii?q?ZY84W5rAOXN2ybYxpHDXkTVUyCG1DsIKOu6MLd8+iDGOW+NeDOba+VqexZSveI?= =?us-ascii?q?346g3ZVo/zaLLMWPMWdtA+c92kVdQXBzA97ZlCkXSywLiyLNaNaWpAm6+iJqtc?= =?us-ascii?q?2/7vLrVx/v5YeVDbtdL8lv8QisgaifL+6QmDp5KTFA25MU33DI1bwf0UUOhCFv?= =?us-ascii?q?azmsEa0MtSDXQ6LWgKNXCAQbayxrPstS8608xhVNOdLcit7t1b55jvo1BEleWF?= =?us-ascii?q?zkncGpa8IKLH+hNFPbBEaLM7GGKiPRz8Hxf6y8VaVajP9IuB2opTabD0jjMyyN?= =?us-ascii?q?lzbzURCvLeZMjCSAMRxQpo6ybxFtCXL5Q9L+cB27N913giMqzr0onH/KMnQcMT?= =?us-ascii?q?dkeUNXsrKQ9T9Ygul4G2FZ9HpqMPSLlj2W7+ndJZcaq/1rDTpol+hC+nQ116NV?= =?us-ascii?q?7D1YRPxygCbStMRiol+8numK0DVnVB1OqzZQiY2RoUpiPL/V9p5aWXbL5BgN93?= =?us-ascii?q?mfCwwWp9t5Dd3io65QysLRm63uMzdN6dTU/dcbB8jPM8+IKmYuMR/zFD7TFgsF?= =?us-ascii?q?QiahNXvDiExFjPGS6nqVo4A8qpj2gpUOUqdbWUc7FvMbEERlB8ACIJl2XjMii7?= =?us-ascii?q?GbitIH5XukoxnVXslauYrHVv2KC/X1NDmZlaVEZwcPwb7gMIsTLZP01FZtallg?= =?us-ascii?q?hovKBVHdXctXrS1icw80ul9C/GJ6Tm0u3ULqcBmt7GYPFf6znR43igx+bf4r9D?= =?us-ascii?q?jy/1c9PkDKqzcokEkthdXlhiiccDjwLKe0WYFZFTH0ulMrPZzlWQZ1ahe+nUt+?= =?us-ascii?q?NDfLX7hRladvdXh3iA/AvptCAeVTTaxLYB8Xw/GafOgn3kpHpSWm30BH4/HJCZ?= =?us-ascii?q?x4lAslaZSstW5P2xp/bN4pIqzdPLBGzldKiaKQoCClzecxwBcAKEYL9WOdYi8I?= =?us-ascii?q?uEgTObkhKCuk5Ots6RaNmzFbYmgDS+Iqou529kM6I+mA0yXg07tZJkCrMOyeLr?= =?us-ascii?q?2Wu27bms6SRVM/yEAImlJZ8rhx1Mcsb1CbV1szzLeLERQGK9bCIxlPb8VO7HjT?= =?us-ascii?q?YTqOseLVzJJzIYqyDOToQPSNtKYTmUKkABwmH4IX7sQCH5mgykfYItn7LLQd0x?= =?us-ascii?q?Ui+BzrJEmZDPROYB+LiikIo9qhw5Btx4lSOjEdDH5mPiW2/LbYuwgqgPSbXNcs?= =?us-ascii?q?fHgbXpEINnQoV82mgyRZpWhPDCGr0uIFzwiP9yLzqT7ODDn9ctVjf+yZagl2CN?= =?us-ascii?q?Gs/jU+/bO2hkDL/ZXDPWH6NMhiu9/V5eMcuZmHF+teTaNhvEfEh4lYW3uqXnbL?= =?us-ascii?q?Ed6yPZj/dY8sbN3zCnuhXVy/jS81Q932PNa3IaiCmRvoSppMsImHwDAjMtewFi?= =?us-ascii?q?oAFBd0puED4r98ZAIYbpUnZh7oshgxOLakIAeEyNmuRXiiKSdORflF0eq6f6BX?= =?us-ascii?q?zzYrbuKi1XQvUpQ6z+6x8U4RWZ0HlQ/eyui5Z4lfUCnzHXpddx/JpSUni2hrLv?= =?us-ascii?q?wyzfsnwBPUrVkcNCiGdO9zaG1Epd48A0+SIXVtB2o3QF+clZbM7hSq378M4ytX?= =?us-ascii?q?h8xU3vFdsHjiop/fZyqhWLCqqZXQtCogcdgmoq1qPIP+I8uHtInRkSfFQJnWrA?= =?us-ascii?q?KFTDawF+BGldhIPCJYXP5IlHkqOcwco4VB71YxW9w/J7xIBqgsoKyqaTp6Ai4T?= =?us-ascii?q?yy8ZS52P3CYYjue6xbTaig+acI4+PxwcrJVCntwdXjZsbSMapa+sS5vZmHeBSm?= =?us-ascii?q?kLJgcT6gJM6xgbm4Brf+Dq+ozIQIZCyz5Luf50VDXEFoVw/VvhVm6WmUT4SOmm?= =?us-ascii?q?k+Gxxg1d0vTs38IBVxFiF0hS2fxWllAyJ7FtK6gcpInKsiWHdUnipmLi1POmJE?= =?us-ascii?q?VNyc3Tb1D4FozFtWvgXS0c/n0UQZRPxmnGG5oPiQR0dKElqU5QL4Chf0bx+yYr?= =?us-ascii?q?x591H7WiU8Ck2Uolp24cRyi2C9pBF/1msFXPVTJ5YZCksonqNo5OTW9X/J2dr1?= =?us-ascii?q?ZZn1t3My6l15VTN8FN7iQLXDhVrjWXpMGyR9Fb2c9qE58MJc9yu23nF6NeP5ie?= =?us-ascii?q?uGY7uqD1ynDD5TAzrlO6xDS1G6+3S+JZ/mIeGgU1J2SQsEYvFe4s/n3U8l/Trl?= =?us-ascii?q?B+5/1bCaSXjUVtvDZ9GYhDBzhT2X+5L1RzTXxGs+RAJ6TWaMFcQuc9agGxNBAk?= =?us-ascii?q?Ev4mxUOJ91lunXjleyxyqhda+yfFUgksUikVhq3imScQq8GgPT8aRYlFbTAmby?= =?us-ascii?q?fCMAKUhzxYvAxYa0FxQJAZA9BF+74B0YtT5MrCRl6mKTsZUxx6KgI4zf1fmFZZ?= =?us-ascii?q?v0WCZCDdCxCkdfXUvx12fMeRrdKpI+/j8AdBlIznrPgy978fSH2+hQ2tXdfeop?= =?us-ascii?q?fgtt2Ns0uDb7v4P/G5YXDaVjTMiw6/has8BZnQ4yfTKBZbK4V9yXc8YZjuE3TL?= =?us-ascii?q?Mg5CJ60GPEdUSL51ac1eou9EY89rZrwJ9bVqBhKdSRPlAJavo+VeLlbPWTTeKD?= =?us-ascii?q?2M8u64oY3N9rHSVPbvZteSyHbdX6J4IIp15SP9G7j0zY9U4lD21et19kNmVVjG?= =?us-ascii?q?NDiMo8/vJgwX+MWvdFbus5MyEDzKB5dwlWbiyVtbd8oLWSGq9ooXyI9B4nbqVe?= =?us-ascii?q?14ylTzsPFV97R884k4/a1myceuKqfOMvlatUhnAgaKCQl06potB3VwSH5Lbu8X?= =?us-ascii?q?NvjRYbwTjdrypODvC6wX9BqV9vRBadvcO0HOgNSwCi2HRBxfmwcBtCQaIReC2P?= =?us-ascii?q?6Dh690U9yqpezj1kIq+Vi+IQYMzKpx6oec5qqIuOjXYgPNzbgeRKflWN78o68x?= =?us-ascii?q?u0OW+f0kjqQBenJ0Yw2gFOgSSNIdyn3nzaAwwiImC9nDEK74+P5fS3I5mSrtm5?= =?us-ascii?q?VnEFUSHvMbA6aL/ZhEkWgigOHZMMMZcrxZmmmTDxGkCqENxWSt6ySJPGlvmgvO?= =?us-ascii?q?3A3oQWOv8F/2qjd1QSnWwNf5lUpVTb23Cl1MXyeyPE94rTePPBbptNXruKQ69k?= =?us-ascii?q?c2Mnf+uNKKjmuhN6tdH9fjK9yEPSk0uFUXgYUzRtO134AbF8C9INAM/35gdfbe?= =?us-ascii?q?93mkkylao6dAnYbe5N+a+unPF3m6k6Kas6mNxCxfynUgslE/99GgNvXK59KURv?= =?us-ascii?q?SlzHseQDlktAvARRG1rKbXr1cOOUyEyE3LgpAFPslF3Xkk0UHr/O4jQNYo+QVf?= =?us-ascii?q?EIbAYukOpTH1ODv621aQeck3VjWE0ztKAl31DUR4GLIi127qu8LJj3jQ8UUyRo?= =?us-ascii?q?Zsb0znmQB3D4IgJEIo71gXxDYDEQcTZh2ACbGoBF7qLY0aWkgfZxWH26K6eqQs?= =?us-ascii?q?3UFpxLOg+vPTZ/RmB6URLvZdkhKOnF9DF5ISqq0eRbJxdkRT9KHJuwfiDJLnUO?= =?us-ascii?q?L+lXoqMv21QN5V/twFt3c45Qa/XRWg449Z77kHkJCIarJEYZ/UscBn9Uhn+yQA?= =?us-ascii?q?diNTjxhklB65SvoTpP757djUrpWo8fyiVKAzSOUL7xI0HXhxj4PsgFA/ptHaz+?= =?us-ascii?q?VcSozQiYnk9QBCPX6Lt5jA0xl9L+oOJJinfLB++HUbPyIePW4BPcKKa/kg5C9g?= =?us-ascii?q?KDTT5l1YDcwWedwVJ9HNlh5IikL3RL5f7M3bGkWXC41rbcAn83L3yCwp8Zs7Su?= =?us-ascii?q?vv8z62JYvR7l5XPfNDjTlslMrYq+gIxfrfEzQY4X6EZBdr2CyC1oONC/Hq/eqW?= =?us-ascii?q?0t3UUEkGHiEuWYdHODWC4RCnRvaylJjxSgOb8NPzj44+dEOeQXyxhqcFvr9XEe?= =?us-ascii?q?FejiX73z5eFp36hv+Oq9qj8ndXuUFHEId96h3FAqZfMo94ORvmjMmrQFZzBi/l?= =?us-ascii?q?dMHTbBout/Kcxv0Q7OVmK0v+eYgbLwoYy7Lg93VVShFhSLjosVuCQO0RZdRmSP?= =?us-ascii?q?LYrn9P8oJvMbUPPEWHqJzssDhItEg8ABU1Z78osjxaak7OkRVaW6nuor4PlBcc?= =?us-ascii?q?Ud5itE9IGGKwJHwx5zrdWqRIl6mdEvoV/SuPTqYWSUVnLjt+Qw+p2JVpY7apku?= =?us-ascii?q?5IsmVaniN6p/gm1CdmSwW4uS3toaINxD0h9aq8tDofo3xETv+Rnz3OCVpd0PQA?= =?us-ascii?q?lb0cBGr66VygfHkDa5P/4L9mJcv88okh524wYQ45cy0HWuSgDDrwj7iTD4yKv9?= =?us-ascii?q?9diwSBuMLUbb+8NSISLKgyyQr/R3hh1QjThBlo/3cQQjW79dMqOYqzN8Akxiqu?= =?us-ascii?q?BGjae00B4qxMsMTrs14EUvE6aVR7wGVsysKHXDECRNTTG2YpiQgpcWdEcJVD6R?= =?us-ascii?q?8cDaUnnjaIvq1b/g4JYTbUE4Kl+pLTncfJwnQ9U9ZqxnzMqa2Bm5wq0Wdpm9Vq?= =?us-ascii?q?4S6SoH4SbfDXU9dwAnjv0YdS0e3+Z+u3veABU4ZmzKmhX+IDMsmk4mu6wpJqWl?= =?us-ascii?q?Wqxr4GBVq2LPcDxqvHUyeiUWCYW/qEc2aCnzY9KUPz6wOnLlspZ8dWtUM9NPXN?= =?us-ascii?q?hoJEnQ37Tbx0XjmQpUPczGE7PuMacwU2uYm5dAwOSO4cfPOcJe8owP0/FFQAdX?= =?us-ascii?q?nJEjVqC+Wuq16igJB7O2l84UX9eent8ADmMduKGhkDFY7ar4Jx9uKhS2KEOH9g?= =?us-ascii?q?0AdyM1du++fYDVQxufdWc4yNktjIm9R7zekFeu9xMS08v94egZ5j6YiI38eJbx?= =?us-ascii?q?7Ryoz+JdfLrfiEG/ff1VglenlGUroFZgP4/4A6Pt86W73QGrtUphYcCrI5QJwm?= =?us-ascii?q?MWf+6qd0IBl1cgHPeLS+mtPqqf6TZptIu3/W6Uo9IzzCtB0F1vy5Vhd7b5Sth3?= =?us-ascii?q?XuPJAwWCxOoMB3BhthBotPFNsKrxC7DJ6MhKG7l9ix9lt0u+AUtarwC+jK28qi?= =?us-ascii?q?0oRwXpha4EmLMyjLBKlvnEtplOOygu3P0pPpE8PtZcsEVPRnQm7CcrLHEJ2/Ki?= =?us-ascii?q?iPOs3gZUFL6Luc0LNlUhWLei/1Ra2GtDerNP98+0U01pR4fPbPzDwq97zb39/y?= =?us-ascii?q?aH9Aqye7qX6GLoBf7EDLBePCQxJUU+SK/3h/Ea0Rc4T06P8EMcY+z9iE/wlz8D?= =?us-ascii?q?NC3dOBI6igqE/Mx016eYvfLEvowCY5RZIKLQ++MUQ2h2/ZrW7RAXNGLsirMcNt?= =?us-ascii?q?msqaDgTx50ltnmEgfnVBFXTsRdeQP2gbxs2/aAqF+gJXD9YMgfS3dlAgtqKoUu?= =?us-ascii?q?RoOYtKmf+stLoZldZmMDzPRMdAMyHXNr92MSJbDv/Tq1gwfh4Er781V58wZZeU?= =?us-ascii?q?PEwHMEaAySX1zQbZz030dtqs27iNICYX9HVH0r3E3SJLpwmjtvaTmtfjX6zBbJ?= =?us-ascii?q?HqQP7SNzIoVjOASjQxFkam4kypu+cCvPqEIWcfpU0UYi2SCA4PvKxvq8bfDnPL?= =?us-ascii?q?k+15YJIKnOyaWzz3SCBgm6o9HD1EtVqNQ/UdEQnbdGHhgG5Gtwy5J/9M4Gjpb7?= =?us-ascii?q?uGyapJQ+YWGJdDcuWFQ9vEfvBTPzUoljAeOOamZd3crq0530nOTWQDFqnH6lye?= =?us-ascii?q?QFSRQvyGyDLhRZ8VsJQsuio05tLQmTd6E7/GP7aauzGj8421gT2GueLATGktYk?= =?us-ascii?q?00gOUEAGWbxhlPNn0EWJkpvxT2T6qBYVtc/G44guJpnRkXcUJ8VWM9/GdRmaOR?= =?us-ascii?q?E8sRa0MOg26oW7VSYFlxDT40/2eP7wn2aNoHqYbYQGoIpehEcpYUMPR9sNqfA6?= =?us-ascii?q?AX2vt8mWs+rQ=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2F7AgDJExpZ/wHyM5BcGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwEpgW6OdpBtcpcLKIs7VwEBAQEBAQEBAgECaCiCMySCQgYBAiRVAwkBA?= =?us-ascii?q?RcIKQgDAVMZBYhQgU4ErlQ6JgKLBIg9gmeLCQWJPYZlgQFYjA+KUYhMggKJFQy?= =?us-ascii?q?GRpRDWIEKTyEVhHlEHIFmc4hsAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 15 May 2017 20:50:18 +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 v4FKo61p023987; Mon, 15 May 2017 16:50:08 -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 v4FKo4OA276898 for ; Mon, 15 May 2017 16:50:04 -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 v4FKo4PO023984 for ; Mon, 15 May 2017 16:50:04 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B0AgCMExpZf4GlL8FcHAEBBAEBCgEBgyyCF452kG1ylxKGJAKGDQECAQEBAQECEwEBIV2FGQMDJ1IQGAgxVxmIVYFSrlQ6inoBAQgoiD2CZ4sJBYk9hmWBAViMD4pRiEyCAokhhkaUQ1aBC08hFYU9HIFmPTaIbAEBAQ X-IPAS-Result: A1B0AgCMExpZf4GlL8FcHAEBBAEBCgEBgyyCF452kG1ylxKGJAKGDQECAQEBAQECEwEBIV2FGQMDJ1IQGAgxVxmIVYFSrlQ6inoBAQgoiD2CZ4sJBYk9hmWBAViMD4pRiEyCAokhhkaUQ1aBC08hFYU9HIFmPTaIbAEBAQ X-IronPort-AV: E=Sophos;i="5.38,346,1491278400"; d="scan'208";a="6053086" Received: from emsm-gh1-uea10.corp.nsa.gov (HELO emsm-gh1-uea10.nsa.gov) ([10.208.41.36]) by goalie.tycho.ncsc.mil with ESMTP; 15 May 2017 16:50:03 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AiM1CLx+q6EnC7P9uRHKM819IXTAuvvDOBiVQ1KB4?= =?us-ascii?q?2+0cTK2v8tzYMVDF4r011RmSDNqdsqkP0reM+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZPebgFKiTanfL9/Ihq6oRjRu8UInIBvNrs/xhzVr3VSZu?= =?us-ascii?q?9Y33loJVWdnxb94se/4ptu+DlOtvwi6sBNT7z0c7w3QrJEAjsmNXs15NDwuhnY?= =?us-ascii?q?UQSP/HocXX4InRdOHgPI8Qv1Xpb1siv9q+p9xCyXNtD4QLwoRTiv6bpgRQT2gy?= =?us-ascii?q?kbKTE27GDXitRxjK1FphKhuwd/yJPQbI2MKfZyYr/RcdYcSGFcXMheSjZBD5u8?= =?us-ascii?q?YYUREuQPM+VWoY7/qFsAthayGRWgCfnzxjJSmnP6was32PkhHwHc2wwgGsoDvn?= =?us-ascii?q?rOo9XzKawcVf21zLPHzTrdafNWwir25Y/VfR87p/GMXKx/cc7TyUQ0EgPKkFGQ?= =?us-ascii?q?qYj/MDOT0eQMvHKX4PZnVeKqkmMqrRx6rDaoxscpkIbJh4QVx0jF9Spi3ok1I8?= =?us-ascii?q?C3SFZ8Yd6+DJtcrTyVOJVoQs86WGFnpDw1yrsctZ6/ZycHzoksyR3Ha/GfboSF?= =?us-ascii?q?5hzuWPyeLDp6nn5pZbOyihao/US91OHxUs+520tQoCVfiNnDrHUN2gTT6seZTv?= =?us-ascii?q?t9+V+s2TOR2ADX7uFLO0Y0la3UKpI73rEwkYAfsUXHHiPumUX2irGZdlk89+S1?= =?us-ascii?q?7+nqbK/qq5CeOoNulw3zM6QjltaiDegmNgUCR22b9v691L3n8035WrJKjvgun6?= =?us-ascii?q?bEqp/aI8UbqbC9Aw9XyYsj7giwDzOi0NsCm3kHK11EdAibgIjuPlHCOOr4Auun?= =?us-ascii?q?g1SwjDdrwOjLPqb/DZXJL3jDlqrhfLlm5k5AyAs80dBf55VOBrEHO/L8QFX9tN?= =?us-ascii?q?PfDh8nYESIxLP8BdF80J4OcX6eCa+edqXJuBmH4fx8DfOLYdo5sTC1CeU/6PPo?= =?us-ascii?q?ljdtlVYbfKSt37MSZXS8F/JhMwOSZn+60YRJKnsDogdrFL+is1aFSzMGIi/qB6?= =?us-ascii?q?8=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0HsAQDJExpZf4GlL8FcHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwGCF452kG1ylxKGJAKGDQEBAQEBAQEBAgECEAEBIV2CMyQBgkE?= =?us-ascii?q?DAydSEBgIMVcZiFWBUq5UOop6AQEIKIg9gmeLCQWJPYZlgQFYjA+KUYhMggKJI?= =?us-ascii?q?YZGlENWgQxPIRWFPRyBZj02iGwBAQE?= X-IPAS-Result: =?us-ascii?q?A0HsAQDJExpZf4GlL8FcHAEBBAEBCgEBFwEBBAEBCgEBgwG?= =?us-ascii?q?CF452kG1ylxKGJAKGDQEBAQEBAQEBAgECEAEBIV2CMyQBgkEDAydSEBgIMVcZi?= =?us-ascii?q?FWBUq5UOop6AQEIKIg9gmeLCQWJPYZlgQFYjA+KUYhMggKJIYZGlENWgQxPIRW?= =?us-ascii?q?FPRyBZj02iGwBAQE?= X-IronPort-AV: E=Sophos;i="5.38,346,1491264000"; d="scan'208";a="7075364" 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-uea10.nsa.gov with ESMTP; 15 May 2017 20:50:02 +0000 Received: from Internal Mail-Server by MTLPINE1 (envelope-from danielj@mellanox.com) with ESMTPS (AES256-SHA encrypted); 15 May 2017 23:43: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 v4FKglb3005032; Mon, 15 May 2017 23:43:18 +0300 From: Dan Jurgens To: selinux@tycho.nsa.gov Subject: [PATCH v1 4/9] checkpolicy: Add support for ibendportcon labels Date: Mon, 15 May 2017 23:42:36 +0300 Message-Id: <1494880961-73481-5-git-send-email-danielj@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1494880961-73481-1-git-send-email-danielj@mellanox.com> References: <1494880961-73481-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 checkpolicy support for scanning and parsing ibendportcon labels. Also create a new ocontext for IB end ports. Signed-off-by: Daniel Jurgens --- v1: Stephen Smalley: - Check IB device name length when parsing policy. - Use strcmp vs strncmp to compare device names. Signed-off-by: Daniel Jurgens --- checkpolicy/policy_define.c | 75 ++++++++++++++++++++++++++++++ checkpolicy/policy_define.h | 1 + checkpolicy/policy_parse.y | 14 +++++- checkpolicy/policy_scan.l | 2 + libsepol/include/sepol/policydb/policydb.h | 9 +++- 5 files changed, 98 insertions(+), 3 deletions(-) diff --git a/checkpolicy/policy_define.c b/checkpolicy/policy_define.c index ffdc5f8..239ca37 100644 --- a/checkpolicy/policy_define.c +++ b/checkpolicy/policy_define.c @@ -5162,6 +5162,81 @@ out: return rc; } +int define_ibendport_context(unsigned int port) +{ + ocontext_t *newc, *c, *l, *head; + char *id; + int rc = 0; + + if (policydbp->target_platform != SEPOL_TARGET_SELINUX) { + yyerror("ibendportcon not supported for target"); + return -1; + } + + if (pass == 1) { + id = (char *)queue_remove(id_queue); + free(id); + parse_security_context(NULL); + return 0; + } + + newc = malloc(sizeof(*newc)); + if (!newc) { + yyerror("out of memory"); + return -1; + } + memset(newc, 0, sizeof(*newc)); + + newc->u.ibendport.dev_name = queue_remove(id_queue); + if (!newc->u.ibendport.dev_name) { + yyerror("failed to read infiniband device name."); + rc = -1; + goto out; + } + + if (strlen(newc->u.ibendport.dev_name) > IB_DEVICE_NAME_MAX - 1) { + yyerror("infiniband device name exceeds max length of 63."); + rc = -1; + goto out; + } + + newc->u.ibendport.port = port; + + if (parse_security_context(&newc->context[0])) { + free(newc); + return -1; + } + + /* Preserve the matching order specified in the configuration. */ + head = policydbp->ocontexts[OCON_IBENDPORT]; + for (l = NULL, c = head; c; l = c, c = c->next) { + unsigned int port2; + + port2 = c->u.ibendport.port; + + if (port == port2 && + !strcmp(c->u.ibendport.dev_name, + newc->u.ibendport.dev_name)) { + yyerror2("duplicate ibendportcon entry for %s port %u", + newc->u.ibendport.dev_name, port); + rc = -1; + goto out; + } + } + + if (l) + l->next = newc; + else + policydbp->ocontexts[OCON_IBENDPORT] = newc; + + return 0; + +out: + free(newc->u.ibendport.dev_name); + free(newc); + return rc; +} + int define_netif_context(void) { ocontext_t *newc, *c, *head; diff --git a/checkpolicy/policy_define.h b/checkpolicy/policy_define.h index 75e3683..50a7ba7 100644 --- a/checkpolicy/policy_define.h +++ b/checkpolicy/policy_define.h @@ -44,6 +44,7 @@ int define_netif_context(void); int define_permissive(void); int define_polcap(void); int define_ibpkey_context(unsigned int low, unsigned int high); +int define_ibendport_context(unsigned int port); int define_port_context(unsigned int low, unsigned int high); int define_pirq_context(unsigned int pirq); int define_iomem_context(uint64_t low, uint64_t high); diff --git a/checkpolicy/policy_parse.y b/checkpolicy/policy_parse.y index 35b433b..6b406c8 100644 --- a/checkpolicy/policy_parse.y +++ b/checkpolicy/policy_parse.y @@ -137,6 +137,7 @@ typedef int (* require_func_t)(int pass); %token SAMEUSER %token FSCON PORTCON NETIFCON NODECON %token IBPKEYCON +%token IBENDPORTCON %token PIRQCON IOMEMCON IOPORTCON PCIDEVICECON DEVICETREECON %token FSUSEXATTR FSUSETASK FSUSETRANS %token GENFSCON @@ -172,7 +173,7 @@ base_policy : { if (define_policy(pass, 0) == -1) return -1; } opt_default_rules opt_mls te_rbac users opt_constraints { if (pass == 1) { if (policydb_index_bools(policydbp)) return -1;} else if (pass == 2) { if (policydb_index_others(NULL, policydbp, 0)) return -1;}} - initial_sid_contexts opt_fs_contexts opt_fs_uses opt_genfs_contexts net_contexts opt_dev_contexts opt_ibpkey_contexts + initial_sid_contexts opt_fs_contexts opt_fs_uses opt_genfs_contexts net_contexts opt_dev_contexts opt_ibpkey_contexts opt_ibendport_contexts ; classes : class_def | classes class_def @@ -702,7 +703,7 @@ fs_contexts : fs_context_def fs_context_def : FSCON number number security_context_def security_context_def {if (define_fs_context($2,$3)) return -1;} ; -net_contexts : opt_port_contexts opt_netif_contexts opt_node_contexts +net_contexts : opt_port_contexts opt_netif_contexts opt_node_contexts ; opt_port_contexts : port_contexts | @@ -726,6 +727,15 @@ ibpkey_context_def : IBPKEYCON ipv6_addr number security_context_def | IBPKEYCON ipv6_addr number '-' number security_context_def {if (define_ibpkey_context($3,$5)) return -1;} ; +opt_ibendport_contexts : ibendport_contexts + | + ; +ibendport_contexts : ibendport_context_def + | ibendport_contexts ibendport_context_def + ; +ibendport_context_def : IBENDPORTCON identifier number security_context_def + {if (define_ibendport_context($3)) return -1;} + ; opt_netif_contexts : netif_contexts | ; diff --git a/checkpolicy/policy_scan.l b/checkpolicy/policy_scan.l index f742939..e6c4898 100644 --- a/checkpolicy/policy_scan.l +++ b/checkpolicy/policy_scan.l @@ -186,6 +186,8 @@ fscon | FSCON { return(FSCON);} ibpkeycon | IBPKEYCON { return(IBPKEYCON);} +ibendportcon | +IBENDPORTCON { return(IBENDPORTCON);} portcon | PORTCON { return(PORTCON);} netifcon | diff --git a/libsepol/include/sepol/policydb/policydb.h b/libsepol/include/sepol/policydb/policydb.h index 844191c..ed5730b 100644 --- a/libsepol/include/sepol/policydb/policydb.h +++ b/libsepol/include/sepol/policydb/policydb.h @@ -73,6 +73,8 @@ extern "C" { #endif +#define IB_DEVICE_NAME_MAX 64 + /* * A datum type is defined for each kind of symbol * in the configuration data: individual permissions, @@ -364,6 +366,10 @@ typedef struct ocontext { uint16_t low_pkey; uint16_t high_pkey; } ibpkey; + struct { + char *dev_name; + uint8_t port; + } ibendport; } u; union { uint32_t sclass; /* security class for genfs */ @@ -400,6 +406,7 @@ typedef struct genfs { #define OCON_FSUSE 5 /* fs_use */ #define OCON_NODE6 6 /* IPv6 nodes */ #define OCON_IBPKEY 7 /* Infiniband PKEY */ +#define OCON_IBENDPORT 8 /* Infiniband End Port */ /* object context array indices for Xen */ #define OCON_XEN_ISID 0 /* initial SIDs */ @@ -410,7 +417,7 @@ typedef struct genfs { #define OCON_XEN_DEVICETREE 5 /* device tree node */ /* OCON_NUM needs to be the largest index in any platform's ocontext array */ -#define OCON_NUM 8 +#define OCON_NUM 9 /* section: module information */