From patchwork Fri Mar 3 17:23:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Potapenko X-Patchwork-Id: 9603319 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 4E454600CB for ; Fri, 3 Mar 2017 17:28:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3CFD2283F2 for ; Fri, 3 Mar 2017 17:28:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2FF0B285C8; Fri, 3 Mar 2017 17:28:34 +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_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (emsm-gh1-uea10.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 3CBD6283F2 for ; Fri, 3 Mar 2017 17:28:32 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.35,237,1484006400"; d="scan'208";a="4481933" IronPort-PHdr: =?us-ascii?q?9a23=3Ay5HWxBz8HiqSXUPXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?1ekRLPad9pjvdHbS+e9qxAeQG96KtrQf16GP6/mocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDqwbal8IRi5ogndq9UajZZ/Iast1xXFpWdFdf?= =?us-ascii?q?5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPGAz/83rqALM?= =?us-ascii?q?TRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VSi+46ptVRTnhj?= =?us-ascii?q?0HNzok+2/JjMJ+gr9QrBa4qxBi34LYZYeYP+d8cKzAZ9MXXWpPUNhMWSJPAY2y?= =?us-ascii?q?aJMPAugcMetWoIbyu1QAogWlBQS3GOPiyCVFimPs0KEmzegsFxzN0gw6H9IJtX?= =?us-ascii?q?TZtMn4NKMMXuG61qbIyyjMYO1M2Tzg8obIdQwhruuUXb1ud8rRyk4vHB7Cg1Wf?= =?us-ascii?q?rYzlPi6a2foXs2WA4OpgUuWvi2Ejqw5vuDSg2sAsiozQi48T11vK9j15zZ4oKd?= =?us-ascii?q?C3R0N3e96pHIZKuy2EOIZ6XNkuT3xwtCon1rEKpYS3cDUWxJkn3RLTdf+Kf5KW?= =?us-ascii?q?7h7+UuuaPC12i2h/eL2lgha/6U2gyurhWcaqyFtKtS9FksXUtnAKyhzT9tCLSv?= =?us-ascii?q?tj8Uel3jaCzxzT5fteIUA1iKrbMIQtwqIwl5UPsUTDGTX6mEPqg6+Nakoo4O2o?= =?us-ascii?q?6+XjYrn+p5+cMZF7ih3mP6gzlcGyDv40PwgTU2SB5+ix26Pv8VfkTLlSi/05iK?= =?us-ascii?q?jZsJTUJcQBoa65BhdY0p095Ba7Djem1skYnHYeIF1efxKHko7pNE3QL/DjFvq/?= =?us-ascii?q?n1Stnytrx/DBJLHhBI7NIWLZnLfuerZ99VZQyBAvwtBH+5JUFrYBLerxWk/2st?= =?us-ascii?q?zXFAM5MwyuzObhE9h91IQeWWSKAqCDK6PSrUGH5vg0I+WWY48Vojn9IeA/5/Hy?= =?us-ascii?q?lX85hUMdfa6x0JsVanC3BOhpI0aCYXrrhNcBEHkKsxEwTOzulV2DXiVcZ2u0X6?= =?us-ascii?q?Ig+zE3EoWmDZ3MRoq1mryOwD+7HoFKZmBBEl2MCWnneJ6aVPcKaSKSPshhnycF?= =?us-ascii?q?Vbe/VYAuywuitAjgy7poNuDU4DEXtYr/1Nhp4O3ejQw99TtyD8Sbzm6CUWV0nm?= =?us-ascii?q?ITSjAswq9/u0t9xk2E0ahijPxSDcZT6O9RUgcmKZ7cyPR3BM3uWg3bZNeEU0qp?= =?us-ascii?q?QtKjAT4tVN0x2MMOb1x7G9q8khDJxzCqDKMNl7yXGJw09brR33n3J8Zh1XnG0L?= =?us-ascii?q?cuj1w4TctTL22nhrVy9w/LB4HXlUWZkryldaUY3CHW82eCwnCCvEZCUA5/Sa/F?= =?us-ascii?q?R2wQZlPKrdTl4UPPV7+vCLUgMgtH0sOCL69KZsTojVVAXvvjPs7RY3iym2exGx?= =?us-ascii?q?aH2KmAbIz0dGUBxC/dElQLkxgP/XaaMggzHjyurHnZADxqFFLveF/s8fJkpHOg?= =?us-ascii?q?UEA70xuGb1Z/2Lqx+x4Vg+GcSvwI070YuCYhsSh0HE2n09PYEdWAuxFhfKJaYd?= =?us-ascii?q?8n51dHz23ZvRRnPpO8N6BimkIecwNvskzwzxV4EJ9AkckxrH4x1Ap9M7iY0FJa?= =?us-ascii?q?dzOA2ZD/IKHYJXfo8BCoca7W1UnU0MyK9acX9PQ4t1LjsRmnF0oj93Vn1sda02?= =?us-ascii?q?GH65XEEgUdTJXxUlwt+BhivbHaZSs96J3I2n1wK6W0tSXC290xDus/1hmgZ8tf?= =?us-ascii?q?ML+DFALqHc0aHdKhKOo2lFiodRIJJ+VS9LY1P8+/bPuH1rWrMPxnnDK8gmRN+J?= =?us-ascii?q?p93V6U9ypgVu7I2I4Iw/KC0QuEUDf8kUysssPtloBHYjESA3CzyS/+BI5efqdy?= =?us-ascii?q?Z5oECX+yI82rwdVzn4TiVGNC9F6iGVwGwtSkdgCOYFz4xwFQ0l4XoXO/kyui0z?= =?us-ascii?q?N0iy0prraY3CHW3+vtbh4HNXBQRGl+jVbsJpO5j8sGU0ipcQcpkgel5UfgyKRB?= =?us-ascii?q?oqRwMXXTS19SfyfqN2FiTrewtr2abs5P9pwotSFXUOOnbFCeV779vxwa0yb5EG?= =?us-ascii?q?dEwzA7bT6qsI3jnxNmkGKdMGpzrH3BdMFryxff/tvcReVN3jcdXyl4jz7XB1a5?= =?us-ascii?q?P9az+9WYjZHDvf6iV2i5TJ1cbTHrzZ+ctCu8/WBrDwewn/SvmtL5Cwg6yjT218?= =?us-ascii?q?d0WiXStxn8f4zr2769MeJ9cUliHEX85NZiGoFijoswg4kd2WQHiZqI/HoIi2Pz?= =?us-ascii?q?PM5H1qL5aXoCWSQEw8XJ4AT/3k1sMG6JzZrjVnqB2sthe8W6YmQO1yI77sBKDK?= =?us-ascii?q?OU46JfnSZuuFW3sxjRYf9nkjca0/su52YQg/sVtwo10iWdHrcSEFFGPSztixuI?= =?us-ascii?q?89e+rL9NaGmzcbiw00x+nd+6AbGGowFcXmz2eo0lHSNq6cV/Kl3M2mXp6o74YN?= =?us-ascii?q?nQcc4TthqMnhfEjuhVM44xmuMRhSV5PWL9vHsly/M0jBF1xpG6pImHK2Ns/K2l?= =?us-ascii?q?GR5ULDv1aN0P+jv1l6ZRgt6W35yzHpVmAjgLRpzoTfasED0Mr/ToKwGOETMnp3?= =?us-ascii?q?eABLrQARSf5F1hr3LVHJChL2uXK2UBzdV+WBmdI1RSgBgOUzUnmp41DBqlyNb6?= =?us-ascii?q?f0d+4jAR+ln4qh1Xx+JtKxX/VGDfqxuyZjcyVpefMAJc7hte6EfNLcye8uVzEj?= =?us-ascii?q?lb/pK/qgyNMXeWZwdWAmEPQUyEAU7sPqW06dnH6eiYCfK0L+HSbrWWtexeS/CI?= =?us-ascii?q?yIq30oR84jaMMtuAPmF4AP09xkpMQ2p5Ft/EmzUUVSMXjTnNY9SApBe75y13tN?= =?us-ascii?q?yw/+rlWALo/4uPBKVdPc9p+x+onaeJL/SQizphKTZEypMMwmfFyKYZ3FEPkCxu?= =?us-ascii?q?aT+tHqkAtSLXSqLfhLNXBQYBayxvLMtI87483g5VNM7DkNz1y7p4g+UpBFdESV?= =?us-ascii?q?zgmtilZcIQLGG7Ll/HA1yLNLueLz3R3873eb+8SaFXjOhMtB2xuTKbHFH4MzSG?= =?us-ascii?q?kDnpWR6vPv9QjCGHPBxev4S9fQh3BWjlUt3mdgWxMMVrgj0u3b00mnTKOHYSMT?= =?us-ascii?q?dmdUNNsrqQ7SZDj/VxBWNO831lLfOelCaB9enYLZQWvuV3DSRoje5a5246y7RN?= =?us-ascii?q?5iFeWPN1gDfSrsJpo1y+j+aPzCBoXQFTpTZNno2Hp0JiOb/W9pNYQ3bL4AoN7X?= =?us-ascii?q?mMCxQNv9ZlEMfjuq5KxtjKjq3zLDBC8tLP8MQGG8fULdiLMH07MRrmADTUFhcK?= =?us-ascii?q?TSa3NWHDgExQiP+S9meLoZcnsZjjgpwOSqNcVFwuDf4VEFhqHNkYLJdwRDMknq?= =?us-ascii?q?aRjNQU6nqmsBnRWMJas4jBVvKIG/rvMC6ZgKJKZxsJ27P4NpgTNoP620xkcFZ6?= =?us-ascii?q?mpjFG0vKUtBJuCFhaRU0oEpV+nhkUmIzw17lah+q4HILCPG0hQA5hRFxYeQ37j?= =?us-ascii?q?js/Uw6JkHQqyszjUkxg8/qjSqVcD7sKqe/R5tWBzPot0g2MZP6QwF1YRe0nUN6?= =?us-ascii?q?KDfOX6hRgKd4dWB3lA/cvoNCFuVdTa1LZx8Qw+qaaOg23ltHqyWo30lH6fHCCZ?= =?us-ascii?q?t4mwsgaYSsoG5Y2wJ/cN41IrTdK7BGzldKmKKBoDSl1ucpwAAAIUYN9XmdeC8M?= =?us-ascii?q?uEMTMbknKDCk/ut26QyNgzFDYnQDV+I2ovJ28UMwI/iAzyXl07JZMECxMO2eIL?= =?us-ascii?q?2fu2fbj86IRU0/1kATmkZZ+rh21NssfFCPV0Az1reREQoGNdbaIwFPc8VS7GTT?= =?us-ascii?q?fTqJsejVx5J6IZ+yFuTzQO+Ns6YUmV6kExwvH4QX7cQBH4Og0EfGIsf7NLQF0w?= =?us-ascii?q?ki5Bz3JFWZC/REYAiLnykco86h1pB3x5VSJjEGDGpmMCW3/KvYpggkgPqbRtc5?= =?us-ascii?q?fHcbUpECNn0oRM2wgzRZsGhYDDmrzuIZzxCP4CLmqSTODTnzcsFjaeyOahN2Et?= =?us-ascii?q?G2/js+87OohlHL75XePWD6Nchiu9PV7+MVuYqHAetOTbZhq0fch5VYR3uyXm7L?= =?us-ascii?q?Ft61PYb/a48tbNzzEXu6XVq/iy8vQ8f2JtatIbCCgRv0SoZMrImbwDcjONemFj?= =?us-ascii?q?4AHxdwpucD5L9zZAAYf5U7ZhvouBgkOKykPAeUyNOuTHixKTFOVflQ0f26Z6BL?= =?us-ascii?q?zyorduK11WcvTpQ9z+mx7U4BWYoHjg/Ayva5ZolfUC/zGnpHdwXJuyU5i3BrNv?= =?us-ascii?q?wuzecn3BPIrV4cPiiIdOxzaG1Lpdc8BU+SIXhtBWo4QEecgpbZ7g6qwb8S4zNX?= =?us-ascii?q?n8xI3u1drHj+opjfbSqwWKyqrJXVtDYgbdgmoqBqLIPjI8uHu4nFkTDFSpnfrB?= =?us-ascii?q?GFWjagF/VGgthQPD5YQP5QlGEqI8wJo4xB6VYqW8c/ILxOBq8spqyqaTV6DC4S?= =?us-ascii?q?yzMZWJ2a3DAYhOezxafanA+KcJs+KBwErIlCgtwFXiFsZiMepbOsWJvOmG+BSm?= =?us-ascii?q?kLJgAT7QJW6w8bjYBwf/rq4IzRQJ9C1j5aufR0XTXXFpNw7Vv0VnmWgUTkSPWm?= =?us-ascii?q?i+GmxhxdzPT339YBRRF/F1ZSx/xNlkQyMrF2K7McvonQsj+HbUn6pn7iyPO6JF?= =?us-ascii?q?lNzs3Zb0f4DIzEtWXgUi0c/nkURZRXxn/GCJociRZ0ZqEwqVpQJ4Cmf1rx6CY/?= =?us-ascii?q?x4R1BbW4U96kx0o9p3YcWyiqC8ZBC/1hsF/PRDJlYYqkp4n+NppORW9Q/Jmdq1?= =?us-ascii?q?ZHn0V3Ly6214ZTK8FX7j4LRjhPri2XvMGuR81bxc92E5gML89lu3jnAqNEP4Oe?= =?us-ascii?q?rmYqurz10HDZ5S4zsFO7xDW1FK+4S+NZ/2IeGgU1KWSRsFMvD+42/mfU7F/Nrk?= =?us-ascii?q?h+//1HCbiXkUVxvDF9E4hABzpTyX+lL1VzTHxHs+pAK6TYaM1cTOcsahCxIRA+?= =?us-ascii?q?EuQm30OR90FugXj5ezBythdd+y3FRwk0Ui0Vja33mTwQrcGnPTEaRolNbTUmaC?= =?us-ascii?q?fFMByUljxNvBZYcEFqQJEZAtBK+70B2otU5MXCQ162KS4ZRBxiKh440f1HmEFZ?= =?us-ascii?q?qkWYZCbdARCrdfvUsx13fMaRrNKyI/jj+gdIlJ/nuvgi96ofX32mhRGtQdfGoo?= =?us-ascii?q?/gsd2Ks1CDdLvkP+25enDNVj7Mgg6shb08FZnF4zDTMBZHK5l90XckYYLuCXTR?= =?us-ascii?q?MhRCOq0WPFdUWr5iadVevO9aY9FreLwT9a9qHBKHSQvlGJazo/leMlbTWTPeIj?= =?us-ascii?q?2D8uy4v43e9qHSRvb7ZsOS3XbHX7x4MYpg5Tn9BbjqzZdU+lDq1fd16kN6VV/G?= =?us-ascii?q?Pjiao9TvOgwH+Muvelbss5AyATzWB5Jwn2b3yUFba8obWSuq/4oEyJlB8nb/Vf?= =?us-ascii?q?p40lTvsO1V77Rk85c47K1pyciuOaffMvBasUh5AheKGAll6pItD3VhSGxLZO8e?= =?us-ascii?q?NuvRd7wDjc/ys+D3C7AX6BqN9uxBctvHO1vOldSjCjyHUhxEmxoBqSQGIQSC0f?= =?us-ascii?q?6Fh7V0RtyhpeTj3UIt+Ve+JAYczL9x/YeE5raIpOjPYhvN17gLRLblSd7oo7Qx?= =?us-ascii?q?v0OS+eckm6QQemx0ZA2nFPYSVtIHymfn16AqwjomE9nfELL45P5DS3U5kyrlm5?= =?us-ascii?q?9nG1UWHu0bHaaX/YtEhGg1gOrZOcMKcqBZhmmADwakHaEYxX6t9SSXPHFvggvS?= =?us-ascii?q?3BHoXWOz8Fj2oDd6QSTW1dfjlVFVVr2tCkdMRCepPFJ4sDeTPArpqNX3uL467E?= =?us-ascii?q?ctMmD+s9KNjmShMqtNH8LjPNycPTU0pFUPgZ0zXNOv344bGcC6INgM7n5zdefe?= =?us-ascii?q?5Hmtky9apKdLnYze7d+J+v/PB3mvk7Waq6mRxDBf0nU4skw/6tGkNvHK+dKKRu?= =?us-ascii?q?+l2HsPQChkugvORRi1pqbcr1AONkyByF3Ll5ASPtFFwXk40Vnr5O4nQN8o9QVe?= =?us-ascii?q?EIPAa+kDpTD1Njv020yQY8krVimEzjtYAk71EURiGKciwm7wu9jJlXjI8V0yWo?= =?us-ascii?q?Zwb1DnhQBwD4ggLEIt714XwjYMEQcTch2bCbCoCl7jLYQaSUgCZxOH3KK5eqcs?= =?us-ascii?q?x0FzxK2g5PPLZ+xmG6UNLupdjhKJnFVDAJIZrLARTalze19Y+6/bvA7iBJb7X/?= =?us-ascii?q?L+j3o/KeW1QtxG8cAer3Yi5h2/Rx+g5JpY4bYUlo2HdqleYZfWpMB89UBn5TwR?= =?us-ascii?q?eSNRnBhzlRS5UfoTpOr7+NjUrIKo6vqyVKYqX+gX7AI7B3pkgJv/nl8jusra1/?= =?us-ascii?q?xGRY3Lk4v//x5CI2WQtIbczRZ8NfIEK5i3c7Z463UHOy8eKmoMPdqXbvkx+Cpt?= =?us-ascii?q?PyvT5lNcGMMMZNUYPMXXlQBSlELpRKlZ9tDHFV+AF4dza8co4nL2yDE065QzSP?= =?us-ascii?q?rv5SStJZ/B81FCIe9MgD9rlNLYq+gf2eDSBzQP4XmFdxh1xTuPxIKMC/br8+SD?= =?us-ascii?q?0tPUV1IaHi4uSYhdOT6C9Be7SeqyiZrmTBmb6tLpgJI5bkKfXGa9nKMfsqZDCe?= =?us-ascii?q?RAkDn03iBCFoDpgPKYq8Ks53FLtlJbEIZy4xrFGL9cPpliIhT3iM2rRkl6Bivi?= =?us-ascii?q?d8DZbQIut/CKxugQ4+V/OUz+ZZUYIh4eyLL192BVTg1wR77ypFqZWvgRZNR+Qv?= =?us-ascii?q?Pesn9V8Z5gK7MIPFWFuJzqtClHqFQsDw8vdrA9tSFVdkjBnA1UR6b7oqUAhREG?= =?us-ascii?q?Ud5ko0NMH3y/OH4m7TrdSatVlLWRCOAS8jiLQawBSV9oPT1iQxO1w5huf7qpne?= =?us-ascii?q?xZvWNGhCx9veMq3yZgRBSipS3mv7gN1i44+LGkqDUBvmRITuqAnCfOFVVDy/MK?= =?us-ascii?q?gaAHC3n87Vy8YX8DbJb94bR8IcTv65Mh4nQlbhk5eS0JQ/igATnqj6yUGoyPrM?= =?us-ascii?q?5chBmVtcXIbL+8MS8SNrAnxhL4XXR90w/enBFz8GsQWTig6dApJYqnNcYi3Cqo?= =?us-ascii?q?FnDRdEwQ7aNRrMvxqVkLQfM5aVx922VjydGLSDACSsLJGmY1iBUkaGpffZJM7B?= =?us-ascii?q?8VDa8ojSiSsqlB5AEUby/eEp659YnIgcfIxX49QM9oxmLRpq2FgIkm32Flm9Nw?= =?us-ascii?q?8y6BpXUTd+3eU893AXjz15xSyfL/Z/WzqO8HTJZpyLW7XP8ELMaj5XO82I92VU?= =?us-ascii?q?+92rQeA125PfcCxrfFSSilT3aVWeCWc2eRnjY5NVXy6QOvLl0tZ8dAt1U9Pffa?= =?us-ascii?q?hp5Aiw3hVqt5RieOql/VwmwjNfgXdgwst4ehZQMKUPQdZ+6CKugy2Pc+EkcDb2?= =?us-ascii?q?fVHStqDO+7qVGtnIx8O3Ru/0r6ZeDt/xv9MNuVHBkEEJLVooR3+fOkWmKLIWVg?= =?us-ascii?q?wwFqPElo6+ffEEw8tu1cc5eRhdjQgNB70e8Zd/hzKiA9v98Tmp556YaKysuKdg?= =?us-ascii?q?vRzpnqL9HPvveYG+Hfz1gtemxCTroZYAb16p4mPt44R7LTHqVWvRAGCag8XpMh?= =?us-ascii?q?K3/79LtoIwNrbg7ReLO0j9HvpuKKZZtUpHjW40kyLCjGuB0Dzfq0QhJ9b5ywgX?= =?us-ascii?q?X9PowwTCpbr9JxEhtmAJdPG8QYogW8HZGUnr27hsSq+0N+vO8KrbbwCu7U29uk?= =?us-ascii?q?xYlxWIJa5UOTNjbLGKZrmlhljvi1gvrY3Jn+F8fiedIcVOdlWWPEa77GHoC6Kj?= =?us-ascii?q?2QIML8f1BJ/6Sb0LJjXRWbfDr5ULaetC24KPVk5l02y4JgfOrJzTwi86/U1cD3?= =?us-ascii?q?Z2Fauiejt2CGOIFY7FzQCuzURwhURuad8GZ5Aa0XapP59OAKMdM829Wc+w1z4y?= =?us-ascii?q?5Z0MuZIqiuslPM2lhlep3FNkfp3Tg2WZUSKhSlLUQsmXPZqmjaAXlEKsikKM9t?= =?us-ascii?q?gMuaDxD040lxmHotZnJaGmfzRNeeI24b28WkaA2N7gJLAM4Jn/Srdk4gqq2yVe?= =?us-ascii?q?5oN41emeq0sLUHkNBpKzzARcRdMC/QML92MSRLDurRvFgneAUJs7srVYcvY5iB?= =?us-ascii?q?PkcHP1ydySP91wfC1lf0d9O03qaTPCkW6mlHz67C0TVUogm2o+qWgs3iULDfa5?= =?us-ascii?q?H7R+DSMCsjVj6EQTQyEECp+UqruvYeu/qYO2gfqEgOYi2OEA4Turxvrd/IA2/R?= =?us-ascii?q?g+Jjf5oKi+uBViDtTi14iKoyBiFWtUCDQ/oDCRPab3n/j2pAoAaiPOND/Wr5b7?= =?us-ascii?q?2EwapYQ+MWDZFXff2DQtvXZ/ReKiw2ljUdIum8ZNzcr6sj3lLOU2QZD7HC9EeC?= =?us-ascii?q?Q06OXvyc2zXrUJ0Xv4gxvSoo4MjQni5sE6nTObaQvTuu/ZC5jCqCvu3eTGYtaV?= =?us-ascii?q?QvgO0eGGmB3AVAKGYcBtEOtkHtR7KPakdP2X8yl+JhxQUMeAVyU31p1H1ahvC9?= =?us-ascii?q?FdNFSVQMlmOhXOUGbExrDDM35UKK4AryYdoEuc3IQm9R6KYDSYQaLPky9IbYJr?= =?us-ascii?q?EcwPA30zJ682QGtHCREUJAjQWb26XXG614y/tJ4mx8t/J9VWmARDTQdmWBwY2j?= =?us-ascii?q?T4pMyCp1qnfj1OLfvvpqMbpHosd+GlhOSS96O9XU7z1deW7z3wS2slCwGzHaaC?= =?us-ascii?q?oQ/TIjPSUYcqNwyOhhvVDDcdOFoVicrIo9uUCrDkCNEbPy15tVWe/z0gDtQC1G?= =?us-ascii?q?YTytG51s4s5KiN8KbKUkYsDqDFTAIgXkJg2fvC8I+V7hpbH9XpkC+XkXjqh5cI?= =?us-ascii?q?KhZIINF9SMmWggzg=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2ELAQCJprlY/wHyM5BeGQEBAQEBAQEBAQEBBwEBAQEBFAE?= =?us-ascii?q?BAQEBAQEBAQEBBwEBAQEBgyaBa4E1jSaPJQEBAQEBAQUBgR4BkGeGAQUXPCaIZ?= =?us-ascii?q?1cBAQEBAQEBAQIBAl8ogjMiCQQ9CzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARI?= =?us-ascii?q?CRC4CJBMGAQEMIAsBAgMJAhcpCAgDAS0DAQUBCxgHCwUYBIlNDaZgP4sbglQ6J?= =?us-ascii?q?gKCYAEBBYd0AQEIAgEdCBKEL4FIiVoRAYYBj1uMVoUYjQ4Nij8mhjgCSJEsMoE?= =?us-ascii?q?VWEswCDcfFT+ERQwCAR2BZHWHYIIuAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 03 Mar 2017 17:28:30 +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 v23HS7M4022139; Fri, 3 Mar 2017 12:28:12 -0500 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 v23HNgkX126352 for ; Fri, 3 Mar 2017 12:23:42 -0500 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 v23HNfiM019577 for ; Fri, 3 Mar 2017 12:23:42 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1ARAADdpblYhjFSfUpeGgEBAQECAQEBAQgBAQEBhTyBNZxPAQEGkgaCRIM9BVoahgiCZFcBAgEBAQEBAhMBAQEICwsKHYVNGQEBNwGBFAEFASMSiW4Nplc/ixuCVDqDCAEBBYdzAQEIIAgJAQiEL4FIj22PW4xWhRiNDg2KP4ZeAkiRLDKBFYEiODcfFYUEDAIBEQyBZHWKDgEBAQ X-IPAS-Result: A1ARAADdpblYhjFSfUpeGgEBAQECAQEBAQgBAQEBhTyBNZxPAQEGkgaCRIM9BVoahgiCZFcBAgEBAQEBAhMBAQEICwsKHYVNGQEBNwGBFAEFASMSiW4Nplc/ixuCVDqDCAEBBYdzAQEIIAgJAQiEL4FIj22PW4xWhRiNDg2KP4ZeAkiRLDKBFYEiODcfFYUEDAIBEQyBZHWKDgEBAQ X-IronPort-AV: E=Sophos;i="5.35,237,1484024400"; d="scan'208";a="5967071" 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; 03 Mar 2017 12:23:37 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3AcxXNZhfAhPMtg1mIyhtHEobolGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcS4Yh7h7PlgxGXEQZ/co6odzbGH7ua7BSdZuc/JmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBW7oR/fu8QZjoduN7o9xgbUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU09nzchM5tg6JBuB+vpwJxzZPabo+WM/RzZb/Rcc8ASGZdRMtdSzBND4Wh?= =?us-ascii?q?ZIUPFeoBOuNYopHhqlsKsxS/ChOjBOXyxTBWnH/9wLc00+M9EQ7cxAwvAdQOsH?= =?us-ascii?q?fTrN7oM6oSXuS1zKjVwjrddfNbwjj96I/PchAupfGDQ6h8ftbWyUkqDg7IiEib?= =?us-ascii?q?p4/9Pz6N1OkAvHKX4/d+We+vkWIqqB99riKgy8ookoXFm54Zxkze+Slk3Io4Jc?= =?us-ascii?q?e0RFB4bNK+DpdcqieXPJZsTMw4WWFnoiM6x6UGuZGleCgKz4wqxxvFZPyGd4iE?= =?us-ascii?q?+xziVOONLTthinJod7ayiwy98Uinze38Wc2030hQoiVZldnMs2gB1x3V6seZVv?= =?us-ascii?q?tw5kWs1DmV2wzO9O1JIVo4mKnFJ5I7zbM9koIfsUHZES/3nEX2grWWdkIh+uWw?= =?us-ascii?q?5OTnZrTmqYKCOI9ukQz+PaMumsuwAeQ8LAcCRXSU+eO51LH75032XK1KjuEqkq?= =?us-ascii?q?neqJ3aPtoUpqq4Aw9Tz4Yi5A2yDyum0dsEnXkHK0hJeBScj4fzIV3OL/f4Dens?= =?us-ascii?q?y2irxTt11u3FOaPJDZLKIXzO1rzmePI16EVX4AU0yt9b6tRfDbRFaPH+V1T6s9?= =?us-ascii?q?vbJhQ5KQuxwvviTtJn2cdWVG6SB6aLPb/6vliP6eYiZeKLYctdoD/gL9A97uPq?= =?us-ascii?q?yHo+nkUQO6Ku2N9fc3yjNuh3KEWeJ3z3i5EOFnlZkBA5SbnDjFCSWDhfamz6Z6?= =?us-ascii?q?Ug7yk2DoGhRdPMQoGhjaap0yC8EZlbIGtBDwbfQj/Ta4yYVqJUO2qpKch7n2lc?= =?us-ascii?q?WA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0EkAABmpblYhjFSfUpeGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBhRGBNZxPAQEGkgaCRIM9BRdDGoYIgmRXAQEBAQEBAQE?= =?us-ascii?q?CAQIQAQEBCAsLCh0vgjMgCwQ9CzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARICR?= =?us-ascii?q?FQZAQE3AYEUAQUBIxKJbg2mVT+LG4JUOoMIAQEFh3MBAQggCAkBCIQvgUiMVAy?= =?us-ascii?q?DDY9bjFaFGI0ODYo/hl4CSJEsMoEVgSM4Nx8VhQQMAgERDIFkdYoOAQEB?= X-IPAS-Result: =?us-ascii?q?A0EkAABmpblYhjFSfUpeGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBhRGBNZxPAQEGkgaCRIM9BRdDGoYIgmRXAQEBAQEBAQECAQIQAQEBCAsLC?= =?us-ascii?q?h0vgjMgCwQ9CzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARICRFQZAQE3AYEUAQU?= =?us-ascii?q?BIxKJbg2mVT+LG4JUOoMIAQEFh3MBAQggCAkBCIQvgUiMVAyDDY9bjFaFGI0OD?= =?us-ascii?q?Yo/hl4CSJEsMoEVgSM4Nx8VhQQMAgERDIFkdYoOAQEB?= X-IronPort-AV: E=Sophos;i="5.35,237,1484006400"; d="scan'208";a="3665667" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mail-wm0-f49.google.com ([74.125.82.49]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/AES128-GCM-SHA256; 03 Mar 2017 17:23:36 +0000 Received: by mail-wm0-f49.google.com with SMTP id v186so20531938wmd.0 for ; Fri, 03 Mar 2017 09:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=lXWr3MUjto+rU8Xrr7g8fBog6sZTfgnp5cngDtOdOlI=; b=R97+EgjO+i7CScfW05V7Xm0JSVmYS/3bCb5L7f2Th29TjU+eCbV5Clzodp5Nc+XgA5 0MsR+r5fHojE4uzTLDvEKCayL71QKeIhK7gsBUh6wgajTK3kiUU/xwFclTJkqjfoQNaA OW13XG94iCgOT7S5PZIhhF7Mmpv6TfGkIRcYE/ccCe1NH4pkS8/UJ4wTRehcNS3osxk2 Pp/pqYsH45uwdEXpAjOMLLXvRu+cnL7V2zqzN9XWH1H9JxagmvAGJg/a6WrEgjdFF0KJ Gc0KJ2QrDv6p7MU/rJyd32nW8Gf0ZuWNEaRE/QhyorBhAkWRiaOgFrCXQoPdZXtTNPnS Oyhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=lXWr3MUjto+rU8Xrr7g8fBog6sZTfgnp5cngDtOdOlI=; b=DjxuAiaiHlUkp0iDgc3RHSzSwiZOMArvAFhb8nJMJ2oNN4+yCUJgA/PaR5nsnLqkRC JBusq4XkTIw0OKkSpv4iuvIbOC0BCGGrJb5IkXwABlmdOzvq+NcEsJ9ZgRfMLXpqmzpa 0ljRb4kB7K5VK/uxpJJXdUsJIEnUR0b9nb+tPsg1j3qIzrSpqe/ZS4IVAZibndsFwO/L 83qPS/C1dMhv3oIvkVYJhw3ozULFhnxFprcBpOZV0pfCDjYufeEggrUOukygDaRuRNwl pHCsJpl9hUKf4oG3k7DqhanV5m+ciyTIjY/ySV5t1hehvVD2OL+xEtKzNdG65EvTim/X ksig== X-Gm-Message-State: AMke39nhv8naTxwxQUOoM5ihIrGhxcJDcKL0P/LiQmtS+5WEH9shg19eqg9nn8wMqZI4CYe0 X-Received: by 10.28.142.16 with SMTP id q16mr4008505wmd.78.1488561815081; Fri, 03 Mar 2017 09:23:35 -0800 (PST) Received: from glider0.muc.corp.google.com ([100.105.28.21]) by smtp.gmail.com with ESMTPSA id y145sm3811995wmc.17.2017.03.03.09.23.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 03 Mar 2017 09:23:34 -0800 (PST) From: Alexander Potapenko To: dvyukov@google.com, kcc@google.com, keescook@chromium.org, edumazet@google.com, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH] selinux: check for address length in selinux_socket_bind() Date: Fri, 3 Mar 2017 18:23:30 +0100 Message-Id: <20170303172330.83421-1-glider@google.com> X-Mailer: git-send-email 2.12.0.rc1.440.g5b76565f74-goog X-Mailman-Approved-At: Fri, 03 Mar 2017 12:28:06 -0500 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: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, selinux@tycho.nsa.gov MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP KMSAN (KernelMemorySanitizer, a new error detection tool) reports use of uninitialized memory in packet_bind_spkt(): ================================================================== BUG: KMSAN: use of unitialized memory inter: 0 CPU: 3 PID: 1074 Comm: packet2 Tainted: G B 4.8.0-rc6+ #1916 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 0000000000000000 ffff8800882ffb08 ffffffff825759c8 ffff8800882ffa48 ffffffff818bf551 ffffffff85bab870 0000000000000092 ffffffff85bab550 0000000000000000 0000000000000092 00000000bb0009bb 0000000000000002 Call Trace: [< inline >] __dump_stack lib/dump_stack.c:15 [] dump_stack+0x238/0x290 lib/dump_stack.c:51 [] kmsan_report+0x276/0x2e0 mm/kmsan/kmsan.c:1008 [] __msan_warning+0x5b/0xb0 mm/kmsan/kmsan_instr.c:424 [] selinux_socket_bind+0xf41/0x1080 security/selinux/hooks.c:4288 [] security_socket_bind+0x1ec/0x240 security/security.c:1240 [] SYSC_bind+0x358/0x5f0 net/socket.c:1366 [] SyS_bind+0x82/0xa0 net/socket.c:1356 [] do_syscall_64+0x58/0x70 arch/x86/entry/common.c:292 [] entry_SYSCALL64_slow_path+0x25/0x25 arch/x86/entry/entry_64.o:? chained origin: 00000000ba6009bb [] save_stack_trace+0x27/0x50 arch/x86/kernel/stacktrace.c:67 [< inline >] kmsan_save_stack_with_flags mm/kmsan/kmsan.c:322 [< inline >] kmsan_save_stack mm/kmsan/kmsan.c:337 [] kmsan_internal_chain_origin+0x118/0x1e0 mm/kmsan/kmsan.c:530 [] __msan_set_alloca_origin4+0xc3/0x130 mm/kmsan/kmsan_instr.c:380 [] SYSC_bind+0x129/0x5f0 net/socket.c:1356 [] SyS_bind+0x82/0xa0 net/socket.c:1356 [] do_syscall_64+0x58/0x70 arch/x86/entry/common.c:292 [] return_from_SYSCALL_64+0x0/0x6a arch/x86/entry/entry_64.o:? origin description: ----address@SYSC_bind (origin=00000000b8c00900) ================================================================== (the line numbers are relative to 4.8-rc6, but the bug persists upstream) , when I run the following program as root: ======================================================= #include #include #include int main(int argc, char *argv[]) { struct sockaddr addr; int size = 0; if (argc > 1) { size = atoi(argv[1]); } memset(&addr, 0, sizeof(addr)); int fd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP); bind(fd, &addr, size); return 0; } ======================================================= (for different values of |size| other error reports are printed). This happens because bind() unconditionally copies |size| bytes of |addr| to the kernel, leaving the rest uninitialized. Then security_socket_bind() reads the IP address bytes, including the uninitialized ones, to determine the port, or e.g. pass them further to sel_netnode_find(), which uses them to calculate a hash. Signed-off-by: Alexander Potapenko --- security/selinux/hooks.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 0a4b4b040e0a..eba54489b11b 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -4351,10 +4351,19 @@ static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, in u32 sid, node_perm; if (family == PF_INET) { + if (addrlen != sizeof(struct sockaddr_in)) { + err = -EINVAL; + goto out; + } addr4 = (struct sockaddr_in *)address; snum = ntohs(addr4->sin_port); addrp = (char *)&addr4->sin_addr.s_addr; + } else { + if (addrlen != sizeof(struct sockaddr_in6)) { + err = -EINVAL; + goto out; + } addr6 = (struct sockaddr_in6 *)address; snum = ntohs(addr6->sin6_port); addrp = (char *)&addr6->sin6_addr.s6_addr;