From patchwork Mon Mar 6 18:46:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Potapenko X-Patchwork-Id: 9607295 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 6E1D66046A for ; Mon, 6 Mar 2017 18:48:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F10527F54 for ; Mon, 6 Mar 2017 18:48:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7365228179; Mon, 6 Mar 2017 18:48:42 +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.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, 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 A82E927F54 for ; Mon, 6 Mar 2017 18:48:40 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.35,254,1484006400"; d="scan'208";a="4545060" IronPort-PHdr: =?us-ascii?q?9a23=3ApjUvARyeOFGGFrbXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?1ekRLPad9pjvdHbS+e9qxAeQG96KtrQY06GP6v+ocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDqwbal9IRmqogndq9QajIl/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/XaaMggzHjmuo3rEAzx0FFLveFjh8fFkp3Oh?= =?us-ascii?q?T0801BmKb0l72LWp5BEZn/ucS+kc3rgcoicuty10HEqh39LRE9eBqQthfKFZYd?= =?us-ascii?q?wj+ldKzmzZuBJgMZynNaBtnEYecx5wv0PsyRp4FplAndItrHMwwwp4MbiY309Z?= =?us-ascii?q?dzOEwZDwPaXaKmfo/B+1ba7ZxlDe0M2N96cK8PQ4qkzvvBqnF0o56Xln1MNV03?= =?us-ascii?q?SE7JXQEAUSSY7xUlow9xVipLHVeCo954TJ1XB3Mqm7qDzC29U0BOc/zRagZdhf?= =?us-ascii?q?OrueFADuC80aG9SuKOsyllezcx0EJuFS+7AuP869bfSJxKurMPxnnDK8gmRN+J?= =?us-ascii?q?p93V6U9ypgVu7I2I4IzO2C0QuDSTj8l0uhs8DwmY1ffjEdAmu/xjbiBI5NZ619?= =?us-ascii?q?Z5wHCWGwLM2r3t9+nYLiW2ZE9F6/AFMLwM+pdgSWb1z52g1dzkAXoWG7mSu/yj?= =?us-ascii?q?x7iSslrq2F3CzB2+7ibgYIOnZXRGl+ilfhOZO0j94AXEivdAgpiACo5V38x6hc?= =?us-ascii?q?qqV/KnPcQUFScyjwMW5iTrO6tqCebM5X9JMorSJXXfyyYF+ATr79vwUV0zn4H2?= =?us-ascii?q?ZF2jA0aSuqtY7knxx/km6dK2xzrHXBc8Fq2Rjf/MDcReJW3jceWCl3lCTYBlmm?= =?us-ascii?q?MNmt5tibi5DDsuWiWG27TZ1TbTPnzYWeuyun/WdqGwGwn+ivmt37Fgg3ySn719?= =?us-ascii?q?huVSXMshn8eZLm2L6kPuJ9eUlkHlj869B1GotmiIs/mIkQ2WQGhpWS5XcHj2bz?= =?us-ascii?q?PslH2aL5dnoBXyIEw97S4Ajj101uNXaJx4P/VnqH2MthYMO2YmQM2iIy98pKEr?= =?us-ascii?q?ub7KRYnStppVq1tQbRYflmnjcB0Pcu82AVg+UIuAor0yWcDasfHVJAPSztkRSI?= =?us-ascii?q?7syxrL5NaGapb7ewyFJ0ncq9A7GavgFcRHH5d484HS936sV/NEzD0Gfv5YHjdt?= =?us-ascii?q?jddskTtgCInBfbleRVL4gxlvUSjyp9JW39pWEly/I8jRF2xZG1ppWHK2F38K2j?= =?us-ascii?q?GBJXLTr1Z8cP+jHqi6ZThcOW05ypHpVmBjoHRp3oQuy0EDgKr/ToKx6OECEgqn?= =?us-ascii?q?ecAbffHhGQ6EF9r3/UEJCkKXeXJGIfzdp8WBmRPktfgBobXD8ihJ42ChiqxND9?= =?us-ascii?q?cEd+/j0R/kT3qgZIyu12LxnwSGHfpBu2ZTcuU5WfMQFW4R9Y50fOK8Ce9eVzHz?= =?us-ascii?q?xC/pK9sgONJGubZx5HDW4XQECEAU7sPqW279na7+eYHva+L+fJYbiWt+xeUeqH?= =?us-ascii?q?yImx0otg4jmMNt+DPn98AP0nwkBDR2x2G9zFmzUTTCwajzrNYNSGpBe44SB4ss?= =?us-ascii?q?G/8OjrWQ7264uAEb1SPc9o+xCsjqeJL/SQizphKTZEypMMwmfFyLsf3V4WlS5j?= =?us-ascii?q?bDytEbMOtS7DUq3QhrNXDx4cayN2KsRE9aQ80RdROcTDkNP6yqZ4juIpC1dCTV?= =?us-ascii?q?HhlNumZcoWI2G6MVPKH0iLO6qbKj3M2cH4e7u8SadXjOVWqRK/pSqbH1XkPjSZ?= =?us-ascii?q?mDnjTwqvPv1UjCGHIBxev5mwfQtrCWf5V9/pdxu7P8VtgT0x2700iWvANXQAPj?= =?us-ascii?q?hkb0NNsrqQ4DtCgvllFW1N9H9lIvOAmyae7+jVMYwZvuduAihukOJa+ns6waNP?= =?us-ascii?q?7C5YXPx1hDfSrtl2rlGoiOmA1CdoUAFUpTZNmIKLul5iNL7D+ZZcXHbI5hUN7X?= =?us-ascii?q?+fCx4SvdtqFsXvu7xMytjIjK/zLi1C/MjM/csEHMXUJsOHMGA6MRr1Fj7UDQ0F?= =?us-ascii?q?QiStNW7DhkxSivWS+meSrpggpZjmgIAORaNDVFwpCvMaDVxoE8EZIJhpRDwknq?= =?us-ascii?q?Sbg9QW5XeltxneXsZavo3dVv2IG/nvLCuZjb9eaBsS2L/4MYMTNo772kxlcFV6?= =?us-ascii?q?mprFG1bIV9BXviJhdhM0oFlK8HVmVWIz2k3lagSr4HIICPG7gAU5igpkbuQr7j?= =?us-ascii?q?vs5E03JlXSrisqjEYxgcnlgSyWcDPpNqiwUptZCzTquEUqNZP7Wxh6bQu3nUN+?= =?us-ascii?q?NTfEQ6lej7xvdGxxjw/co5RPE+ZGTaJYeB8Q2e2XZ/Iw3FRArSWnwFVL5fHCCZ?= =?us-ascii?q?pjigQqd4Wjr2hH2w19b944PrDfJK1MzldMnK2OpTOo2vo3wAAAO0YH6HmSdzIQ?= =?us-ascii?q?uEwUKrkmIDKl/upy5gOYnztOY2sMV/0xovJ27Ew9Pf+AzyHh07JZLEC+KfCfJb?= =?us-ascii?q?uDu2fcjc6IXk8w1kQQmklf47d2ytksfFCOV08zzLucDA8GNcvYKQ5IaMpS+mDT?= =?us-ascii?q?fTyQvuTN2551OZuyFvzwR++UqKkUml6kHBouH4kU88sOBIes0EDFIsf8N7MK0w?= =?us-ascii?q?8t5B7sJFSLF/RGZg6EkCodo8G+0J923ZNRJjcDDmVhKS+3/KrYphc2gPqfW9c7?= =?us-ascii?q?enMaXoweNn0oXs27milZsm9PDDmxz+IV0g+C7yXzpi7IFjnzc8JjZOuIZRNrEN?= =?us-ascii?q?y24isw86y3iV7R75XfKHr3Oshlut/K9ewVvY2HC+9OQbl7rUjch5FSR2a2XG7X?= =?us-ascii?q?Dd61O5/wZpExYtPoD3a6VVq/iy4oQ8rqItaiMLKIgQDpRIZTtomXxjYjOtGhFj?= =?us-ascii?q?sGARd/u/kD5L5gZQ0Ee5c7YgTotgQkOKy5PAeY0s6jQ2mqKTtOU/ZT1+O6aKJL?= =?us-ascii?q?zyA0dO+11GMgTo0mz+mw6UMNWJAKjhTZxfa/Z4lfUTP+FWFcewTPvyU2jHJtNu?= =?us-ascii?q?Aszecj2BnIq0UTMyiXdOx1b2xJp948BUmILnVwFmo1XF6cjY3N4w6qw7AS/zVS?= =?us-ascii?q?n9dS0e1Zrnf+pIXTYDSyV6y3sZ/VqTYvbcA6o61tNozuOtGJtJffnjPDUpbfqg?= =?us-ascii?q?iFUS68F/pdnNhfOjlVT+JJmW4/P8wKoIRB6VcrWsc4ObNPFLEmpqq2Zjp8ES4S?= =?us-ascii?q?0SgZWpub0zMchOexwKHVmQqOcJs8KhwEq49NgsEdUiJsZSMevqCjXZ3Ml2CYUm?= =?us-ascii?q?gLPBsT7QNU6QIakI9wf/zq4IrPTJ9I0D5Yu+t6XDbRGJR08FX2UX2ZgV/9SPq9?= =?us-ascii?q?ieOpxh5SwOjq0tYFRB51EVJdyPpOlks0NLF3LLEdsZLIsjCSaUz3p37iyOyiJF?= =?us-ascii?q?lVyM3baUf4DJbbumXgUi0Q43oURZVAyHvHD5QdjxJ5aLo3pFVLOI2mYFzx5yYj?= =?us-ascii?q?x4tyBLS4SdqryEw7rXkYQyeqEtxBC+5isFLWVz1lY4yrqJv/NJVIR29c4pudpE?= =?us-ascii?q?lFkE91KS621YJcK91R4j4LRDVOry+Rs8eySM1C3M92DoUDItRktnf8BqxLJoae?= =?us-ascii?q?r2cxurz1xX/T4yo8v0uixDWvB6+4SPpU/3UZGgUtPWuesEcuD+wo8mfc6V3Nt1?= =?us-ascii?q?d0/+BABreRkUpxujF9HotVBjZI03ClIE5/TH5cs+VVMK7VadBTQ+EuZR+zPBwz?= =?us-ascii?q?DeQp31aU/UFyh3v5YDd/tgpb+yDcQwk7TjMZgrHzlj0CssunIyMVS4pUbTU9aC?= =?us-ascii?q?fIMx6bmSdSvBtEd0FmR5UZDc1f97Edw4RU4tLISVywJiEdQBxiKgU43OJflUFZ?= =?us-ascii?q?qkWXYyTdAhezePnSrBJ3Zd+Ro9CtLPvn5gdLkITnsPo3968bXX2phRWtQczCr4?= =?us-ascii?q?/7rtCKtEyOe7njPuKhf3DBVybDjQqshbg6EpbG5S7TPxRHK5Ni03orfYDhCXLX?= =?us-ascii?q?PRRBP68UPERbWrxmZdhEv+xXadRpd7oO+a9oGh2IXAjvGJC1oPlAMFnTWSzULz?= =?us-ascii?q?+d/eynvYLT8bvdRPD6ZsOS2nnHQ7h4Poth5Dn/HLfqz5FR9lTq1fdq60x1V0LK?= =?us-ascii?q?Myafo9T9PgkL/tWtdlP+vp01GjPbGI9wkGHxxk5aasUXXzan8I8fyJNE8nb/Vf?= =?us-ascii?q?x30k7vsO1I7bZk7ZM747dzyce7Pa3SM+hVsVd7AhiIAQVn7oktAHJhSG9Pf+Ac?= =?us-ascii?q?M+rRfaAFjcD0se/3Ca0X6BqR++NHddvLPUbBmtOwCjuEUxxLgB8BqSIGLgubz/?= =?us-ascii?q?OFnrV7ScKhpefnxkIt/0KxIQQdwbBr+4iE5rGIq/PNYBvJ07cIQK7qSd3vrr40?= =?us-ascii?q?oUOd+eUklKISemxyewCnEvISVtQaxmf7yaAl1zwsHtjGH7L9/P5DS3M5kS7hm5?= =?us-ascii?q?9nGVUWAekYHb2R/YRRhm04gfDWNsUKcqBenWaCDRykHaUEyX6l8SuXJ3RqjQ/V?= =?us-ascii?q?3hHsW2yz6kT2rShiTSvK0djjjlJfVqOrCkdKQyqpJUh4vSuAPAr1tdr3vaA141?= =?us-ascii?q?8zMmH/qd2CinCuOLJNEM35PtCcJjM0pF0Php0rWtOvwZwbGca6INoJ9nF+auDT?= =?us-ascii?q?62Ktky9EuatHhoze4s+P+vrNBnmgk7eaq6iRyzBE13g4p08w5sqnNvHU6N2AW+?= =?us-ascii?q?6o2HoJTydjpwvBWAa4qrncr1ASJUyL31nElZcPPtFYx3Y40F/p5PQtQdI07gVe?= =?us-ascii?q?FZ3Aa+kEpT/tJDv+2UyfbM4vVimCzztXGUr4EUNlF6chw2/ws8fJlHjK910uWI?= =?us-ascii?q?Zwa1TthQZrAIUgNUIt9F8XzzIHEQgWbBCWDKqlBUr7IoQZUkgDcw6I3KCgeqcw?= =?us-ascii?q?30183K+g5PPJYex7HaoNOe5XjhSSk1hDBpIWraoeTapne1BH6q7YvAfiBJb8X/?= =?us-ascii?q?X9jno/L+O1TdpV8c8HrHsu+AC/SAS86Z1b9bYUlIiIdrJYYZjLpM187UZn5TsU?= =?us-ascii?q?eyxInhd+jw22UfodpODl7djXqpyo5fiyVKw1XeUY6wA0B3hij5v3mF0joNDW2P?= =?us-ascii?q?1GRYLJkon/6x5CI2KUt4nGyRV8LvAOK42zdrZ663oHPzQeJ24JPdeOcPY84jRt?= =?us-ascii?q?MTvJ6FxAA8MMecsYM9DQmQBQkUDmRLZT+dfFFVCCFodzbcco73Dtxzwv9ps8SO?= =?us-ascii?q?ng4iesJZ/D91FNI+9DjCJ0mdLavucV3ebdCCgZ4HmecRh1wTqOy4KTBPb0/OWM?= =?us-ascii?q?zszUVlwdEy4uSYhdOCaN+QypR+qyjpXpURmY6sztj5IkckKfWHixkL4CsqZWHu?= =?us-ascii?q?5Kkj/70SRGFoDpm/KVtMKh6HdNtlJZFIZ89xvFF7tEM5pmOBT4mcirRlRmCSvk?= =?us-ascii?q?Ys7UbAcutPCQxugS/+V0L1H+apMDIhIY17L67mJYTgR0R77soFmZQeIRacBiSP?= =?us-ascii?q?PFsnBa94JgJLUSPFiGvpDqqClHqEwuCg8zdLAwtiBadlXJnABNVKb7prgAihcb?= =?us-ascii?q?Ud5+vkNMAny/OGY/5zrBSKRUg7KcCPgL/TWJTq0BSV9kMiVgTBOpwJ9uYaemne?= =?us-ascii?q?hbsmNamSNwuP4q0z16Sxu7vS3jvbkN1Sgh+LG/szUBomdFQ/6bkyrHBlRP1vMK?= =?us-ascii?q?jb0TC3z681yzfGEDbJfu4LlgPcng+pUu428kYRk6YiMIUuKuCyD2j6OVDY2Cq9?= =?us-ascii?q?1chBuXt8XIc7C/Ny8SNq4yyRj7XXhyzhDenAp08GsMWjig7tgkJIW7Oco/2iWo?= =?us-ascii?q?GWzbdEsR7aJIscvxs0ULTOg3aV563mVj09aHSTcJRMPSGmY5lA4kZntYcJhb8x?= =?us-ascii?q?8VC7EogiqUvqlB5gwUYSnUHZ6j+oTLmcfIxGQyTdZtxmLNvKGFgYkq0HJ9kdNu?= =?us-ascii?q?8iGOoGgSd/DfU8J0AHj8yIlfyeL6Z/i2vOEIUo1mx6q9UPMYNMms53e20o1wWk?= =?us-ascii?q?C53rQeA0a5MOgby7fUVyelTmOZVvqPc2iIhDs5KUny5R+pLlIrcstKqVEyMvfa?= =?us-ascii?q?jJ5GiwLhSa90RjmXpVLDzmwjMeMbdxoxuIejegwKUPAeavOZJegv3P0+EkUDY2?= =?us-ascii?q?XOHStsBO+8qUStk5RjO3V8/UX6Zvzg8hznMNuXARQEDY/aoYJy+fOkQmKNI3lg?= =?us-ascii?q?wwNuPENs7efQC0wxtvNAc5aWhdXQgtV70e0Gd/dqKiA9uMQcmoFk6YmSzsiKdw?= =?us-ascii?q?vdzpDsKtHJuvKYGeHQz1w2emFGVboUeRj66Js8Pt4lQLDTBr9ZvRMABagmXpwu?= =?us-ascii?q?KXr++LtzLANpfQ7bfK60jdXypuKXeptUoGfb7lwuIyfYuh0D0uK7QBd6bpCrgn?= =?us-ascii?q?XyJY4/RihFr9JzEBdmG5FPG8wYpQq9H5GUgL27i8O2+05ite4KqbDwCvHW29un?= =?us-ascii?q?xIhxWpla5VCRPDnPHqVrhV5ljuuqiPfazpbxEd/iec8DVOVjRW7FbqHJE56nKj?= =?us-ascii?q?KKIM38YFJG87+A37JlSBWeej72U7CAtCK6KPVu+V87xZBgfOrP0Dwt6KnW2N/z?= =?us-ascii?q?Z2FduyeiomeFNJ9e7FzRGezeRAlZSfuf/2ZjGq0bd4z09P0BMdY62tiT/xFz7C?= =?us-ascii?q?he0MuCO6WhtVHD2kZ6dZLdMUvo1CE1V4YWIBS/L0Qsm3HWqmzHDnlHLcirN9Nt?= =?us-ascii?q?gNCLARzp/EZxhG4tanRGGmryStebIXIb1N6mZA2W6AJLCM4On+utdkEktq2ySO?= =?us-ascii?q?9oOpJelOW0tbUHl8hmKyXORMhcIiHRI6V6Pj1LDuXAvFIoeAILs6ApWocpYpiD?= =?us-ascii?q?OEEHP12DySP11gTPylD0d9qw1KaJJyYW73pHz7LZ0TRWoQm2p+qZiNX5UL/FdJ?= =?us-ascii?q?H2QOLSMC09Wz6BXjs+FkKp+Va/u/oYp/qUO3wfrU4IbS6IEw4cuKRvrdnWDm/O?= =?us-ascii?q?luxuZ4EFhfCAWyDtUy10jqQzCTxXtUCXRPoDExPab3j7gGpToAaiPOND/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?A2G0AwCCrr1Y/wHyM5BeGQEBAQEBAQEBAQEBBwEBAQEBFAE?= =?us-ascii?q?BAQEBAQEBAQEBBwEBAQEBgyaBa4E2jSmPKAEBAQUBgR4BkGeGAQUXPCaIKVcBA?= =?us-ascii?q?QEBAQEBAQIBAmgogjMiCQRGJzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARICRC4?= =?us-ascii?q?CJBMGAQEMIAsBAgMJAhcpCAgDAS0DAQUBCxgHCwUYBIlODaNIP4sbglQ6JgKCY?= =?us-ascii?q?AEBBYdHAQEIAgEdCBKEL4FIiVoRAYYBj1uMVoUYjQ4Nij8mhjpIkSwygRVYSzA?= =?us-ascii?q?INx8VP4RFDAIBHYFkdIdHgi4BAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 06 Mar 2017 18:48:36 +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 v26IlwMZ005419; Mon, 6 Mar 2017 13:48:07 -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 v26IkLTO204435 for ; Mon, 6 Mar 2017 13:46:22 -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 v26IkL6Q005150 for ; Mon, 6 Mar 2017 13:46:21 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1BAAADIrb1YfzNSfUpeGgEBAQECAQEBAQgBAQEBhTyBNpxQAwaSBoJEgz0FWhqGCIImVwECAQEBAQECEwEBCQsLCCaFdBkBATcBgRQBBQEjEolvDaNIP4sbglQ6gwgBAQWHRwEBCCAICQEIhC+BSI9tj1uMVoUYjQ4Nij+GYEiRLDKBFYEiODcfFYUEDAIBHYFkdIl1AQEB X-IPAS-Result: A1BAAADIrb1YfzNSfUpeGgEBAQECAQEBAQgBAQEBhTyBNpxQAwaSBoJEgz0FWhqGCIImVwECAQEBAQECEwEBCQsLCCaFdBkBATcBgRQBBQEjEolvDaNIP4sbglQ6gwgBAQWHRwEBCCAICQEIhC+BSI9tj1uMVoUYjQ4Nij+GYEiRLDKBFYEiODcfFYUEDAIBHYFkdIl1AQEB X-IronPort-AV: E=Sophos;i="5.35,254,1484024400"; d="scan'208";a="5969353" 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; 06 Mar 2017 13:46:20 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3A1xnlTx36/9oiuaFVsmDT+DRfVm0co7zxezQtwd8Z?= =?us-ascii?q?seIULPad9pjvdHbS+e9qxAeQG96KtrQY06GP6v+ocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDqwbal9IRmqogndq9QajIl/Iast1xXFpWdFdf?= =?us-ascii?q?5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPGAz/83rqALM?= =?us-ascii?q?TRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VSi+46ptVRTljj?= =?us-ascii?q?oMOTwk/2HNksF+jLxVrg+vqRJ8xIDZe52ZOOZkc6/BZ94WWXZNU8BMXCJBGIO8?= =?us-ascii?q?aI4PAvIdMOZcsYb8qEEBrR2jCgayHuPk1yVGhnjq3aIgy+QuDwfG3A8nH9kTt3?= =?us-ascii?q?nUo9H1NKYPXu+r1qnF1jrDb/RR2Tfy7IjHbAotru2LXbJ1aMfcz1QkGQDdjliI?= =?us-ascii?q?q4HoMCmZ2vkTv2Wb9eZtVvyjh3Qnpg1sujSj29sghpXTio4I1lzJ9T91zJg2KN?= =?us-ascii?q?GiVkJ3fNipG4ZKuS6ALYt5WMYiTnlouCkkzr0Gvoa2fC0Qx5Qmwx7TcvKGc42U?= =?us-ascii?q?7h76WuacISp0iGhqeLK4gBay/kygxfPmWsao11ZKqzJJktjKtn8Tyxze8sqKR/?= =?us-ascii?q?Rn8ku8xzqC1xrf5+JaLUwulafXNoYtwrsqmZoStUTDEDX2mELzjKKOeUUk/umo?= =?us-ascii?q?5Pn5bbX8vZKcOIh0igbxMqQqhMOzG/g3Mg8LX2SD4+SzyKXj/VHlQLVNlvA2ib?= =?us-ascii?q?fWsJTbJcQdu664DBRY0poj6hmjDzem184UnX8cLF1fYh6HgI/pO0+daMz/WPuh?= =?us-ascii?q?kkmvlylDyPfBMbnsRJ7KKzyLk7zqVbl67EFYxUw4ytUbr5FZB6oKJ/XwckTxrt?= =?us-ascii?q?vdDwI8dQuuzKKvBdlg04oMVH6nDaieP6ff91SP46ZnO+CRYKcNsSv5bv0i4OTj?= =?us-ascii?q?y3Q+nBtVZqWy9YcGY3C/WPJ9KgOWZmS/rM0GFDIjugcuRermhUfKaTlPbm6/Wa?= =?us-ascii?q?E7rmU0DIOqAJ3rSYeqj7iMmiy8G8sFNSh9FlmQHCKwJM2/UPAWZXfKLw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GWAABQrb1YfzNSfUpeGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBhRGBNpxQAQEBBpIGgkSDPQUXQxqGCIImVwEBAQEBAQE?= =?us-ascii?q?BAgECEAEBCQsLCCYxgjMgCwRGJzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARICR?= =?us-ascii?q?FQZAQE3AYEUAQUBIxKJbw2jSD+LG4JUOoMIAQEFh0cBAQggCAkBCIQvgUiMVAy?= =?us-ascii?q?DDY9bjFaFGI0ODYo/hmBIkSwygRWBIzg3HxWFBAwCAR2BZHSJdQEBAQ?= X-IPAS-Result: =?us-ascii?q?A0GWAABQrb1YfzNSfUpeGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBhRGBNpxQAQEBBpIGgkSDPQUXQxqGCIImVwEBAQEBAQEBAgECEAEBCQsLC?= =?us-ascii?q?CYxgjMgCwRGJzEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARICRFQZAQE3AYEUAQU?= =?us-ascii?q?BIxKJbw2jSD+LG4JUOoMIAQEFh0cBAQggCAkBCIQvgUiMVAyDDY9bjFaFGI0OD?= =?us-ascii?q?Yo/hmBIkSwygRWBIzg3HxWFBAwCAR2BZHSJdQEBAQ?= X-IronPort-AV: E=Sophos;i="5.35,254,1484006400"; d="scan'208";a="3717131" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mail-wm0-f51.google.com ([74.125.82.51]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/AES128-GCM-SHA256; 06 Mar 2017 18:46:19 +0000 Received: by mail-wm0-f51.google.com with SMTP id n11so71651531wma.1 for ; Mon, 06 Mar 2017 10:46:19 -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=G1pdBfR4WVpM7JlPm12RRZZ332GtQ0w2VJwdC2oXCDI=; b=BusfGG/eM5Pq6GCP1f3rNa/pbM+S00uc/89kndzzRdhC5pZtqzmoZbaZLON/Zhjifk uuw71NiLgh/fQU0RxrLUImnqtlvFgp5e/9aYCmn4m//UOm5OiWJ+lOEHFwOrFoE/zW8c MFfAkfbx0wrSBV/DA5K46bsDlmQGvX4dcS+wYurQK6Vw+723olUAmTAEcYnZeFKPv2aX 0ch8hdxAZFjGQtzL4pjpZ7HWPcgz+aQyAzVn2oFlu/MLIXvtxEXxyg/ZRAbXyX8cSPIw h6bzpmfAZIMhpCSeO8h9J447vFe0UnLUI0XbgdJVBNPiIuaHr3YkZZ80Z3evkp2dDqVx K8fg== 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=G1pdBfR4WVpM7JlPm12RRZZ332GtQ0w2VJwdC2oXCDI=; b=AKv81RtsDy7Xc+2oCSapwx0fUD0PTVKOj5Rdih7phCL5srCxTD18ZxijP5eschRUYF QALlRXsMcqmfUotHyAbcTrjukyKAxB3y/Duee7jkw+kYfkYf/QJPLXdPRvR1isMDTmFV x8f2EPmTYYHcWio0dL4o1hf08DWyuS4LzuuZsSHyWjMCcxAiMZ0dcCFZR5E3nZBXwxie vTJ0PfeE5v1Pf686oBtg8U4isHYZ9EWSADbfVk22in7BU4Iu60HhjoVbbds/UVHFtsTw 3+eP3p97w4DelsGLftxhnVVBbwLm/ZWobw4jxRfGftRmHC4Sg+uFT5tPngHcYfC5Q2OD uZSg== X-Gm-Message-State: AMke39mb4VursH4iE93KBMsHEOIxMGRuEY/zNMVEayp/CUAkdo+8lD5vuKfSS+lF3JGCWhQ0 X-Received: by 10.28.16.70 with SMTP id 67mr15236119wmq.142.1488825978539; Mon, 06 Mar 2017 10:46:18 -0800 (PST) Received: from glider0.muc.corp.google.com ([100.105.28.21]) by smtp.gmail.com with ESMTPSA id c133sm15830746wmd.13.2017.03.06.10.46.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 06 Mar 2017 10:46:17 -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 v2] selinux: check for address length in selinux_socket_bind() Date: Mon, 6 Mar 2017 19:46:14 +0100 Message-Id: <20170306184614.20056-1-glider@google.com> X-Mailer: git-send-email 2.12.0.rc1.440.g5b76565f74-goog X-Mailman-Approved-At: Mon, 06 Mar 2017 13:47:57 -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 selinux_socket_bind(): Acked-by: Eric Dumazet ================================================================== 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 --- Changes since v1: - fixed patch description - fixed addrlen tests to match those in inet_bind() and inet6_bind() (per comment from Eric Dumazet) --- security/selinux/hooks.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 0a4b4b040e0a..ddc4aca6c840 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 < SIN6_LEN_RFC2133) { + err = -EINVAL; + goto out; + } addr6 = (struct sockaddr_in6 *)address; snum = ntohs(addr6->sin6_port); addrp = (char *)&addr6->sin6_addr.s6_addr;