From patchwork Mon May 1 13:21:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Haines X-Patchwork-Id: 9706543 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 B9EEE6020B for ; Mon, 1 May 2017 13:22:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A6F7322B26 for ; Mon, 1 May 2017 13:22:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 984D127C0B; Mon, 1 May 2017 13:22:41 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_NONE,T_DKIM_INVALID autolearn=no 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 98D9C22B26 for ; Mon, 1 May 2017 13:22:40 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.37,400,1488844800"; d="scan'208";a="6503499" IronPort-PHdr: =?us-ascii?q?9a23=3AhkdUhBEdD6MbrRtegzBV+Z1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ79pcu7bnLW6fgltlLVR4KTs6sC0LuI9f28EjJaqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdzIRmsrQjcucYajIp8Jq0s1hbHv3xEdv?= =?us-ascii?q?hMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTD?= =?us-ascii?q?QhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlS?= =?us-ascii?q?kINyQ98GrKlMJ+iqxVqw+lqxBm3oLYfISZOfxjda3fYNwaX3JMUMZPWSJcDI2y?= =?us-ascii?q?bIwBD/IDMOpFoYTyuUAOoACiCQWwHu7j1iVFimPq0aA8zu8vERvG3AslH98WrH?= =?us-ascii?q?rUrcn6NKcIXuCv0abD0DfNYOlX2Tf79ofIaQ0qrPaWXbJxbcXRyVMgFxnYgVqI?= =?us-ascii?q?tYPqJzOV2f4Ms2id8eVgTvmihHU7qwFwpDiv2tkjipPPho0L1lDI7zl2wIEwJd?= =?us-ascii?q?ChTkNwfN2qEINIui2HOIZ7TdkuTmF1tCog1LELtoC3cDIXxJg/xBPSauaLf5WG?= =?us-ascii?q?7x/sTuqdPyt0iG5/dL+/mhq/91WrxPfmWcmuyllKqzJIktzLtn8QyRPe8tOHSv?= =?us-ascii?q?5h/ke53jaPyhzT5vlEIU8qkarbLIYswqIqmZoJsETDAzT2lF/qjK6Wakok+u+o?= =?us-ascii?q?5/7hYrr6vZ+TK5V4igT/MqQqgsC/AOI4PRYSX2WD5Oix27Lu8Vf5TblXlPE6jK?= =?us-ascii?q?bUvI7AKcgGvqK5BhVa0ocn6xaxFTem19EYkGEcLF1bfBKHjo7pO0zBIfzhFvi/?= =?us-ascii?q?hEmskDF3yP/YJb3sGYnNL3jfn7fherZx8UhcyBEpwtxF6JJUDa8BLOrpWkDtrN?= =?us-ascii?q?zYEgM5MwuszublD9V90JkRWX6PAqCDNqPfql2I5uUpI+mJfoAVoyr9JOY/5/71?= =?us-ascii?q?l3M5nkUdfaax15sNdH+4BuhmI1meYXf0gNcBE30FsRY9TOzxj12CVz9TZ2ipUq?= =?us-ascii?q?Iy4jE7FY2nApzeRoCrnLyBwT23HppMZmBJElqMC2vnd52YW/cQbyKfOsFgkj0A?= =?us-ascii?q?VbikVYAhzwqjtAHkxLV6KerU4DcXtYr51Nhy5e3ciw099SBuA8SayWGNQHl+nn?= =?us-ascii?q?kUSD8uwKB/vUt9x0+e3qdkhvxYEtpT5+9UXgohK57T0fZ6C9HzWwLGeNeFUlCm?= =?us-ascii?q?Tcu6ATspVNI+38cOY1phG9Wllh3MwjaqDKUPl7GQGJM09afc0GTrKMZm13bKzq?= =?us-ascii?q?8hgEc6QsFXL22pmrZ/9xTPB47Oi0iYl6erdaMa3CPW8WeDyXOCvEBeUAJqV6XK?= =?us-ascii?q?R2ofZkjXrdTn+EzOVbmuBqo7MgFZ086NNrNKasH1jVVBXPrsI8/Rb2W1m2exHh?= =?us-ascii?q?aI2qiMYJDxe2oDwCrRElMEnB4X/XaHMwg+GyigrnnCAz1uD1Lvfljs/fNwqXyh?= =?us-ascii?q?Uk801AaKb0t727qy4B4ViuSWS+kP0bIcpCchtzJ0EU6j0NLOEdWAvQthfL5HbN?= =?us-ascii?q?Ml+lhHz2PZtxdlPpykNa9tmkARfx5wv0P02BV9Ep9AntQyrHM20ApyLrqV0F1b?= =?us-ascii?q?dzyC25D/JrzXKnLp8RCqc67W20jS0M2Y+6cU8vg4rE/jvA6xHEo473pny8VV02?= =?us-ascii?q?eb5pjSDwodS5HxUkEq9xVhpLHVeCo954TJ1XF2Nqm0qDDC0cozBOQ50hagY8tf?= =?us-ascii?q?MKScGQDoDsIaHcmuJ/Iwm1WydB0LIOVS+LQzP8O8ePuMwLSrM/p4nDK6kWRH55?= =?us-ascii?q?hw0lmC9ypmTe7IxIoFzuqD3guBUDf9glKhvdrxmYxeYzEdAHa/wzD+BIFNfq1y?= =?us-ascii?q?YZoLCWC2Lsy53Np+g4LtVGBC9F64HF4GxtGmeQCJYFzg2A1cz0MXoWaomSGg1T?= =?us-ascii?q?x7jykprraD3CzJ2+niaAcINXNKRGZ4iVfhOpS7j9cfXEe0dQcpjwel6Vz8x6dF?= =?us-ascii?q?uKR1N3PTTltQfyjqM2FiVbO9tryDY85L7JMnrz5XXf+mbl+EUL79pAEW0yT5H2?= =?us-ascii?q?tR3Do7bS2luo3lnxxmj2KQNGhzrHvFdsFswhff/sbQSuJR3joBQil4hiLaBly9?= =?us-ascii?q?P9mv59qUjZDDvvq5V2K7WZ1ZaTPrwp+YtCun+W1qBgWyn/Symt38DQg2yDT72M?= =?us-ascii?q?duVSXJqhb8f4bq2r+hMeJ/f0loAl785NZhGo1klIs/mo0Q02AAhpqJ5XoHjXvz?= =?us-ascii?q?MdJD1KLka3oNQToLzMDP4Af5301iIGmEx5nkVnqB2cttfd66YnkZ2igl9cBFFL?= =?us-ascii?q?+U7KBYnStyule4tRjeYeV5njsH0/Qi8mUVg+YNuAoxySWdBKsfHUxEMSzqkBSH?= =?us-ascii?q?88qyrKNJa2azabKwzlZxnci9DLGepQFRQHX5dYkkHS9r9ch/M0zD0Hvo6oHiZt?= =?us-ascii?q?bQccgfthqOkxfPl+JVMo4+luIWhSp7PmLwpWMly+gmghF1w5G6upWIK2V38KK/?= =?us-ascii?q?HBFYKiX/Z9kP9TH1kaZegsGW0pi3Hpp7BzULWIDlQu6pEDIOtfXrLgiOHyc6qn?= =?us-ascii?q?uBHrrfBwCf4l98r33TC5CrK22XJH4BwNV4WRaSOVdSgA8RXDQ1hJI5EB6lxND5?= =?us-ascii?q?ekdj+j8R/kL4qgdLyu9wLxnwSHrfpAO2ZTcsUpefKgZW4R9Y50rOLMye9fx8Hz?= =?us-ascii?q?tD/pG7twyNLXGbZx5UAm4XVEyEAErjPraw6tXa9eiXGPa+JePUYbqSsexeS+uI?= =?us-ascii?q?xZW334to5TmMMNmPPn5nD/Ag1EpMQ212G8PDmzoVUywXjSXNb8yFqxig5i17tM?= =?us-ascii?q?e/8O7kWAj3/4uAF6NSMclz+xCxmaqDMvSfhCJ9KTlGypMM2WXHx6IE0V4UlS5u?= =?us-ascii?q?ayKtHqgaui7VUq3cgKlXAAAHaylrLstH87o83hVROc7ckt71zKR0j/AvB1dAT1?= =?us-ascii?q?PhnsapZMwRLm6nKFzHAVyHNLOcJT3E28v3e7+zSaVMjOVIsB29oTibE1X9MTue?= =?us-ascii?q?jDnmTRavMf1LjCGAJxFRop2ychN3BWjkVtLmZQWxMMVrgj0u3b00mnTKOHYaMT?= =?us-ascii?q?hmaUxNtqWQ4DhWgvV+AWxB9WZlLeeFmyaf9ebYLIoZsfpxDSRwje5a5246y7RN?= =?us-ascii?q?5iFeWPN1gDfSrsJpo1y+iumA1CFoXwRIqjZKmIKLul5vOaTH+ZZeR3nI5hUN7X?= =?us-ascii?q?+fCx4SvdtqFsXvu7xMytjIjK/8NSxC/MzO8ssTHcjbMtyHPWE6MRXzGz7UEREF?= =?us-ascii?q?QiSxOWHbmkxdluud9meMopgmrZjsm5oPSrhBWFwzCPwaFlxvHMYeL5dvQjMkjb?= =?us-ascii?q?mbgdYT5XWkshneXspasY7cVv+JGvXgMiiZgqNLZxQW2rP0N4ITOZPn20Z6cFl1?= =?us-ascii?q?gJzKG1bMXdBKuiBudQ40oEpK8Hh4VWA8xlzqZRis4HAJE/64hBk2ihFxYe417j?= =?us-ascii?q?fj/083JkbWpCs3iEQ+g9rljiqPcDHvN6qwWplWBDTyt0g0KJz7QgJ1Yha1nU1r?= =?us-ascii?q?LjvEQKhRj7R4f2BxlADcoYdPGeJbTaBcfB8QwvSXa+8y0VRbqySo20lH6vDfCZ?= =?us-ascii?q?tligQqcoWhoG5H2wJmcNE6P7fQJLZTwlhWmK2Oojei1votzw8GO0YN7GSSdTYL?= =?us-ascii?q?uE0IMrkpOTGl/ulr6QyMlTtMZnQMV+YqovJt80MyJf6MzyT+3L5fMkqxLfCQL7?= =?us-ascii?q?uFu2jcks6FWlUw2V0SmElB5rV20sAjc1GIV081yruRDBcJNcvYJQFTccVS6GDZ?= =?us-ascii?q?fTySvuXV3ZJ1I4K9G/jyTeCQr6YbnFirHBw1EIQM9ckOBZis0FvFIsfgIr4F0Q?= =?us-ascii?q?8t6xrrJVmfCvRGZg6Lmi8do86j1J93wZVdJjYFDGpgNiW34LDXqRI0j/qHXdc7?= =?us-ascii?q?eW0VUZUeNnIxQsG6nDRZv3tYBjmtzu0Z0BSC7yP7pinIETbzdcRjZPaJahN3E9?= =?us-ascii?q?y54y8/87KxiV/Z6ZXROX31Ncl4ut/O9eMbp4yLC/VKQrlhq03cgZVXR2S2U27T?= =?us-ascii?q?Ft64P5zwa442bdPqDHa7U1u/hik6T8f3IdahNK+IgRvnRYxMqomUwCgjNdOhFj?= =?us-ascii?q?EZAxpwvP8M5KZ9ZQ0Ffpo6bgXluBg5N6y6PAiXyM6uQ3q3JTtQUfZf0f2wZ6ZL?= =?us-ascii?q?wCo0cu+61HwgQ4k5z+mt8U8CXpcKjg3exfu4aIleVjDzFWBHdwXJuyU5i3BrNv?= =?us-ascii?q?wuzecn3BPIrV4cPiiXdOxobWxEuM08BVOSIHhtF2U4Rl+dgpDY7QK22bAd4Tdd?= =?us-ascii?q?lc5O0eJZqHj+ooPfYDW0VaOxrZXVsjYvYsY+rK10MY3jJMyGtJXEkTHEV5bQsx?= =?us-ascii?q?eKUCijG/pUh9hcOiRYT+dUmWs9I8wJpZJB6VYtVsc5P7FAE7cjpraxZDV+ECES?= =?us-ascii?q?0zEWV5mb3DMYmOe926HWlhCKcJQtKBYEqolNgsMBUy5qZSMTvKCjV5jXl2+ATm?= =?us-ascii?q?gEPgIT4B9R6w0ejYBwf/rq4IzSQJ9L0T5WrOp+UjHXGZlw61v7VmaWjEDiSPWn?= =?us-ascii?q?kuymwQJSzPXo0tkAQBBxEFVTyfxKm0UvM7x4N64QvovWvTCSbkP6oHjhyO24K1?= =?us-ascii?q?lN0cfUbUH3DJLZtWrgVS0R4WcUSpVVyHHYDpsfiBZ5aLwxq1VSPo+mfkf+5zor?= =?us-ascii?q?x4RtHrm4WsCrx0orrXkcXSeqFsBNC+d4v1LLQDdleYykqI35O5VORW9d4JOcp0?= =?us-ascii?q?1Fn0VtMi65zJtcJNtO4jMXXThAvyuSs8WoRM1Ew892AIcGIs1jtHflBKNEJJ+R?= =?us-ascii?q?rmUstbz113/Z/SowsFShyTWyGq+4Tv5Z8HYEFgUvOWuetlElD/Ew/WfK7lDNrl?= =?us-ascii?q?d08v9aBriJkUV+vjJ9EY5LBjlXyXClNVRyQWJBs+VCNqvVdclcTOMzZR+rIBM+?= =?us-ascii?q?EvEn01aO/UFuknfzezZyuRdC+yDBQwk0UjEYgrj3mTIErMGnJSQXS5NPbTQvaS?= =?us-ascii?q?fFNwKblj5WvBZZd0FlRYoZDsxD+74FwYte5tDCRlq0KSEZQBxiMRo10eZYlU5G?= =?us-ascii?q?q0iYZTzRDQ+zevrVtB14Y9uRptazLPvl5AdHlp/nsOcg+qUDXXKmgxeiQdTDoI?= =?us-ascii?q?Lnq9KFqFOOdL/mPO24f3DBViLAjReqhbcrF5PK5TTcMBJHK5lmznopeZrhCWnV?= =?us-ascii?q?MhldOq0UOVFbWr5gadVavO9VetVoeKAX9q9xHhiHXA/gGJSzrPlaKVbeXS/RLy?= =?us-ascii?q?ud/eCjo4/f8LLQRPP8acyLwnbIX7h4Poxm6TXhHbflz5Ne8FLs2vhx7kN6VUTG?= =?us-ascii?q?MyeZodT7OAwE+cmieVH+vpAyGTPWB4lwn2Tzyk5ccMoYXjOl/I4eyJxH9Hb6Uf?= =?us-ascii?q?h43VTrsO1O67lk7pE646hyyceoP6jdNOhavFR8AhiTGwVq7IkiD3Z5R2BNeO8e?= =?us-ascii?q?MvPRcb4ejcD0pOD9D7YX5wGN++xFddvHIFnMmtWlCj6CVxNLgRwMqSMeLguAzf?= =?us-ascii?q?6KgbF0Sceipej9xE0t/0KyLhkczLBi/Y2E4LaHpPfLbxvNyrgJQqrqSdnprrQr?= =?us-ascii?q?oEOS4ecrlKAVd2xwfg2nFPQdVs8ByWfh168qyzksH9nEH7L69/5JT2g5kS74m5?= =?us-ascii?q?BhA1UWHesZHbiR8oRYkGc4gevZOcAIfa1ZhmaADxikEqQFyXKx7SuYPnVliAnU?= =?us-ascii?q?0x7sWWOz8EP2rShgTCvKy9fuiUtVVr+yBUtIXiqpP0F4sCmVMwrzqNr3o7k141?= =?us-ascii?q?0qMmz5rtKCinGtOLRNH83wPNacOzU7pEoLjJ0tQdyiwYYbGduhL9cW9HFxdODe?= =?us-ascii?q?53mqky9GpKdHnJHe79qQ+vjYEnislaqaq6+CxDpA0Hg3oUk/6sy8NvHJ/9CFX+?= =?us-ascii?q?6n12IPQCdkpwvAXxm1p6fAr18IOEyEzkHLmJALPt5Dx3U40F/p5PQ7StIp6Ape?= =?us-ascii?q?DprAZ+8FpT3rPDv02lOfbtIsWymQzTRYA1X1EUNiF6gkwmLwu8DJmmnM9F00XI?= =?us-ascii?q?VwcFbnhRNvBYUiNU0t8EQXwjYEEQUVaxCbDbSoCF/gLYQaVUkMdw6H3Lm8eqc4?= =?us-ascii?q?x0FzxK2g5PPLZ+xmG6UNLupdjhKJnFVDG5IXsLcRT6hgdFJG767YuBTiBJb7UP?= =?us-ascii?q?T8knowL/K1SNhA8c8Fr3si/hq/Rx245JhY7rYbk56JebRGYZjNoMB8911o5SML?= =?us-ascii?q?diFWnBd/iA62Xv4Gq+D++Njbt4Co5fy0WKYqXeUX+AA+B35igJvonFAjvdbX2v?= =?us-ascii?q?9ESoLPlYTw7ABNInCNuIbA0BlwMPEOJJyvfLZh8XUHOicfKmkWPdWMd/kz/y9t?= =?us-ascii?q?MTvU51xYAcMAf9AYM9TXmQBSlELpXKtf9s3BGl+XE41zbdwn73LryDAp9psxSv?= =?us-ascii?q?rg6CWoKpDb9V5NOe1MgT5xm9LDq+gVwObSBzIM4XaDcRh13zmOy5+TBPbs5e+M?= =?us-ascii?q?0s3bV0saHi4qVIdQPDWC9ha9RuWriJXpUhiZ6svygJIiak2QRma+nLkesqpWF+?= =?us-ascii?q?5PlDn71CBEFo/pn/KVr8as6GxPu11IDolz6wHFGKJYPpl8IhT3iM2rRkl6Bivi?= =?us-ascii?q?d8DZbR4ut/SMxuYM+epyLU3+apEHIhgc0bL19WJVThdySL7xpluWQeARa8F6R/?= =?us-ascii?q?7fsn9V7oZgK6sOPFeDvpzqsilHp0w2AAMzb78wtDNafFHUnAJJQ6b0pKIAigwE?= =?us-ascii?q?XN58vk9MH36wOG0g6DfcUKRVjbOeCPoL/TWPQK0OVF9oMiBlQx+v3pVhZaepl+?= =?us-ascii?q?hdsmxahiN9vOQq0zt+SRuzpSLsvLkN1Ss99r+3sjsBuHpFTviRkirTBlVDye4F?= =?us-ascii?q?jaECBHr47ly8enYDZpPo4LZ7PcTg6ZUh43MnbBUheC0GXeKgBzvsgKOIBoyPrc?= =?us-ascii?q?9ThR+MuMXIdr+zLikSO68jyRLiWXhyyAzekwtp8GcRRDWv8sMkLp2nOck53iqo?= =?us-ascii?q?BXTbdFEU76NIrsv+r1gLQfAyaVN83Wpj08+HRjYXSMzIAWY1gRAuaX9Yf5Jb9R?= =?us-ascii?q?8aC64ojy6KvqZY8AEUbjPUH5+r+4bKm8fHx2U9Qc1sxm3Iuq2Pnokq32F9m9No?= =?us-ascii?q?8i6Ov2wfd+PcU89rDHn8yINfyejlavW2teAHTopmx6i7XP8ELMaj5XO82I92VU?= =?us-ascii?q?+92rQeA125PfcBxrfbUyalUWqYWeCKc2iQgTk0KUvy5Ri0Ll0tdshGtUg9MvHN?= =?us-ascii?q?hpREjQ3uTat0RjmMpV/c1GEjPv4adwMrt4egYAEKUPQRaPaaJegy2vI+DEEDb3?= =?us-ascii?q?nVEit3EeC6q1itk5ZnO394+0X1ffzt8hz6MNuVAhQEDY/arptq9PymR2KOJXxg?= =?us-ascii?q?wwN2PEVu8efQCUgxvPdGc5mNhdjQm8h70ekdevdoMC09ud0TmoV45ImWysiKch?= =?us-ascii?q?bRzpDsKtHTuPSYBePQz1gycGFATrUZeR/155k9PtMhQLLcA71ZvQgHCKghRJwh?= =?us-ascii?q?MHvx9L1qLAxtbwHdfrO0gtPlpuiTfJtbu2fW7k4sLCfboxAD0vu0TQhhYJCwiX?= =?us-ascii?q?TyJ5QwRjxaot1oDRtmG5BPFN0coAq9BJ6Ug7q7i963+0N1oeMKtrDwCv/S3tSj?= =?us-ascii?q?w4pxR4Ra5VCMPDvJCqlknEBljuWqgvjeyZTwCMLiedYBVOdlWG7FbqHJEp+4Kj?= =?us-ascii?q?KUNcL2Y1RG/KKE0LJlThWRYzj0XqSetC2+NfVr/Vs0x5d9fOrS0Dwt9a/U1MH1?= =?us-ascii?q?Z2FBqSeptWSJO4dH7FzWGezeWApZSf2B8Gl7BqAXdY/0+/0VMdw+wdiT/xVz7C?= =?us-ascii?q?5c38SbOaShqFHD2l5jf5LBMETpwzo5WZUNIBmnNUssgGnZqmnSAHhFKsikKNJt?= =?us-ascii?q?gMqODhH25kl+g2ctZmlbFmrvX9eRNnAR29iiaw2S6AJLE9EDkvaseUEmsq2ySO?= =?us-ascii?q?9oOohKmOmtu7sHjdZpJD/VRMdEJyHfNqR7PjlPAeXVolgnfBoEvKMoWoc6f5SO?= =?us-ascii?q?J1kHMEiYwyPo0QTCyVH0d8Cr1KuRJSYZ6GlIz7LE0ThKoAm0ouiZgszlUL/HaJ?= =?us-ascii?q?H2XfjSMDcqVz2AQjQyC0mp80++u/UYpPqYPXsfolcMbyKQEgETpadvosPLA2/O?= =?us-ascii?q?n+1jYJ0KhPeHWyD/SC14iLA+BiBVukCQW/ADDxXZb2f9gGpAvwyvPvBM8mj+YL?= =?us-ascii?q?2Cx6paRegWD5BScv2dWdTYYvFeJyoymjUfJum8Y8XWr6wl3VLQUWsZD67I+UWc?= =?us-ascii?q?TE6TRfyc3SjrXYQOv4UvvCon4NfQkTF2E6jSOLafvTGu+JaijCmEoe3eSnUtY0?= =?us-ascii?q?stjeIZDmmBxQVPJWAHBtwOpkHiXLSAZ0dN1XIuj+JiwRkMdxpvUnd2yH1ZgO69?= =?us-ascii?q?GtFFSV4TlG6uQvoGbFZzDD4r+E+F/BD9YdIHucDJW2BR6KEASYwDI/k0u8HrP/?= =?us-ascii?q?4LzfIo2i92iDAruCWaSVVGh0SK9LSDMrh7w+h45GI49ut6FmGGQjXSaSCT0Iut?= =?us-ascii?q?C8tVyRBllnDt1szZpchnKLpcu4xjBloWRylxI4aOrnh6TWjo1V7q7F6AFzOELW?= =?us-ascii?q?dcuW4G?= X-IPAS-Result: =?us-ascii?q?A2HeAgCTNQdZ/wHyM5BdHAYMGQYMgwMpgW6Oc6Fnhio/JYo?= =?us-ascii?q?8VwEBAQEBAQEBAgECaCiCMyINRiYyAQEBAQEBAQEBAQEBAQEBGgIISAEhAj0BO?= =?us-ascii?q?QIDCQIFEjEIAwFsBYhPgTIBAxUErmkmAoJiBYEChDuCZAQIhE+DboVvh3QFiTY?= =?us-ascii?q?HiCmLbZMEgg+JEAyGPgJIk2VYgQouICFZhCEMRByBZHSGPCuCEAEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 01 May 2017 13:22:38 +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 v41DMSUh013097; Mon, 1 May 2017 09:22:33 -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 v41DLUes263335 for ; Mon, 1 May 2017 09:21:30 -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 v41DLUY2012826 for ; Mon, 1 May 2017 09:21:30 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1AFAQDPNQdZhpgAFEFdHQYMgy2CF7Bahm0OhhaEOVcBAgEBAQEBAhMBAQEKCQsIKIYLATgBFYE7iFSBMgEDFQSuaYMKBYEChDuCZAQIhE+DboVvhFsMgw0FiTYHiCmLbZMEgg+JHIY+AkiTZYFhLiAhWYQhAU8QDIFkdIY8K4IQAQEB X-IPAS-Result: A1AFAQDPNQdZhpgAFEFdHQYMgy2CF7Bahm0OhhaEOVcBAgEBAQEBAhMBAQEKCQsIKIYLATgBFYE7iFSBMgEDFQSuaYMKBYEChDuCZAQIhE+DboVvhFsMgw0FiTYHiCmLbZMEgg+JHIY+AkiTZYFhLiAhWYQhAU8QDIFkdIY8K4IQAQEB X-IronPort-AV: E=Sophos;i="5.37,400,1488862800"; d="scan'208";a="6035614" 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; 01 May 2017 09:21:27 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AAsy7CxRdscOKvPllAXFRJyAV5Npsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa69bReN2/xhgRfzUJnB7Loc0qyN4v6mBDBLv8zJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBS7oR/Ru8QZjodvK7g9wQbVr3VVfO?= =?us-ascii?q?hb2XlmLk+JkRbm4cew8p9j8yBOtP8k6sVNT6b0cbkmQLJBFDgpPHw768PttRnY?= =?us-ascii?q?UAuA/WAcXXkMkhpJGAfK8hf3VYrsvyTgt+p93C6aPdDqTb0xRD+v4btnRAPuhS?= =?us-ascii?q?waMTMy7WPZhdFqjK9DoByvuQFxzYDXbo+SL/dyYr/RcMkGSWdbQspdSypMCZ68?= =?us-ascii?q?YYsVCOoBOP5VoZX8p1QSrRuxHxOsC/7ywTFKnHD23Ks63Po6EQrb2wEgBdMOv2?= =?us-ascii?q?jUrNrvLqcdTPi6w7XQwjXDdfxW2DH955bTch06uv6MQbNwcczNyUYxDQPFiEuf?= =?us-ascii?q?qZD/MzyJ0eQNtnGW4ux9Xuysk24qswB8rzi1yssyloXFnJ4ZxkrZ+Sh53oo5Pd?= =?us-ascii?q?61RU9hbdK5HpZduDuWO5VqTs8+WW1luDs2x7sbspChZicK0o4oxxvHZvyHbYeI?= =?us-ascii?q?5hXjWf6LITd3g3JlZa6/iwqx/ES8yuDwTNK70EpQoipBldnMsHAA2wbP5cifVv?= =?us-ascii?q?R9+kCh2SuS2AzJ9u5EJlo4lbfYK5I5w74wkIQcsVjbEyL3mEj6lrGaelk+9uS0?= =?us-ascii?q?8ejrf7XrqoGEO49xkA7+M6AumsKlAeQ/NwgDR3Kb+eWg273j50L5WqhFgeUqna?= =?us-ascii?q?bBsJDVP8UbpqinDA9OyYss8Aq/Dzag0NQEg3YHNlRFdwybj4TzJ17OJ/X4Ae+l?= =?us-ascii?q?g1uwiDdr2+zGPrr5D5XWMHfDlLbhfbBg609T0wcz0dBe6I5UCrEGOv7zXFTxu8?= =?us-ascii?q?bCAh82NAy03bWvNNIozY4aWGSSEoeFIajSthmO/etpLO6SN6EPvzOoEfku5/f0?= =?us-ascii?q?gTcZkF4bcLLhiYEWY3CxBPhRKHKZaHvqj8wpG3sLuBYzVurnlBuJVjsFNCX6ZL?= =?us-ascii?q?41+jxuUNHuNozEXI342LE=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GtAACTNQdZhpgAFEFdSAYMgwKCF7Bah?= =?us-ascii?q?ipDDoYWhDlXAQEBAQEBAQECAQIQAQEBCgkLCCgvgjMgD0YmMgEBAQEBAQEBAQE?= =?us-ascii?q?BAQEBARoCCEhhATgBFYE7iFSBMgEDFQSuaYMKBYEChDuCZAQIhE+DboVvhFsMg?= =?us-ascii?q?w0FiTYHiCmLbZMEgg+JHIY+AkiTZYFiLiAhWYQhAU8QDIFkdIY8K4IQAQEB?= X-IPAS-Result: =?us-ascii?q?A0GtAACTNQdZhpgAFEFdSAYMgwKCF7BahipDDoYWhDlXAQE?= =?us-ascii?q?BAQEBAQECAQIQAQEBCgkLCCgvgjMgD0YmMgEBAQEBAQEBAQEBAQEBARoCCEhhA?= =?us-ascii?q?TgBFYE7iFSBMgEDFQSuaYMKBYEChDuCZAQIhE+DboVvhFsMgw0FiTYHiCmLbZM?= =?us-ascii?q?Egg+JHIY+AkiTZYFiLiAhWYQhAU8QDIFkdIY8K4IQAQEB?= X-IronPort-AV: E=Sophos;i="5.37,400,1488844800"; d="scan'208";a="6503423" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from rgout0805.bt.lon5.cpcloud.co.uk ([65.20.0.152]) by emsm-gh1-uea10.nsa.gov with ESMTP; 01 May 2017 13:21:26 +0000 X-OWM-Source-IP: 86.134.200.51 (GB) X-OWM-Env-Sender: richard_c_haines@btinternet.com X-Junkmail-Premium-Raw: score=7/50, refid=2.7.2:2017.5.1.130916:17:7.944, ip=, rules=__HAS_FROM, __FRAUD_WEBMAIL_FROM, __TO_MALFORMED_2, __TO_NO_NAME, __HAS_CC_HDR, __CC_NAME, __CC_NAME_DIFF_FROM_ACC, __HAS_MSGID, __SANE_MSGID, __HAS_X_MAILER, __FROM_DOMAIN_IN_ANY_CC1, __ANY_URI, __FRAUD_BODY_WEBMAIL, __URI_NO_WWW, __FRAUD_MONEY_CURRENCY_DOLLAR, __NO_HTML_TAG_RAW, __MIME_TEXT_P1, __MIME_TEXT_ONLY, __URI_NS, HTML_00_01, HTML_00_10, __FRAUD_MONEY_CURRENCY, __FRAUD_WEBMAIL, __FROM_DOMAIN_IN_RCPT, __CC_REAL_NAMES, __PHISH_SPEAR_STRUCTURE_1, __MIME_TEXT_P, NO_URI_HTTPS Received: from localhost.localdomain (86.134.200.51) by rgout08.bt.lon5.cpcloud.co.uk (9.0.019.13-1) (authenticated as richard_c_haines@btinternet.com) id 58BFF080063553C9; Mon, 1 May 2017 14:21:24 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=btinternet.com; s=btcpcloud; t=1493644886; bh=qsh2AbG4Edbdg9uln56vf1cGP1robTMhPaxbQswBraE=; h=From:To:Cc:Subject:Date:Message-Id:X-Mailer; b=ISCgonfP14UtD74T/Ijm76YojHjhTGZM4T0j66QR87Ujgb9GYlLnG+7S3qBrRnGmpzP58QTXFrhDknsKe4C2iUsjUwPrGjYcxXJEOGlLDsYN3hPWfypwEI2B1GqU3OumsTQaDJXgi/FT7ED3DkJ3xlEkZuFiO1szByiAMgV9Dys= From: Richard Haines To: selinux@tycho.nsa.gov Subject: [PATCH] libselinux: Remove util/selinux_restorecon.c Date: Mon, 1 May 2017 14:21:17 +0100 Message-Id: <20170501132117.25582-1-richard_c_haines@btinternet.com> 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 Remove util/selinux_restorecon.c and tidy up. This is removed as the functionality is now in policycoreutils/setfiles. Signed-off-by: Richard Haines --- libselinux/utils/.gitignore | 1 - libselinux/utils/Makefile | 2 - libselinux/utils/selinux_restorecon.c | 299 ---------------------------------- 3 files changed, 302 deletions(-) delete mode 100644 libselinux/utils/selinux_restorecon.c diff --git a/libselinux/utils/.gitignore b/libselinux/utils/.gitignore index ed3bf0b..b4f9f78 100644 --- a/libselinux/utils/.gitignore +++ b/libselinux/utils/.gitignore @@ -19,7 +19,6 @@ selabel_lookup selabel_lookup_best_match selabel_partial_match selinux_check_securetty_context -selinux_restorecon selinuxenabled selinuxexeccon setenforce diff --git a/libselinux/utils/Makefile b/libselinux/utils/Makefile index 995f444..5d61031 100644 --- a/libselinux/utils/Makefile +++ b/libselinux/utils/Makefile @@ -59,8 +59,6 @@ sefcontext_compile: LDLIBS += $(PCRE_LDLIBS) ../src/libselinux.a -lsepol sefcontext_compile: sefcontext_compile.o ../src/regex.o -selinux_restorecon: LDLIBS += -lsepol - all: $(TARGETS) install: all diff --git a/libselinux/utils/selinux_restorecon.c b/libselinux/utils/selinux_restorecon.c deleted file mode 100644 index 4d2b08f..0000000 --- a/libselinux/utils/selinux_restorecon.c +++ /dev/null @@ -1,299 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static char *policyfile; - -static char **exclude_list; -static int exclude_count; - -static int validate_context(char **contextp) -{ - char *context = *contextp, *tmpcon; - - if (policyfile) { - if (sepol_check_context(context) < 0) { - fprintf(stderr, "Invalid context %s\n", context); - exit(-1); - } - } else if (security_canonicalize_context_raw(context, &tmpcon) == 0) { - free(context); - *contextp = tmpcon; - } else if (errno != ENOENT) { - fprintf(stderr, "Validate context error: %s\n", - strerror(errno)); - exit(-1); - } - - return 0; -} - -static __attribute__ ((__noreturn__)) void usage(const char *progname) -{ - fprintf(stderr, - "\nusage: %s [-FCnRrdmiIaAsl] [-e dir] [-v|-P]\n" - "[-x alt_rootpath] [-p policy] [-f specfile] pathname ...\n" - "\nWhere:\n\t" - "-F Set the label to that in specfile.\n\t" - " If not set then reset the \"type\" component of the " - "label to that\n\t in the specfile.\n\t" - "-C Check labels even if the stored SHA1 digest matches\n\t" - " the specfiles SHA1 digest.\n\t" - "-n Don't change any file labels (passive check).\n\t" - "-R Recursively change file and directory labels.\n\t" - "-v Show changes in file labels (-v and -P are mutually " - " exclusive).\n\t" - "-P Show progress by printing \"*\" to stdout every 1000 files" - ",\n\t unless relabeling entire OS, then show percentage complete.\n\t" - "-r Use realpath(3) to convert pathnames to canonical form.\n\t" - "-d Prevent descending into directories that have a " - "different\n\t device number than the pathname from which " - "the descent began.\n\t" - "-m Do not automatically read /proc/mounts to determine what\n\t" - " non-seclabel mounts to exclude from relabeling.\n\t" - "-e Exclude this directory (add multiple -e entries).\n\t" - "-i Do not set SELABEL_OPT_DIGEST option when calling " - " selabel_open(3).\n\t" - "-I Ignore files that do not exist.\n\t" - "-a Add an association between an inode and a context.\n\t" - " If there is a different context that matched the inode,\n\t" - " then use the first context that matched.\n\t" - "-A Abort on errors during the file tree walk.\n\t" - "-s Log any label changes to syslog(3).\n\t" - "-l Log what specfile context matched each file.\n\t" - "-x Set alternate rootpath.\n\t" - "-p Optional binary policy file (also sets validate context " - "option).\n\t" - "-f Optional file contexts file.\n\t" - "pathname One or more paths to relabel.\n\n", - progname); - exit(-1); -} - -static void add_exclude(const char *directory) -{ - char **tmp_list; - - if (directory == NULL || directory[0] != '/') { - fprintf(stderr, "Full path required for exclude: %s.\n", - directory); - exit(-1); - } - - /* Add another two entries, one for directory, and the other to - * terminate the list */ - tmp_list = realloc(exclude_list, sizeof(char *) * (exclude_count + 2)); - if (!tmp_list) { - fprintf(stderr, "ERROR: realloc failed.\n"); - exit(-1); - } - exclude_list = tmp_list; - - exclude_list[exclude_count] = strdup(directory); - if (!exclude_list[exclude_count]) { - fprintf(stderr, "ERROR: strdup failed.\n"); - exit(-1); - } - exclude_count++; - exclude_list[exclude_count] = NULL; -} - -int main(int argc, char **argv) -{ - int opt, i; - unsigned int restorecon_flags = 0; - char *path = NULL, *digest = NULL, *validate = NULL; - char *alt_rootpath = NULL; - FILE *policystream; - bool ignore_digest = false, require_selinux = true; - bool verbose = false, progress = false; - - struct selabel_handle *hnd = NULL; - struct selinux_opt selabel_option[] = { - { SELABEL_OPT_PATH, path }, - { SELABEL_OPT_DIGEST, digest }, - { SELABEL_OPT_VALIDATE, validate } - }; - - if (argc < 2) - usage(argv[0]); - - exclude_list = NULL; - exclude_count = 0; - - while ((opt = getopt(argc, argv, "iIFCnRvPrdaAslme:f:p:x:")) > 0) { - switch (opt) { - case 'F': - restorecon_flags |= - SELINUX_RESTORECON_SET_SPECFILE_CTX; - break; - case 'C': - restorecon_flags |= - SELINUX_RESTORECON_IGNORE_DIGEST; - break; - case 'n': - restorecon_flags |= SELINUX_RESTORECON_NOCHANGE; - break; - case 'R': - restorecon_flags |= SELINUX_RESTORECON_RECURSE; - break; - case 'v': - if (progress) { - fprintf(stderr, - "Progress and Verbose are mutually exclusive\n"); - exit(-1); - } - verbose = true; - restorecon_flags |= SELINUX_RESTORECON_VERBOSE; - break; - case 'P': - if (verbose) { - fprintf(stderr, - "Progress and Verbose are mutually exclusive\n"); - exit(-1); - } - progress = true; - restorecon_flags |= SELINUX_RESTORECON_PROGRESS; - break; - case 'r': - restorecon_flags |= SELINUX_RESTORECON_REALPATH; - break; - case 'd': - restorecon_flags |= SELINUX_RESTORECON_XDEV; - break; - case 'm': - restorecon_flags |= SELINUX_RESTORECON_IGNORE_MOUNTS; - break; - case 'e': - add_exclude(optarg); - break; - case 'p': - policyfile = optarg; - - policystream = fopen(policyfile, "r"); - if (!policystream) { - fprintf(stderr, - "ERROR: opening %s: %s\n", - policyfile, strerror(errno)); - exit(-1); - } - - if (sepol_set_policydb_from_file(policystream) < 0) { - fprintf(stderr, - "ERROR: reading policy %s: %s\n", - policyfile, strerror(errno)); - exit(-1); - } - fclose(policystream); - - selinux_set_callback(SELINUX_CB_VALIDATE, - (union selinux_callback)&validate_context); - require_selinux = false; - break; - case 'f': - path = optarg; - break; - case 'i': - ignore_digest = true; - break; - case 'I': - restorecon_flags |= SELINUX_RESTORECON_IGNORE_NOENTRY; - break; - case 'a': - restorecon_flags |= SELINUX_RESTORECON_ADD_ASSOC; - break; - case 'A': - restorecon_flags |= SELINUX_RESTORECON_ABORT_ON_ERROR; - break; - case 's': - restorecon_flags |= SELINUX_RESTORECON_SYSLOG_CHANGES; - break; - case 'l': - restorecon_flags |= SELINUX_RESTORECON_LOG_MATCHES; - break; - case 'x': - alt_rootpath = optarg; - break; - default: - usage(argv[0]); - } - } - - if (require_selinux && (is_selinux_enabled() <= 0)) { - fprintf(stderr, - "SELinux must be enabled to perform this operation.\n"); - exit(-1); - } - - if (optind >= argc) { - fprintf(stderr, "No pathname specified\n"); - exit(-1); - } - - /* If any of these set then do our own selabel_open and pass - * handle to selinux_restorecon */ - if (ignore_digest || path || policyfile) { - if (path) - selabel_option[0].value = path; - else - selabel_option[0].value = NULL; - - if (ignore_digest) - selabel_option[1].value = NULL; - else - selabel_option[1].value = (char *)1; - - if (policyfile) /* Validate */ - selabel_option[2].value = (char *)1; - else - selabel_option[2].value = NULL; - - hnd = selabel_open(SELABEL_CTX_FILE, selabel_option, 3); - if (!hnd) { - switch (errno) { - case EOVERFLOW: - fprintf(stderr, "ERROR: Number of specfiles or" - " specfile buffer caused an overflow.\n"); - break; - default: - fprintf(stderr, "ERROR: selabel_open: %s\n", - strerror(errno)); - } - exit(-1); - } - selinux_restorecon_set_sehandle(hnd); - } - - if (exclude_list) - selinux_restorecon_set_exclude_list - ((const char **)exclude_list); - - if (alt_rootpath) - selinux_restorecon_set_alt_rootpath(alt_rootpath); - - /* Call restorecon for each path in list */ - for (i = optind; i < argc; i++) { - if (selinux_restorecon(argv[i], restorecon_flags) < 0) { - fprintf(stderr, "ERROR: selinux_restorecon: %s\n", - strerror(errno)); - exit(-1); - } - } - - if (exclude_list) { - for (i = 0; exclude_list[i]; i++) - free(exclude_list[i]); - free(exclude_list); - } - - if (hnd) - selabel_close(hnd); - - return 0; -}