From patchwork Tue May 9 16:54:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Carter X-Patchwork-Id: 9718693 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 1130460236 for ; Tue, 9 May 2017 16:54:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 10475283FD for ; Tue, 9 May 2017 16:54:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 03C5228409; Tue, 9 May 2017 16:54:04 +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 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 54E79283FD for ; Tue, 9 May 2017 16:54:00 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,315,1491264000"; d="scan'208";a="5607424" IronPort-PHdr: =?us-ascii?q?9a23=3AiwDO+xLsKmu52wC/N9mcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgQKvX8rarrMEGX3/hxlliBBdydsKMbzbKP+P+wEUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6/bL9oMBm6sArdu8sVjIB/Nqs/1xzFr2dSde?= =?us-ascii?q?9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLY?= =?us-ascii?q?TQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVRHniD?= =?us-ascii?q?0DNzUk7m/ZjMJ+h79frB64uRBz34vYbYeIP/R8Y6zdZ8sXS2pfUMhMWSJPAYSy?= =?us-ascii?q?b5MNAuYcM+tXsZL9qkASoReiHwSgGPnixiNUinLwwKY00/4hEQbD3AE4G9wBqn?= =?us-ascii?q?HUo8vuNKwPT+261rPIzSndYPNMxDzw74rIcx49rv6WR7JwbdTdxFIzFwLFklqQ?= =?us-ascii?q?qYvlMymT1uQWqWeX9eVgVeWxi2M+rQx6vzuhxt80h4XUiY8YxUrI+CVkzIovO9?= =?us-ascii?q?G1R1B3bcS5HJZWqiqULZF5Qtk4TGFtoCs6z7oGtoOlcyUS05QnwgLfa+SAc4iV?= =?us-ascii?q?/hLvTOaRLil8hHJiYL+/mwy98VKhyu3hTcm4ykpKrypZndnMsXABzRrT5dScSv?= =?us-ascii?q?Rh5Euh3DeP1wTL5uFFJ0A7i7bbJoY8zrM/mZcfq0TOEjLslEnog6KaaF8o9vWw?= =?us-ascii?q?5+TieLrmp5ucN4FuigH5N6Qjgte/Dvo8MggPWWib5Ou92KT48k3+XbVKiOE5nb?= =?us-ascii?q?fCsJ3BOcQaprK2Aw9S0oo57Ra/FC2p3M4XnXkAMlJJYAiHgJTxO1HSPPD4Cu+y?= =?us-ascii?q?g1arkDdt3f/GIr3hDY/LLnXYkrfherB960tGxwoo0dBQ+YhUCqobLPL0QE/xu8?= =?us-ascii?q?TSDgUlPAys3+bnFNJ925scWWKNGKCWLKDSsUSP5uIpIumMepQYuDj5K/g46P/h?= =?us-ascii?q?lmI5mVkBfam0x5cXb2q4Hvt+KUWDfXXsmssBEXsNvgcmVOzllkaNXiBVZ3azQ6?= =?us-ascii?q?I84So2CIO4AojdWI+hmruB3D20HpdOfGBJFkiMEWv0d4WDQ/oDdSWSIslnkjMZ?= =?us-ascii?q?S7ehT44h2Aq0uwDk0bpnKfDY+ioCtZLszNJ1/fHclQku9TxoCMSQy3yCT31ukW?= =?us-ascii?q?MSXDI5wKd/oUlhxViZyqh4n+ZUFdpN6PNVSg06L4LTz/RmC9DuXQLMZtaJSFC6?= =?us-ascii?q?Qtq4BTE+UNcxzMESY0ZnG9SvlRfD3zK0DL8TkryEHp008qbH0Hj2KMdx0XHG1L?= =?us-ascii?q?Muj1M+WMtAKXWmhrJj9wjUH4PIk0SYl6GsdakH2S7N8H6PzWuIvE1CVg5/S7/F?= =?us-ascii?q?XXMeZkvIs9v1/EXCQKGyCb4/KAtO1daCKrdWat3ulVhJX+zsNNPaY2KwgGewGQ?= =?us-ascii?q?2IyqmXbIX0Z2oRxj7dB1YAkwAS+3aGKAc/Czy9rGPeFjxuCEnvb1ni8OZktHO7?= =?us-ascii?q?VUg0zweQY01mzbq19QYfheaARPMLwrIEpCAhpi1qE1alxd3WEduApxF6caVEe9?= =?us-ascii?q?w9+lZH1XnBtwx5JJOvM75tikQZcwRtsEPkzw93BZlYkcg2sHMqyxJ/KKyZ0FNF?= =?us-ascii?q?cjOXw4rwN6bZKmbs4R+vbLTW1UvG0NaM/acP6uo3pEn/vA2zEUoi6Xpn2cFP03?= =?us-ascii?q?SA/pXKEBYSUZXpX0Y57Rh1vbfabTU854PPznBsNLG0sj7b19IyCuol0Qysf9BF?= =?us-ascii?q?MKOLDAXyCdEVB9CyKOw2nFikdhEEM/pR9K4zIsOrbPiG17SoPOZngTKql2NH4J?= =?us-ascii?q?py0kiU7SpzVvbI34oZw/GfxgaITSrzjE2gss/pg4BJfisdEXa6yST+A45RfKJy?= =?us-ascii?q?d54RCWiyO8232sl+h5n1VnFE7lGjA00J2NS1eRuSaFzwxhZQ2lgWoXO5nyu40z?= =?us-ascii?q?10nCszoqqZwiPO3/zodAAbNW5TWGlikVDsLJCvj9AURkioaBMplAe+6Ebhwahb?= =?us-ascii?q?o6p+L2zJTkdOZST2KX9tUreovLqYf8FP8I8osTlQUOmkb1GVULr9owcE3CP5BG?= =?us-ascii?q?tT3y47eC+wuprighx6jXiRLHFprHrWYctw3wvQ5MTARf5N2ToLXDV4hiTKCVi9?= =?us-ascii?q?Jdap+c6ZmIvEsuC7S22uTIZTcTXxwYOGqiS7+XVgAQejkPCrht3nDQ863Dfl19?= =?us-ascii?q?lrSSrIsBH8YpPx26umMeJneU9oBFDn5sp+G4F+lJE/hIsX2XQAgZWV53UHm3/p?= =?us-ascii?q?MdpHwaL+cGYNRTkTzt7R4Qjlw1FjImuSx43nUnWdw81hZ8S1Y24NwSI998FKCK?= =?us-ascii?q?GV7LNYhit5uFy4ohzNYfJlhDcS1eMu6GIGg+EOoAct1CKdArQWHUZGJyzjixOI?= =?us-ascii?q?7t6loaVMeWagbaOw2FB5ndC7A7GIuhtcV2rhepc+AS9w6d1yMErW333u7oHoYs?= =?us-ascii?q?PfYcgIuR2TlxfAk+9VKJQqm/oPmSZnP2X9smE/x+49kxNuwYmwvJKbJGV14KK5?= =?us-ascii?q?HhlYOyX2Z8wN/DHtlr1TnsWI0ICpBZVhHCsEXIfyQfKvCjISuuztNxySHz0ktn?= =?us-ascii?q?ebBb3fEBeH6Eh8snLPF46kN2mNK3kf0dVtWgOdKVdCgAAPQjo6hIU5GhqxxMzm?= =?us-ascii?q?bUd5/Cwe6UD2qhtL0OJoOAfwXn3ZpAi2djc+UIKfIwZO7gFe+0fVNtST7vx1Hy?= =?us-ascii?q?5F5ZChsgqNJXGbZwhSC2EGRFCEDUj5Pray/dnA7/SYBu2mIvvWe7qOtOheWuyU?= =?us-ascii?q?ypKuzotn/y+ANsuVMXlkFfE73VBDXX9hEcTDhzoPUzAXlz7Kb8ODpxe9+il3od?= =?us-ascii?q?6k/fTuXwLv64WPBKVOMdVz+xC2hqKDOPCKiCZ/NzlYyosGxWXUx7gHwF4SlyZu?= =?us-ascii?q?eiGjEbsasy7NUKXQmqpMAh4VdSx8KcxI77gm0QlVI87bjdH12aBkgf4pEVtFUk?= =?us-ascii?q?bhms6xb8wQP269LE/HBFqMNLmePz3E3tz4bLizSb1Vg+RYrRuwtiiHE0X7JDSM?= =?us-ascii?q?iyHpVwyzMeFLlCybJgZSuY+nfhZoE2fjSNXmax2gPdBtkTI2xKc4hnTQNW4TKT?= =?us-ascii?q?J8aV9CrqWM7SNEhfVyA2JB7mB7IuaZgCaW9e/YKooRsftwGSl7jf5V4HEgx7tS?= =?us-ascii?q?9iFES+R/mDHOod52v1Gmju6PxyJhUBpUsDlLnJqLsF5sOaXY7JlAQmrE/BwM7W?= =?us-ascii?q?WWERsKocdqCtz1tKBU0NTPk7jzKDha+dLO4cQcH9TUKN6AMHc5LBXpAyDbAxEK?= =?us-ascii?q?TT6xL27fmVdQkOqI+X2Ws5g6sILjlIAKSr9GUlw6DOkaBl15HNwFI5d2XjQkna?= =?us-ascii?q?SdjMEW+Xq0tAPRS9lCvpDbSvKSBu3iKDCYjblAYxsH36j4IJ8JOYLlwUxibUN2?= =?us-ascii?q?nIPQG0rfRdpNuDFubhcooEVR93hzVnY820PqagOq5n8eDuO7kQAthQt/e+st8i?= =?us-ascii?q?3g41AtJlrFvCEwilU+mc35gTCNdz78NL2/XY5MBCrqqUc8KZT7Qx5rYg20mExr?= =?us-ascii?q?LjbER7ZKgLtnemFnkgjcuYFAGfREV61LfAcQxe2LZ/UvyVlctiKnxUpd6evfDp?= =?us-ascii?q?tjlRUlcZi3oHJa3AJsct01KLfMK6pOy1hfmriBvjS01uwrxg8ROVoN+nuIeCEU?= =?us-ascii?q?oEwIKqUmJy2w8+xq9wONgT9DdXMPV/otufJq6lkyO+KbzyLj0r5PMEaxOPKDL6?= =?us-ascii?q?mBoWjPidaIQk8s1kMPj0RF56Z50dw9fEWOTUAg0LuRGg8SOsrDMwFacs1S9HbL?= =?us-ascii?q?fSaUr+rMwYh5P4OjGeD0VeWOrrobglq4HAY1GIQB9tkOEYOy0EHZMMjnN6UIxg?= =?us-ascii?q?835ATxI1WEAu9JdwyXnzcaucG/zYN33IlHKjEbH2p9LT295qzLqQ8ynPqDQNA2?= =?us-ascii?q?b28eXosDLHI5Rsu6mi9ev3lbAzm31P8ZxBKF7z/mqSTaFCP8YMZ7ZPeIeRNsD8?= =?us-ascii?q?m7+S4h/KiyiF7X9IjeJm7hONt+vd/P7P8VqIycC/NIV7V9tVnTm5VATXywT2HP?= =?us-ascii?q?CcK1J4T3a4Q0cNP7FnO6Ulu5izIpUsv8J8itIbaSgQHpRIdUt4+b0ColNcCjCj?= =?us-ascii?q?EUAw1wqP0b5KJgeQ0DZII2YR3ytwU+LaO/JhuY0tW1TmaiLjtWV+VQwf+8Z7NJ?= =?us-ascii?q?0yomdvW6x2c4TpEm0+m39lYARI0LjhHbwvaje4leUCjoF3NAegXOpTA2mHN7Ou?= =?us-ascii?q?Y03Og/3AvCsUMAPDCTaOxpdGtEsskzBVOIO3p2DHY4SkSdjYrE7A+s2awS/ytD?= =?us-ascii?q?kNZV1+1FrGbxvoXFbDKqRqOrtY3fszA8Ytg+v61xLYvjL9Ocu5PanzzQUIffvR?= =?us-ascii?q?WAUC+6Efpand5QLzhDTfZTmGEqI8oGtZNP6UosTMs+IaJACLU0rLCwdTVkFTIS?= =?us-ascii?q?zTMeV46YxzMNnOG81qDAmRiNbpQtLgYEsI5YjdsHUy96eCQepLWsV4/OjW+LVn?= =?us-ascii?q?ALIBsP7QRL/A8AjIlwfuH574rIS59MzyVWreptXCXWDJdl61z1R3qKjlj/TfWu?= =?us-ascii?q?j/am3RlOzP721NkURgJ/A1BHx+lKjksoNK13K64Is4HWsD+Hb1/1sXnxx+uhIF?= =?us-ascii?q?lRzczUeEPiDIrZq2XzTi0c9WcTRY9Vx3HVDY4SnBZhaKY3uFVMJ5irelzk6Dw+?= =?us-ascii?q?wIRmBKK1Vdyxx1k/s3YJWSOqE9tHC+FptFLXWTJlY5C3qJXrIZpSWGpQ9Iebq1?= =?us-ascii?q?hHjEVnKzS5xoZEK8FR/j4MWyBCoDuHsNSuSM1D2Mp2D54WLdd8oHr9Gb1LN4aP?= =?us-ascii?q?rHEsvbzv0HDZ8SgmsFim3DWzB7O4T+VB8m0GHQUpI36RqlMhDusr9mfS/EvAsl?= =?us-ascii?q?Vz/+dcHbiAk1l+oCx6HpBVHTZJ1HalL1tpQHlBqeVaJ7zfc9ZATPkqeR+vJxs+?= =?us-ascii?q?GOY80EyT4EF0m231Yy9puwtb+iDdXhU0WjIPjrfrhzIettmtOSUGRJJQcTUhcy?= =?us-ascii?q?DFJhqHmSBQuRZScF1qV4wcAtle4b0b25Vb/tbaQ0a2NS4FRABiNh4/0fdHlU5M?= =?us-ascii?q?ql+YdjrZDQW1bvvArwN4fd+JrMG3KPT24h1HhpngsOAi+KUJX2emlhG1QdDCs4?= =?us-ascii?q?/8scWHtkmJdKjmKOCzfGHOTCPSghCqmbcrEYTF8zLVMAVFN5lw0WAkboT5CW7X?= =?us-ascii?q?IRRGILoWKFFVVa9mddlLoP1WasF/dakV/q9tAw6ISQn0GIyztvVGKEjcRSjGJS?= =?us-ascii?q?Wb7uO/uZ7T7aDaSeX4fMyD2WvIQ6JtMZdm8jT7H7Dq0ZFA9Uboxvht8V51Rkbc?= =?us-ascii?q?PyCHstvhOhsB5NO+eUv6op0pATTWDY9okHr22kFPbdcYQzGx/ZQDz5NZ9WzwRv?= =?us-ascii?q?5m3Uj1rO1S7aNr6Y0t77Bu08e0Kr/YKe5Gvk9/HhiUGgJq+40xAGhlWW9efPIe?= =?us-ascii?q?JezMfaQdkcDusfr4F7IW6B2S/+xWd8fHK1vGmsmlBTGWUQZEkxsZqT4GMguc0O?= =?us-ascii?q?aIm6puRsahoej2xF4t40SkIREc171t45mL+raTpODLdRTR1aYLVrLsRsztsrQm?= =?us-ascii?q?o1mS6uE8lL4SZmx1ZBWqEOoHWc4HwWfg1qQqwjgyE87YGrLg5fpDV244nj38mp?= =?us-ascii?q?ByBVMWGugOEbqM54RekX8ym/bFOd0ObqBChmGPGAamErAYz36r5TGXIG54jR7Q?= =?us-ascii?q?yBzwXXm87FntrS9/WyfMycnsklZNXLmtGUhSRzapOVN/sD6XMwroqdv3uaAx7E?= =?us-ascii?q?4oN2zpr8+Cm3W6N7NWBcL/IsaQIS4upFIYlJcxXMCg2ZgHGdqhJ9cc6Hd+bv/F?= =?us-ascii?q?5mOqlS9Bpr1Lh4vY4sGb4PXYB2Kgj7GAq7WQ2D9Y1mU4vUsh5dy6MfHO/dKKSe?= =?us-ascii?q?yy12kNVyd/pxfBXxmtp7zeqFAUP1CL0EjVl4ERO9FZ3GM31kf46+g/TtMz8x9e?= =?us-ascii?q?FoXbZ/8YozD8Jif0y06FY90rTimezydXHlXtHFl8A6g83WL9sdnHlXjO5lIoQZ?= =?us-ascii?q?NweFb/hRxtCIU4K1wi50QLwiYZFggNcx+bBqmyBUv5NYsESVQDaROf0bihYKg3?= =?us-ascii?q?w1d8wryx6+/IduF8HLACNuhHgQ6BgldbAYgasasAT7JgY1Vd7rLYphD+C4j7WP?= =?us-ascii?q?jrjXgwNfywQs1B9MAWqXsj7RilRxqh75dD4KwXiJaWea5YeZLMptxz71975T4T?= =?us-ascii?q?cSxAmBl/jhKjXu8GuO/u+cPbv4S06umwSKkhXeIX9wI7B25mlZv/nEgjoc3L1+?= =?us-ascii?q?dbUoDakoX/8BtDInGQuoba0gV8KfIUJIK2eLZt7GkIJy8DKH0QJ9WWduM84yh3?= =?us-ascii?q?MDrJ/VBCBdkMZdwANsrXhQ9UklHpWK1U9sfDAl+XEZtzeNwo72v5zzA165g8Xv?= =?us-ascii?q?/76DCoIZDf7ldNP+5MjSh3jNLNvvQVzubSCCkZ5nmZcRt1zjmBy5aTEfbw+/uD?= =?us-ascii?q?yNXOW1MBBC42XJ9XJCCe9gy/Wuq1iJLpXxuI6s/pnp0+cFifRnqvk6ker6lMEO?= =?us-ascii?q?FAiiTn3jdEDYD6neiVs8e25GtRqFJHDJ557QfZF6VHIpV7JRP4m9GkRkdmHCvw?= =?us-ascii?q?Zt3Udho1teqSx+cM//txN0vkao8GORII0bT65mRJTgF2Ur75ok6ZXf4NZNthUP?= =?us-ascii?q?7EoW5a6YR8K68IO1iRo4fqoSlMqFA3Bg8pdbAxoydedkbQhg1UW7z7tKQGigQC?= =?us-ascii?q?Td5zoVVMFn6oOGIi+zrHUrxYjK+QCPMJ9TWTSrYBU15yPiN/RBO1345ue6CykP?= =?us-ascii?q?BCvW5HkTlxoP8w0zxpXBG8ozHjp7oR2TI8/7G1rDoBtmBeTuWFiivGFFpNwvIL?= =?us-ascii?q?jacaFnbj5kexYHYGbITo5rloO97s9Y4743QweR8jZTEJXfy8CyHsiKOFGo6PsN?= =?us-ascii?q?VchB6LosnBcb+zLSwPNrsgyBPjRn590hPdnBZp62YLXDSg7ME+K4W5JMklxzCk?= =?us-ascii?q?GW7Fe1YQ+qlJqtf+tUYXTOsqblNs2GRj0tadSS0LX8HPH3s1gRUlaWVDa5JP8x?= =?us-ascii?q?gaF7MngjyQpKlJ4hkUYCvIEoSi4oTQn9nH2XczTddu3W/XqLeKhpU03315gd90?= =?us-ascii?q?6DCBuGgKfezCT8BsGmTz1ptYyeHmaPWttucHSYV4x7SlVP8PKdKj+Wyw2JVrRk?= =?us-ascii?q?Cp3LIeEESlMOUb3LfUTz+lSXGEWeSMa2WMnTY5M07q5RmvKl03adtKoFEmP+vH?= =?us-ascii?q?h55cixfhXq1uSiWXv1/bw3QpMfkGeAIupIenZwsKQfYNZ+idIOgj2+E+CFoQYH?= =?us-ascii?q?/KAyR2D/W6sVizk4hnI39g+1n1Yfzx8gD6N9ufAhwEEY/Zrp5y/vy3XWCBNmVj?= =?us-ascii?q?zB11Okl76eHfG043tuBCb5abhcLQiMhj0e4Za/dtNjUwtcUNlYJl9YmZy9yKcR?= =?us-ascii?q?XWzpbuOdHVvOaXDODFw0QtYGFaXaITYRnp6IUiIt45R7rTEKNXvRsCAag6QYQh?= =?us-ascii?q?OHnq+aB1LQNzdwvRa6qugsnuuO2HfJxUp2XZ7lgoNifTpwUDyuCoTQx8d52riW?= =?us-ascii?q?3yIIoxRj1dsdJgER5mHIpTG8MasQWrGZmUmLu0i9Wp4UN1p/cKsbbsCvDNzNm5?= =?us-ascii?q?2IFxUIZB6EyTODbeHrJrglhkjuuunvfAyIf+Bt34ddMCSud7XnbPaqXaEYWnNj?= =?us-ascii?q?KOJsX8dlZC876d1rJ5TxqQaDn9X6qHry2kKO5k7F46yoNieurTyyYh77bB2Nv9?= =?us-ascii?q?f2tbvDusrWaVNJtD61zHHffeUAxQSfqE9mZlAKIWYYz7+ucSMdwt3sKc7Bdr7D?= =?us-ascii?q?tYy8aFILaurlXK2k1lcZLUN1bp2ykjVYkNOhS/PlMmgXXFpXTFHXRcMs+kJNFo?= =?us-ascii?q?gNmPEhPt50hxmWcqZmNaBGroRNGRNnYf28K/Yg2K6Q1KA8wEn+6tdk4yrreyRv?= =?us-ascii?q?VwOpVZheWqs60KkdRzJCHMQ8hVJDrdLKJwPjpNDuXPo0UoYhEEs7gpQIs1Y4aB?= =?us-ascii?q?IF8fOkea1Szy1RfC0VHzd9G026aGOj0Z8m9Gz73b1ThBvBe5ufKDjc34UbDZcY?= =?us-ascii?q?v6XPjMPyo5TjuaXyg9EV61+Ve4vPoJpPiYIWIYolAOeCKSCRUTq7tprdfKC2/c?= =?us-ascii?q?h+xjcIcNhPCAVCD6UDd4m7YqBiZXqUCMROIOFRLYb3/knGVRuQ+vK+RS/X37db?= =?us-ascii?q?2Yx6tUW+sQAodWdP2WXcfYKrhiIGIzmzEYPvusV8HNpLY+lFTTRC0WFLeb2keZ?= =?us-ascii?q?SRu0S/mR3HrAVJ8JspJ87ig38dvKgnVfD7XDP7HZoSWntIG/knDL6qXlSmAxbh?= =?us-ascii?q?lt06o5C26bzUwFcjkJ?= X-IPAS-Result: =?us-ascii?q?A2F7AgDH8hFZ/wHyM5BdGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBgwEpgVwSjnSRVZAhhmcoinFXAQEBAQEBAQECAQJoKIIzIoJIAiRVAwkCF?= =?us-ascii?q?zEIAwFsBYgDTYE/DbRYOiYCinuIPYJniwAFgSwBiBeUPwKTDA2LGYZQAkiTeFi?= =?us-ascii?q?BCiYJAh4ngUKDQ0QcgX9aiHQBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 09 May 2017 16:53: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 v49GrTX7016352; Tue, 9 May 2017 12:53:32 -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 v49GrRFX148534 for ; Tue, 9 May 2017 12:53:27 -0400 Received: from moss-lions.infosec.tycho.ncsc.mil (moss-lions [192.168.25.4]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id v49GrQoe016350 for ; Tue, 9 May 2017 12:53:26 -0400 From: James Carter To: selinux@tycho.nsa.gov Subject: [PATCH] libsepol: Expand attributes with TYPE_FLAGS_EXPAND_ATTR_TRUE set Date: Tue, 9 May 2017 12:54:11 -0400 Message-Id: <20170509165411.18720-1-jwcart2@tycho.nsa.gov> X-Mailer: git-send-email 2.9.3 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 Commit 1089665e31a647a5f0ba2eabe8ac6232b384bed9 (Add attribute expansion options) adds an expandattribute rule to the policy.conf language which sets a type_datum flag. Currently the flag is used only when writing out CIL policy from a policy.conf. Make use of the flag when expanding policy to expand policy rules and remove all type associations for an attribute that has TYPE_FLAGS_EXPAND_ATTR_TRUE set. (The attribute will remain in the policy, but have no types associated with it.) Signed-off-by: James Carter --- libsepol/src/expand.c | 72 ++++++++++++++++++++++++++++++--------------------- libsepol/src/link.c | 8 +++--- 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index 54bf781..74a650f 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -2360,6 +2360,20 @@ oom: return -1; } +static int remove_types_from_expanded(hashtab_key_t key + __attribute__ ((unused)), hashtab_datum_t datum, + void *ptr) +{ + type_datum_t *type = (type_datum_t *) datum; + + if (type->flavor == TYPE_ATTRIB && (type->flags & TYPE_FLAGS_EXPAND_ATTR_TRUE)) { + ebitmap_destroy(&type->types); + ebitmap_init(&type->types); + } + + return 0; +} + /* converts typeset using typemap and expands into ebitmap_t types using the attributes in the passed in policy. * this should not be called until after all the blocks have been processed and the attributes in target policy * are complete. */ @@ -2513,46 +2527,41 @@ int type_set_expand(type_set_t * set, ebitmap_t * t, policydb_t * p, unsigned int i; ebitmap_t types, neg_types; ebitmap_node_t *tnode; + unsigned char expand = alwaysexpand || ebitmap_length(&set->negset) || set->flags; + type_datum_t *type; int rc =-1; ebitmap_init(&types); ebitmap_init(t); - if (alwaysexpand || ebitmap_length(&set->negset) || set->flags) { - /* First go through the types and OR all the attributes to types */ - ebitmap_for_each_bit(&set->types, tnode, i) { - if (ebitmap_node_get_bit(tnode, i)) { + /* First go through the types and OR all the attributes to types */ + ebitmap_for_each_bit(&set->types, tnode, i) { + if (!ebitmap_node_get_bit(tnode, i)) + continue; + + /* + * invalid policies might have more types set in the ebitmap than + * what's available in the type_val_to_struct mapping + */ + if (i >= p->p_types.nprim) + goto err_types; - /* - * invalid policies might have more types set in the ebitmap than - * what's available in the type_val_to_struct mapping - */ - if (i >= p->p_types.nprim) - goto err_types; + type = p->type_val_to_struct[i]; - if (!p->type_val_to_struct[i]) { - goto err_types; - } + if (!type) { + goto err_types; + } - if (p->type_val_to_struct[i]->flavor == - TYPE_ATTRIB) { - if (ebitmap_union - (&types, - &p->type_val_to_struct[i]-> - types)) { - goto err_types; - } - } else { - if (ebitmap_set_bit(&types, i, 1)) { - goto err_types; - } - } + if (type->flavor == TYPE_ATTRIB && + (expand || (type->flags & TYPE_FLAGS_EXPAND_ATTR_TRUE))) { + if (ebitmap_union(&types, &type->types)) { + goto err_types; + } + } else { + if (ebitmap_set_bit(&types, i, 1)) { + goto err_types; } } - } else { - /* No expansion of attributes, just copy the set as is. */ - if (ebitmap_cpy(&types, &set->types)) - goto err_types; } /* Now do the same thing for negset */ @@ -3160,6 +3169,9 @@ int expand_module(sepol_handle_t * handle, if (genfs_copy(&state)) goto cleanup; + if (hashtab_map(state.out->p_types.table, remove_types_from_expanded, &state)) + goto cleanup; + /* Build the type<->attribute maps and remove attributes. */ state.out->attr_type_map = malloc(state.out->p_types.nprim * sizeof(ebitmap_t)); diff --git a/libsepol/src/link.c b/libsepol/src/link.c index f211164..52770f4 100644 --- a/libsepol/src/link.c +++ b/libsepol/src/link.c @@ -467,8 +467,8 @@ static int type_copy_callback(hashtab_key_t key, hashtab_datum_t datum, state->cur_mod_name, id); return -1; } - /* permissive should pass to the base type */ - base_type->flags |= (type->flags & TYPE_FLAGS_PERMISSIVE); + + base_type->flags |= type->flags; } else { if (state->verbose) INFO(state->handle, "copying type %s", id); @@ -890,7 +890,7 @@ static int alias_copy_callback(hashtab_key_t key, hashtab_datum_t datum, return -1; } - target_type->flags |= (type->flags & TYPE_FLAGS_PERMISSIVE); + target_type->flags |= type->flags; base_type = hashtab_search(state->base->p_types.table, id); if (base_type == NULL) { @@ -938,7 +938,7 @@ static int alias_copy_callback(hashtab_key_t key, hashtab_datum_t datum, base_type->flavor = TYPE_ALIAS; base_type->primary = target_type->s.value; - base_type->flags |= (target_type->flags & TYPE_FLAGS_PERMISSIVE); + base_type->flags |= target_type->flags; } /* the aliases map points from its value to its primary so when this module