From patchwork Mon Jul 24 16:09:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Abeni X-Patchwork-Id: 9859783 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 0D46E60349 for ; Mon, 24 Jul 2017 16:28:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F0A1527F97 for ; Mon, 24 Jul 2017 16:28:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E16CD28111; Mon, 24 Jul 2017 16:28:56 +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 uhil19pa12.eemsg.mail.mil (uhil19pa12.eemsg.mail.mil [214.24.21.85]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 323FB27F97 for ; Mon, 24 Jul 2017 16:28:54 +0000 (UTC) Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.2]) by uhil19pa12.eemsg.mail.mil with ESMTP; 24 Jul 2017 16:28:47 +0000 X-IronPort-AV: E=Sophos;i="5.40,407,1496102400"; d="scan'208";a="366301" IronPort-PHdr: =?us-ascii?q?9a23=3A06P89hMUqLOEMsv+A/Ml6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0LP35osbcNUDSrc9gkEXOFd2CrakV26yL6Ou5ATRIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbB/IA+2oAjfucUanJduJroswRbVv3VEfP?= =?us-ascii?q?hby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPXw7683trhnD?= =?us-ascii?q?UBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RDqv47t3RBLulS?= =?us-ascii?q?wKLCAy/n3JhcNsjaJbuBOhqAJ5w47Ie4GeKf5ycrrAcd8GWWZNW8BcWCJbAoO4?= =?us-ascii?q?coABEewPM+hFpIX5vlcCsAeyCQyqCejyyDFHm2X20LU53eohDw/I0g4vH9wSv3?= =?us-ascii?q?vbo9v6LrocUfi3waXVwzjMcehW1Czh6IXLaB0tve2AUa5yfMfX1EIhFxnFjlKV?= =?us-ascii?q?qYH9JT2azOMNs2yc7+F9Se+gkHAoqwdwojOywcoskpPGiZkLxVDC9CV025w1Ks?= =?us-ascii?q?OlR057e9GkDIFcuD2dN4tzW84vRXxjtiUiyrAepJK2cycHxI4nyhLCcfCLbYeF?= =?us-ascii?q?7gz5WOqMOTt0mm5pdbalixqv/0Ws1PfwWtS33VtEtCZJjNrBu3YQ3BLJ8MeHUO?= =?us-ascii?q?Fy/kK51DaK0ADc9/9LLFgvlareN54h2rkwlocPsUjbHi/5hkH2jKiOe0U44Oeo?= =?us-ascii?q?8eXnYqj9ppOGK491ih3xMqQpmsClB+Q3LhMOUHSB9eS51b3j+VX1QLRMjvIojq?= =?us-ascii?q?nUqI3WKMsUq6KjAwJZz5wv5wiwAju4ytgUgGELLFdfdxKGi4jpNUvOIPf9Dfqn?= =?us-ascii?q?mFSjjjNrx/HAPr38DZTBN2PMkLD8fbZ790FT1hEzwMtD55NUFr4BIPXzVlX3tN?= =?us-ascii?q?zDFBA1KQO0w+H5CNllzIMRRXqPArOFMKPVqVKI5OUvI++Wa48JuDbyMf4l6uXs?= =?us-ascii?q?jX8+n18deLOm3YALaH+mBPRmOF+VYX32gtcOCW0KpBYxTPT2iF2eVj5ef3SyX6?= =?us-ascii?q?Am6T4nC4KmFoDDRoasgLyfxyq7EJlWZn1JC1+XDHfocZmEW+oWZCKVOM9hnSQO?= =?us-ascii?q?VaK9RI85yRGuqAj6xqJ/LuXK4SIXq5Tj1Nlp5+3Ujhwy9CJ7ANqD3G2XSGF0hG?= =?us-ascii?q?wITScs3K9juUx91kuD0a9gjvNFEtxT4fVJXRokOp7Yzux3EMr9VRzbfteOUlqm?= =?us-ascii?q?Rc+mAT4pRNIr39AOe1p9G8mljh3bwiWqH6Ual6aQCZMo9aLc2mT+KNxmy3bazq?= =?us-ascii?q?UhiUcpQtdXP228mqF/7xTTB5LOk0iBlqaqc7gc0zDJ9GidyGqBol1YUBRwUKje?= =?us-ascii?q?WnAfflXZrdL85kzYTr+uDa8oMgxOyMKYLatKcNLph01cRPj/INTef36xm2CoCB?= =?us-ascii?q?eIx7KMa4zqdn4Y3CXZEUQEkgYT8WyANQckHCehoGPeDCJwGl71ZUPj7/V+omuh?= =?us-ascii?q?TkAo1wGKc1Fh172t9xELnfyTUekT3rMfuCo6szV7Bky939PNC9qYowpuZrlTbs?= =?us-ascii?q?0n7FdAz2LZuBR3Poa8IKB6ml4ebwN3slvg1hV2DoVAlNYlrGkxwQp8N62XzVRB?= =?us-ascii?q?dymC0pDoIL3XLWvy8w6zZK7KwF3e18yW+qgX4vQit1rjpB2pFlYl83h/3dlVyW?= =?us-ascii?q?GT5pPWAwoTSpL8SUM39wB7p73DeSk86ZjU2WdrMamuvT/Iw8gpC/c9yha8Y9df?= =?us-ascii?q?N7uJFAzoHM0ZAMiuNfcnm1uzYRIHO+BS6bQ4P8S8d/uJwKSrJvpvnCq6jWRb54?= =?us-ascii?q?BwyliD+DdmSu7JwZkF2eqV0RGbWDf5lluhtdr3mY9cbzEIAmW/0TTkBJJWZqBq?= =?us-ascii?q?YYkEE2OuLNOsxtVih5/tXGVV9EW/CFMHxsCpfwaSb13n0gFK00QYv2CnkzOizz?= =?us-ascii?q?NoizEpsraf3CvWzuT4aRUIJ3VGRGZnjVbjO4S0ic4VXFSwZQgziBSl/Vr6x7Rc?= =?us-ascii?q?pKlnNGnTT11Ify/tL2F+SaawrbyCY8lB6ZMtqypXVv6wYVaERb7huxEayT/sH3?= =?us-ascii?q?NCxDAncDGnopv4kAZ+iGKBMnlztmHZdNpuxRjB/tzTXuNR3j8cSCl/kznXCUC2?= =?us-ascii?q?P8O18tWMi5fDrue+Wnq9VpJObCbrzJmPtC+g6GJ2Bh2/muy8lcf8EQgmyyP70c?= =?us-ascii?q?dlVTnQphbmfobrz7i6Mf5gfkRwGl/86tZ1Gp15kosqnp0fxXgahpKT/XoIimrz?= =?us-ascii?q?NdRb2aTkY3oXQj4H2dnV4BLq2Ed7NHKG25r5VmmBwstmf9S6ZmIW2jkh78xTE6?= =?us-ascii?q?eb8rhEnSpzolqlogPceuN9ni8cyfso6X4Vn/oJtBArziqDHrAYBVNYMjD0lxSU?= =?us-ascii?q?89C+q71aZHyocbi00Epxg8qhA62FogBSQ3v5YYoiEjNr7sllN1LMynLz4Jn+eN?= =?us-ascii?q?bMddITqgGUkxDYguhNMp0xi/4KiTB9Nm7npnIlzOo7jQBp3ZG8p4WHLnlh/KS+?= =?us-ascii?q?AhFELDH1Yd0c+i31h6ZEgsmWx5yvHolmGjgTX5vnU/SoECkJuPTkKQmOFiY8qn?= =?us-ascii?q?GFFrrDBwOf711mr33XGZCxK36XPGUZzcllRBSFPExQmh0UXDEkkZ4hDA+qwtDh?= =?us-ascii?q?f1lj5j0K+174sQVDyvhzNxXlSWffoxqoai0oR5eBIhpW6RtC50jLPsCE6OJ8AT?= =?us-ascii?q?1Y9IW7rAORMmybexhIDWYRV0yaAVDsI6Kj5cfG8+eFBuqyNf3ObquSqeZGTfeH?= =?us-ascii?q?2Yqv0pd6/zaLLsiPJmNtD+A/2kdYQX95GtjZmjUWRywZjS3NadSXpBCm+i14ts?= =?us-ascii?q?q/6ujkWBrz5YuTDLtfKdZv+hCygaidLOOQgSF5KThW1pwS2X/I1Lgf3FkXiy5w?= =?us-ascii?q?bTWtF6oPtTLVRqLKhqBXFwIbaz90NMZQ4aIzxA9NOdLcitPwzbN4gOA6BEpCVV?= =?us-ascii?q?z7gM6pfdYKI2a/NFzZGEmLKK6KJTrRw8H4eam8U6FfjP1Itx2svjaWC1XjMi6N?= =?us-ascii?q?ljXzUhCgK+VMjCabPRFFoo6ybhNtBXLkTNL8ZR2xKMV3giEuwb0omnPKMnYRMT?= =?us-ascii?q?Zmc0xTs7KQ9jlXgvNjG2xG9XpoNvOLlDqc7+XCLZYWq/RrCDxul+1G+HQ616dV?= =?us-ascii?q?7CZcSfxzgivdtMZuo0m9n+mByzpnSgFOqipFhIKKu0VtI6PZ+YVBWXne+BIB92?= =?us-ascii?q?KQCw4Fp9F9EN3gp7hQysTTlKL0MDpN6Mnb8cwYB8jVM8KHLGEhPQDyGDHKEAQJ?= =?us-ascii?q?VyWrOn/bh0xclvGS63KUo4MmpZnsgpoOV6RbWEY7F/wAFkRlB9sCIJFtUjMji7?= =?us-ascii?q?6bg9YC5WCioxnJWMVaopfHW+qUAfXuLDaZiadLZwATzLziM4sTLIr711Zlallg?= =?us-ascii?q?k4TAA1DQUsxVoi19cg80p11A/2N/Tm083ELlbBig72INGvGvnx45kA1+bf4q9D?= =?us-ascii?q?f27Fc9PkDKqzcokEkthdXlhiicfyT+LKiqQ4FZFTH5t08pMpzlRQZ1aBe9nU1g?= =?us-ascii?q?NDjfQLJQgKFsdWdxiA/ToZFPA+JTTbVYYB8MwvGaf+ko0VNZqim9309H4urEBo?= =?us-ascii?q?VklAQxa56sqGxP2wF4YdEpIqzQIbZGwUJLhqKSpCOo0P4+wBMGLUYX7GySYDII?= =?us-ascii?q?uFAPNrQ+ISqn4PZj6QiZljtAf2gMTOYqrehs9kMmOOSAzjjs07hdJUCtL+afNb?= =?us-ascii?q?+Wu3Dclc6URVM9zlkImFde/bdoy8gjaVabV0A0wbSKFhQJL9fNKQZbb8pK7njc?= =?us-ascii?q?YyaPvf/LwZ1rI4W3DvroQvOWtKYInkKkGx4kEJkW4cQfH5mjzVrYINz9I74f0x?= =?us-ascii?q?Ut4wrqJE6bA/tVZRKLijYHo92/zZNt24lSOC0dC31nMSqr/rbXuhMqgP2bUdgr?= =?us-ascii?q?eXcVQJELNn0sWMKghS5UpG9AAyO00uIE0giN9SXwpiDNDDn6ddVjfu6YZQ9rCN?= =?us-ascii?q?G1+TQ/9LK6iVjJ/ZXCP2v6L8htusfT6eMGoJaKE/dUTb5ns0jCnYlZRnuqXnXA?= =?us-ascii?q?Ed6zOpj8cY4sbcb7CnyiSFywlyo1T9vtPNaqNqWImh/nRYJVsImdwTAiOtSwGS?= =?us-ascii?q?0ZGxd1u+4M/rl8ZREZb5o9fxHoqxw0N7ajLweAztWuX2GtJCNLQPZDyOW6YLpX?= =?us-ascii?q?zzYxYuKh1nsvUIs6z+i28E4KQpEGlBfeyui/Z4NGSyj8BmRdexnTpSo+j2VhNf?= =?us-ascii?q?wyw+clzxPOrVkcMyuGdONuaGxco94wH1WSLmtqCmAgXV+TkZLD4hKw37AV5yZd?= =?us-ascii?q?g9dU0ehCsHjivp/eYCmhV7GqqZTVqSUvdsIqo6tvPoz/OsGGro/RniTDTJnMtQ?= =?us-ascii?q?2ISCG6F+BAldhWPCJVW/hImWYrOMwApYpB6VQ+VsY4J7xTFqYsvKqmaTx6Ai4O?= =?us-ascii?q?1SUZTZ+P3CQegueg3LvXjg2fcJAjMBMYrppNmt4dUi5wYiMZoq+sTZ7bmHSFSm?= =?us-ascii?q?cRJgcf9ApM5B8amo92YO/l/JLCTIVQxD5Ov/J0TizLG4Fz+FTlTGGbmkL3R+i/?= =?us-ascii?q?k+O3xwJS1+jj0sMbWRJlDkhd3elWnFMyKL5rM6kQopLKsjiQeEPgumLtyfepJF?= =?us-ascii?q?lWyc3QbF32FJPLu3fmXCAA/nMZXpNAyHbaFZsOiQV5c7orqE9KII+4Zkb0/yYk?= =?us-ascii?q?yJhxH7mkScCrwE4oomoERyiwD9VMEP1psFXTWD1hYpCkto/lO4lMTWBM+J2RsV?= =?us-ascii?q?BZkF9iMySh05pTN9lN4iIQXDhIuTidpsG9SNdE2cBtFJIMPs1/tG3jGKxaPJiR?= =?us-ascii?q?ons2urPryn/Y9DA8sEu6xDupFK+iSuJV5WseFRs1J26GsEkgE/Ms8nvO8lDKql?= =?us-ascii?q?118f1XCaSPjUVwpTZ9H4pBBjVS2HCkMVt8UmdJv/9dKKTPfMxWW+MyagO3Oxwi?= =?us-ascii?q?Cf4m2FSE/VlznXf9eSNyrAVb+yfZXwk6TiQVh7DtmToFqs65JTAaUZVIbS46by?= =?us-ascii?q?fELQKbljpbvBFFa0FlQ5oZGMpK+6kH3YtI+crPUVyjKTsYXBxkLA440uFSlU9C?= =?us-ascii?q?sEWZZSDSFhCkdfDRvR1rZc2RttKmLOzl/AdbjYPqqPw496IGR3C9hQ2hXdXeoJ?= =?us-ascii?q?Tmut2MqESOaL/yM/egbn/ZUDjMkRewiK8kD5bQ5SjcKg5bJIRhxHU5f5fhEXbL?= =?us-ascii?q?MgpCJ60FPUpXT6d6ac9JoupCfc9rZL4J+bNxBhKAXh7vGouvo+ddI1nOWzveND?= =?us-ascii?q?uO8vajoY3N8LPRU+7gadKQx3zfWaJ4Io966SXnG7ftyYJR4UT21etx+k54VFTL?= =?us-ascii?q?PTuMo8jmJgMO+MatbFDivoEzETPQHphwjGLnxltceMoPXy2q7JMYxYtD6HnuVO?= =?us-ascii?q?140lL8sPFJ+rlg7ok3/a5mxdmoKqfVNPtVr1VrAh6KCQV27p8tGnRwR3hNYu8N?= =?us-ascii?q?L/fcZbwZjdvyq+/tCqMX9AaY+/deadvaPUHOhtewCjeASRxehggBrSQWLgyG1/?= =?us-ascii?q?6Kg6V0U9qqpfDl2kIx5FizNgIGzKpz6oia56WFv/LXbx/NzbgeQKfqWMLzrrMo?= =?us-ascii?q?u0yM+f0ojrkOenZ6Ywe/CugSStYdxnv8zaAt1S8sFtnMH7bk+PFdS3I5gijvlI?= =?us-ascii?q?pmElUQBPwUAaGL8phEkWcghePVLNsWfb5emmyXDx6rDqcCyWK36yuQOGRlgAvB?= =?us-ascii?q?0wv3QWOo6F/5tzF4TDDJz9f+lkpVSri3CltTXyWzP094qymDPA3ytNr4oa419l?= =?us-ascii?q?05MnT4tNKRk2usILFXENf5JNySOyk0o08Yg4MqS9yzw48bH8G9INAL/HF4cPTe?= =?us-ascii?q?93uhkzVdrKdfm4re/saV9+3YHXm9jq2ar7GNyy5dynUjoF4w9MuvNvDU6N2MWf?= =?us-ascii?q?io0HwRTyhnsQvbQxG1sqDbr0wTOUGT1kfLnJcHPtBf3Xk9zE3m5e4jQNwp9ApE?= =?us-ascii?q?DYbAe+kCpS3vNzvo3Fafecw4WjOZ0ztNEVL/CUN4F7Qk2GLsoMLJkm/d+1gvRo?= =?us-ascii?q?l2a0znigJ4Ap49KUIs8lcXxDQMERQDaBCcFrGoBl/lIZECVUcddRSNxKK6dbsv?= =?us-ascii?q?3U1v3rOv4/febehnB6oINvtQlQCOk0ZGFZIRq60RWqp8e0Va9K7VuAftF5TnU+?= =?us-ascii?q?LhlXoqOv2/Wtpa/twBt3s+/ga/QAKt6YxZ4LYFkp+IebBLYYPXscBn9Uhn+yQA?= =?us-ascii?q?diNTjxhklR+5V/4TpPz76NjBrJWo8vquVLoqR+gP9Rg0BmF+goD1gF89odDYyf?= =?us-ascii?q?1cSozTiYTw6gxNJWCFuJrC2RlmNeUOM56rfKpn93gfJigfJmgBMsCKZPQn+C9i?= =?us-ascii?q?LinT6EJeDc8WYtMYJsXNkxhOikL1QLFT6tbbGliABohodsAo9GT2xyo38Zs9Tu?= =?us-ascii?q?bg8CW5JY3b71xWI/xDizhjm8zYq+gI2/rSDzIX7mODZxhy2COCxIGHC+zs8uWU?= =?us-ascii?q?1NHUS1QGEzYuU4hHODqN5QynR+SylJXzUQOY89Tzj4w6dEKRQHyxgasEv71UEe?= =?us-ascii?q?FaliX0wjheF47yh/KPsNqg8mhXuUNdEIZ18xLFHL9TPpJhORT3jsOrXFRzBjPj?= =?us-ascii?q?eMHIcRojoPaWxv0S7OV6LUT+Y5EULwkZxLL75npVTxduR6TtvlmDR+IRecFqSP?= =?us-ascii?q?XaoXBJ8YhgMbMAPECBpJz2qTdFsF82DxUzaLAusjxadlLDnAlUW6boprEAihET?= =?us-ascii?q?UcNiuUNWH2K/Jn4+7SLdVatJlKmRFOAV8jKLQ6wBTUpoND9+QxSy2JlpYLumg/?= =?us-ascii?q?RHsmJAniNgr/knyDhmSwWmuSzsva0BwzQg96+ktD8Zo3xKUv2ekzvUCVVE1PkK?= =?us-ascii?q?i6YcBGrl6Vy4enYDd5H+4LhgJcTn7okh+G8yYRAsciwJR+igDDvwj6yQCIyVrN?= =?us-ascii?q?1cnAKNuNnJbbKrIigdKq89yQn6S3Zg3QbQmhdo8G0WQjSv99IkK4C9NtwjxiW2?= =?us-ascii?q?A2Tbc0wM4qxRusvrqVELVPc2aU9mwGh70MiHQS0NRMrVF2kpjggkbXhEf49C6B?= =?us-ascii?q?8bEakomTWIvqhd8wEKYTfUDJ6q+o3NksfJw3U9S8llxn7OrK2fmpwqyGFlm89z?= =?us-ascii?q?7iOWuXQSafbXU8l3D3j3y4dQ1O3+Z/K2suwdT4tm0ruhWucYMsa/4Wu2xIlqWk?= =?us-ascii?q?i9y7QcAVW5PuEDxrPAXiarU2KYX/qEc3SWkzY/LEHy+QGiLkcrZ8dSs089LuzC?= =?us-ascii?q?i4ZTlw3lVrN1SDufpVvfzGE4KuMacAQ2uIa7dAAQSu4eefScL/A0wPIiEFsMc2?= =?us-ascii?q?PJHSxuBu+0sV6snJB7O3Jk4UX7feTi7BvrMN6TGhkYC47VsIR9+fugRmKOIXVg?= =?us-ascii?q?1gF9PFFo9+fDEFQ8rvNcc5eUndXLm9R70PIKd/RzPi05oNITnJxs6ZWM2seQbR?= =?us-ascii?q?7R1oryJc3SovWABv3fzkcqemJdUrcCYwP6/YY6Ptk/W7LNG7tVpxIcCrYmQJY5?= =?us-ascii?q?LWf+6Ll0LB9vcg7WfLm7mdflpuSXZpZPvH/W6lUwLDvAux0d1PO7UBZ3b5ewh3?= =?us-ascii?q?X9OJowXC5Or8VxCht6G4tCA80AoBSjA56VgKG0lcS8+kJ7u+8PtKr/FOrK1NCn?= =?us-ascii?q?0IlrWJha/0OLNi7LBKZ3mkRlkviygvDY35j/EcPiY9IEW/RlTWPeb7/GH5m/Ki?= =?us-ascii?q?iQNc7mfE5G6bGc2qpjUhqNfCD5Q7aGtCq8OfVj5UU01Jd1fPLXzDM39LHbxNry?= =?us-ascii?q?aH1Hpie5s3GGKoFT7FrUCuzCRxhUU+aK8H55Ha0Laov57OMOMd0kwNiB7Ah/9T?= =?us-ascii?q?BC0MqeI6i9tU/BwUN7eojdLEvuwSo5XpMKIBunO0s2nWDZsmjdAWhbLsW8Msli?= =?us-ascii?q?ntKVDh3r50lslmAhYWFPGnboRdiPI2gUxdq+axeR+QJIEdkDhei3dlA8tqKpVO?= =?us-ascii?q?loNY9JmeKwtLUIidxpMT3ARNBGPyHMK797Jj9RAf/Tq1goYx4Etb81V5wrZZiP?= =?us-ascii?q?JkMILkOAySL0zQvf3kz4bdus1LyGICwO6HVI06rF0SRQpwm+ofuZgNfsULPebJ?= =?us-ascii?q?7tR/PSLSwlVi2aRTQ1DEap9leku+YesPqeP2gfvkgeYjiOBw4LuqBvsd/QA3fR?= =?us-ascii?q?me1me50KnuqaWyHrSCBjkqo9HCNLul6NQ/YZEgnWdXDhinJGuAO+Pv9M4W7lb7?= =?us-ascii?q?qAy6pOVewWB5dDf/yaTtbDZ/BROS0oljQYOea7ed3QtbA53UzUTThRL66dzFSD?= =?us-ascii?q?SAazRfuGynq/RYwIu6Asszcsv9fXmTV6Va/POuDMiSSp99uAhSGcvqX3XGQrYg?= =?us-ascii?q?RhmOsIDW+A6ANNJGENF5cev0S7Ef3IXFpFyH980bEm4BQLYgkmFyQ3inA=3D?= X-IPAS-Result: =?us-ascii?q?A2AcAgBlH3ZZ/wHyM5BdGwEBAQMBAQEJAQEBFQEBAQECAQE?= =?us-ascii?q?BAQgBAQEBgywDkHeQdKFIVwEBAQEBAQEBAgFqKIIzJAGCQQECAwECIAQLAUYDA?= =?us-ascii?q?wkBAQoNCwICIgQCAgMBUwYYiioDr1KBbDoiAosPAQEIAQEBASSBC4Idg02BYYM?= =?us-ascii?q?kgTwBhkGCYQEEl02IAZQeggyFUINEKIZvSJUcVz9LMSEIGxWFXAwQgWmIGSuCE?= =?us-ascii?q?AMBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 24 Jul 2017 16:27:45 +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 v6OGOTcP006980; Mon, 24 Jul 2017 12:25:18 -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 v6OGAncu010566 for ; Mon, 24 Jul 2017 12:10:49 -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 v6OGAmSK001334 for ; Mon, 24 Jul 2017 12:10:48 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1AsAAByG3ZZlywWGNZcHAEBBAEBCgEBg?= =?us-ascii?q?1eQB3OQdJYFghKFRwKDaD8YAQIBAQEBAQEBEwEBAQEBCBYGhXABAgMjBFIQIwI?= =?us-ascii?q?CJgICVwaKQgOvWIFsOoszAQEBBwEBAQEkgQuCHYNNgWGEYAGGQYJhBZdNiAGUH?= =?us-ascii?q?oIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpiBkrghMBAQE?= X-IPAS-Result: =?us-ascii?q?A1AsAAByG3ZZlywWGNZcHAEBBAEBCgEBg1eQB3OQdJYFghK?= =?us-ascii?q?FRwKDaD8YAQIBAQEBAQEBEwEBAQEBCBYGhXABAgMjBFIQIwICJgICVwaKQgOvW?= =?us-ascii?q?IFsOoszAQEBBwEBAQEkgQuCHYNNgWGEYAGGQYJhBZdNiAGUHoIMhVCDRIcXSJU?= =?us-ascii?q?cH3dLMSEIGxWFXAwEDIFpiBkrghMBAQE?= X-IronPort-AV: E=Sophos;i="5.40,407,1496116800"; d="scan'208";a="34128" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 24 Jul 2017 12:10:44 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AXiqS6xb9s30U/5vRNOyRHkD/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoMqybnLW6fgltlLVR4KTs6sC0LuG9f27Ej1fqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdxIRmsrQjcuMYajI9gJ60s1hbHv3xEdv?= =?us-ascii?q?hMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTD?= =?us-ascii?q?QhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlT?= =?us-ascii?q?wKPCAl/m7JlsNwjbpboBO/qBx5347Ue5yeOP5ncq/AYd8WWW9NU8BMXCJDH4y8?= =?us-ascii?q?dZMCAfcCM+hYsYfzqVkBrRWiCgajC+3i0SNIhmbs0KEmz+gtDQPL0Qo9FNwOqn?= =?us-ascii?q?TUq9D1Ob8IX++vy6nIyTLDZO5K1Djm9ofIdBEhquyLULJoa8Xe0lcgFwXEjliL?= =?us-ascii?q?s4zqIS6a1uQXvGiH9eZvSeWvi2s+pgx3vzOhxd8sh5HXio4IxV3I7zt1zYkvKd?= =?us-ascii?q?GmVkJ3e9GpHZRIuy2EK4d7RtkuT3xmtSok0LEKpJ22cSYQxJg5xBPSbeGMfZKS?= =?us-ascii?q?7RL5TumRJC91hHJ7d7K7gBa/6UavxPDgW8eq3ltHsDBLn8XQun0MzRDc9NaISv?= =?us-ascii?q?5m/keuwzqP0hrc6uBAIUwukKrbKpohzqYxlpoVr0vDAjf7lFvrgKKZbEko5Oel?= =?us-ascii?q?5/75brn4vJOROIB5hhn7Mqs0m8y/Beo4MhIJX2ie4em8zKfs8lbnT7VMj/07ib?= =?us-ascii?q?PZv47HKsQbvKG5HxVZ3Zok6xa6FzumysgXnWEbLFJZfxKKl5PpNE/KIPD5C/e/?= =?us-ascii?q?nlutnSx3x/HGIrLhApLNImLFkLf6Z7lx8UFcyA0tzYMX25UBMrgcJLrWXUjruZ?= =?us-ascii?q?SMFhYkNySsyvvjTdB60ZkTH2mIB/nKHrnVtAqw7+UrJKGlboITuX6pM/Ev6vjv?= =?us-ascii?q?pWU0lV8UYe+i2p5BOyPwJehvP0jMOSmkudwGC2pf+1NmFOE=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BbAAC/GnZZlywWGNZcHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgyyQepB0mBeFRwKDaFcBAQEBAQEBAQIBEgEBAQEBCBYGV4IzJAG?= =?us-ascii?q?CQQECAyMEUhAjAgImAgJXBopCA69cgWw6izMBAQEHAQEBASSBC4Idg02BYYRgA?= =?us-ascii?q?YZBgmEBBJdNiAGUHoIMhVCDRIcXSJUcgRZLMSEIGxWFXAwEDIFpiBkrghMBAQE?= X-IPAS-Result: =?us-ascii?q?A0BbAAC/GnZZlywWGNZcHAEBBAEBCgEBFwEBBAEBCgEBgyy?= =?us-ascii?q?QepB0mBeFRwKDaFcBAQEBAQEBAQIBEgEBAQEBCBYGV4IzJAGCQQECAyMEUhAjA?= =?us-ascii?q?gImAgJXBopCA69cgWw6izMBAQEHAQEBASSBC4Idg02BYYRgAYZBgmEBBJdNiAG?= =?us-ascii?q?UHoIMhVCDRIcXSJUcgRZLMSEIGxWFXAwEDIFpiBkrghMBAQE?= X-IronPort-AV: E=Sophos;i="5.40,407,1496102400"; d="scan'208";a="365228" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from usat3cpa06.eemsg.mail.mil ([214.24.22.44]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 24 Jul 2017 16:10:41 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;d1b8e95f-7ebe-4fa3-b1a5-3ab4455e56c6 Authentication-Results: USAT3CPA07.eemsg.mail.mil; dkim=neutral (message not signed) header.i=none X-EEMSG-check-008: 57124766|USAT3CPA07_EEMSG_MP22.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 209.132.183.28 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0DBAABhGXZZhxy3hNFcHQEFAQsBg1eQB3OQdJYFghKFRwKDaD8YAQIBAQEBAQEBEwEBAQoLCQgoL4UZAQIDIwQLAUYQCxgCAiYCAlcGikKvWIFsOoszAQEBBwEBAQEkgQuCHYNNgWGDJIE8AYZBgmEBBJdNiAGUHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpPodbK4ITAQEB X-IPAS-Result: A0DBAABhGXZZhxy3hNFcHQEFAQsBg1eQB3OQdJYFghKFRwKDaD8YAQIBAQEBAQEBEwEBAQoLCQgoL4UZAQIDIwQLAUYQCxgCAiYCAlcGikKvWIFsOoszAQEBBwEBAQEkgQuCHYNNgWGDJIE8AYZBgmEBBJdNiAGUHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpPodbK4ITAQEB Received: from mx1.redhat.com ([209.132.183.28]) by USAT3CPA07.eemsg.mail.mil with ESMTP; 24 Jul 2017 16:09:18 +0000 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 23A418E3DD; Mon, 24 Jul 2017 16:09:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 23A418E3DD DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 23A418E3DD Received: from dhcp-176-80.mxp.redhat.com (dhcp-176-80.mxp.redhat.com [10.32.176.80]) by smtp.corp.redhat.com (Postfix) with ESMTP id 470D16E72F; Mon, 24 Jul 2017 16:09:16 +0000 (UTC) Message-ID: <1500912555.2458.12.camel@redhat.com> From: Paolo Abeni To: Paul Moore Date: Mon, 24 Jul 2017 18:09:15 +0200 In-Reply-To: References: <1500899117.2458.2.camel@redhat.com> Mime-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 24 Jul 2017 16:09:17 +0000 (UTC) X-MIME-Autoconverted: from quoted-printable to 8bit by prometheus.infosec.tycho.ncsc.mil id v6OGAncu010566 X-Mailman-Approved-At: Mon, 24 Jul 2017 12:24:27 -0400 Subject: Re: SELinux/IP_PASSSEC regression in 4.13-rcX 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, selinux@tycho.nsa.gov Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Hi, On Mon, 2017-07-24 at 10:42 -0400, Paul Moore wrote: > The change in behavior for userspace makes me a little nervous as > there is no way of knowing how any random application may be coded. > Even if we are confident that the majority of applications set > IP_PASSSEC before calling bind(), we are likely still stuck with a few > that will break, and that means a lot of hard to debug problem > reports. > > I would feel much more comfortable if we could preserve the existing behavior. I agree, we must preserve the original behavior.  Re-thinking about the problem, checking skb->sp in the BH, and storing the status in the scratch area should both fix the issue in a sane way and preserve the optimization. Something like the code below. Could you please try in your environment? (or point me to simple reproducer ;-)  There are some cosmetics changes vs the previous iteration, but the only relevant difference is that now the code always preserve skb->sb, as per the pre-0a463c78d25b kernel behavior. Thank you! Paolo Tested-by: Paul Moore diff --git a/include/net/udp.h b/include/net/udp.h index 972ce4b..8d2c406 100644 --- a/include/net/udp.h +++ b/include/net/udp.h @@ -305,33 +305,44 @@ struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,  /* UDP uses skb->dev_scratch to cache as much information as possible and avoid   * possibly multiple cache miss on dequeue()   */ -#if BITS_PER_LONG == 64 - -/* truesize, len and the bit needed to compute skb_csum_unnecessary will be on - * cold cache lines at recvmsg time. - * skb->len can be stored on 16 bits since the udp header has been already - * validated and pulled. - */  struct udp_dev_scratch { - u32 truesize; + /* skb->truesize and the stateless bit embeded in a single field; +  * do not use a bitfield since the compiler emits better/smaller code +  * this way +  */ + u32 _tsize_state; + +#if BITS_PER_LONG == 64 + /* len and the bit needed to compute skb_csum_unnecessary +  * will be on cold cache lines at recvmsg time. +  * skb->len can be stored on 16 bits since the udp header has been +  * already validated and pulled. +  */   u16 len;   bool is_linear;   bool csum_unnecessary; +#endif  };   +static inline struct udp_dev_scratch* udp_skb_scratch(struct sk_buff *skb) +{ + return (struct udp_dev_scratch *)&skb->dev_scratch; +} + +#if BITS_PER_LONG == 64  static inline unsigned int udp_skb_len(struct sk_buff *skb)  { - return ((struct udp_dev_scratch *)&skb->dev_scratch)->len; + return udp_skb_scratch(skb)->len;  }    static inline bool udp_skb_csum_unnecessary(struct sk_buff *skb)  { - return ((struct udp_dev_scratch *)&skb->dev_scratch)->csum_unnecessary; + return udp_skb_scratch(skb)->csum_unnecessary;  }    static inline bool udp_skb_is_linear(struct sk_buff *skb)  { - return ((struct udp_dev_scratch *)&skb->dev_scratch)->is_linear; + return udp_skb_scratch(skb)->is_linear;  }    #else diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index b057653..d243772 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1163,34 +1163,32 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,   return ret;  }   -#if BITS_PER_LONG == 64 +#define UDP_SKB_IS_STATELESS 0x80000000 +  static void udp_set_dev_scratch(struct sk_buff *skb)  { - struct udp_dev_scratch *scratch; + struct udp_dev_scratch *scratch = udp_skb_scratch(skb);     BUILD_BUG_ON(sizeof(struct udp_dev_scratch) > sizeof(long)); - scratch = (struct udp_dev_scratch *)&skb->dev_scratch; - scratch->truesize = skb->truesize; + scratch->_tsize_state = skb->truesize; +#if BITS_PER_LONG == 64   scratch->len = skb->len;   scratch->csum_unnecessary = !!skb_csum_unnecessary(skb);   scratch->is_linear = !skb_is_nonlinear(skb); +#endif + if (likely(!skb->_skb_refdst)) + scratch->_tsize_state |= UDP_SKB_IS_STATELESS;  }    static int udp_skb_truesize(struct sk_buff *skb)  { - return ((struct udp_dev_scratch *)&skb->dev_scratch)->truesize; -} -#else -static void udp_set_dev_scratch(struct sk_buff *skb) -{ - skb->dev_scratch = skb->truesize; + return udp_skb_scratch(skb)->_tsize_state & ~UDP_SKB_IS_STATELESS;  }   -static int udp_skb_truesize(struct sk_buff *skb) +static bool udp_skb_has_head_state(struct sk_buff *skb)  { - return skb->dev_scratch; + return !(udp_skb_scratch(skb)->_tsize_state & UDP_SKB_IS_STATELESS);  } -#endif    /* fully reclaim rmem/fwd memory allocated for skb */  static void udp_rmem_release(struct sock *sk, int size, int partial, @@ -1388,10 +1386,10 @@ void skb_consume_udp(struct sock *sk, struct sk_buff *skb, int len)   unlock_sock_fast(sk, slow);   }   - /* we cleared the head states previously only if the skb lacks any IP -  * options, see __udp_queue_rcv_skb(). + /* In the more common cases we cleared the head states previously, +  * see __udp_queue_rcv_skb().    */ - if (unlikely(IPCB(skb)->opt.optlen > 0)) + if (unlikely(udp_skb_has_head_state(skb)))   skb_release_head_state(skb);   consume_stateless_skb(skb);  } @@ -1784,11 +1782,11 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)   sk_mark_napi_id_once(sk, skb);   }   - /* At recvmsg() time we need skb->dst to process IP options-related -  * cmsg, elsewhere can we clear all pending head states while they are -  * hot in the cache + /* At recvmsg() time we may access skb->dst or skb->sp depending on +  * the IP options and the cmsg flags, elsewhere can we clear all +  * pending head states while they are hot in the cache    */ - if (likely(IPCB(skb)->opt.optlen == 0)) + if (likely(IPCB(skb)->opt.optlen == 0 && !skb->sp))   skb_release_head_state(skb);     rc = __udp_enqueue_schedule_skb(sk, skb);