From patchwork Mon Jul 24 12:25:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Abeni X-Patchwork-Id: 9859333 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 E9737600F5 for ; Mon, 24 Jul 2017 12:42:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D857428599 for ; Mon, 24 Jul 2017 12:42:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CD0BF2858A; Mon, 24 Jul 2017 12:42:17 +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 uhil19pa09.eemsg.mail.mil (uhil19pa09.eemsg.mail.mil [214.24.21.82]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A5FA42858A for ; Mon, 24 Jul 2017 12:42:16 +0000 (UTC) Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by uhil19pa09.eemsg.mail.mil with ESMTP; 24 Jul 2017 12:42:15 +0000 X-IronPort-AV: E=Sophos;i="5.40,407,1496102400"; d="scan'208";a="404925" IronPort-PHdr: =?us-ascii?q?9a23=3Ag4aUERznlmY9rZHXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?1esVLfad9pjvdHbS+e9qxAeQG96Ku7Qc06L/iOPJYSQ4+5GPsXQPItRndiQuro?= =?us-ascii?q?EopTEmG9OPEkbhLfTnPGQQFcVGU0J5rTngaRAGUMnxaEfPrXKs8DUcBgvwNRZv?= =?us-ascii?q?JuTyB4Xek9m72/q89pDXYAhEniaxba9vJxiqsAvdsdUbj5F/Iagr0BvJpXVIe+?= =?us-ascii?q?VSxWx2IF+Yggjx6MSt8pN96ipco/0u+dJOXqX8ZKQ4UKdXDC86PGAv5c3krgfM?= =?us-ascii?q?QA2S7XYBSGoWkx5IAw/Y7BHmW5r6ryX3uvZh1CScIMb7Vq4/Vyi84Kh3SR/okC?= =?us-ascii?q?YHOCA/8GHLkcx7kaZXrAu8qxBj34LYZYeYO/RkfqPZYNgUW2xPUMhMXCBFG4+w?= =?us-ascii?q?cpcDA+8HMO1FrYfyukEOoAO9CwesGu3hxD1HhnHq0qI13OouCxzI3BQiEt4Tvn?= =?us-ascii?q?nbss71ObwOUe221qTE0SnPY+9U1Dr79YPGcgohofaJXb9oa8Te004vFwfCjl6N?= =?us-ascii?q?tYHqJC2a1uIMs2OG6OdgTfighHU5pAF3ozii3d0shZfUiYIV0F/E6T91z5oyJd?= =?us-ascii?q?29UUN2Z8OvHphItyyCKod7TcwvT3totSon0LEKp5G2cDYQxJg63xLTdeCLfoyS?= =?us-ascii?q?7h7+WuudPy10iG9mdb+xnRq+70utx+vhXceuyllKtDBKktzUu3AI0Bzc99aIR+?= =?us-ascii?q?Nm/kekxTaPzwfT6vxYIUwslarUNZohwrkom5oPq0vDBC72mFjtjKOMakUl+vSn?= =?us-ascii?q?6+TgYrn8oJ+TK5R0hR3kPqQrm8y/Bfw0MgkIX2eF5eSxzKDv8EL2TblQjvA6j7?= =?us-ascii?q?PVvI7VKMgFvKK1HhdZ0oM55Ba+Czem3s4YnX4CLF9dYxKIkYzpO1DIIPDlAvaz?= =?us-ascii?q?mk+jkDB2x/DAIrLuHI7NI2PfkLbhYbl960lcxBA1zdBE/Z1YEL4BIPXtWkPprt?= =?us-ascii?q?zXEgc5MxCow+bgENh91IQeWWSVDa+FMKPdq1mI6/ktI+mLYo8VvSzyK+M55/Hw?= =?us-ascii?q?l385gkURfa6z3ZsYcHq4BOhpI12FYXrwhdcMCWUKvggkQ+P2i12CSjlTZ3CzX6?= =?us-ascii?q?Ii/Tw7BoamDZrMR4+2nbyB2ju7HoBMamBBEFCMHm/id5+YVPcUdCKSPshhnyQc?= =?us-ascii?q?Vbe/UIAuyxeutA7my7pgNefU+zMXuoz929Rv4O3Tjx4y/yRuD8uBy2GNU310nm?= =?us-ascii?q?QQSjAr26B/p0p9xUqd3qh8gvxVDsZc6O1TUgc9L5LcyPZ6C9/qUALbYtiJUEqm?= =?us-ascii?q?QsmhATwpU90x38UBY1xmFtq+iRDD2jalDKUOl7yXHpA09LzT32TpLcZn13nGzL?= =?us-ascii?q?Uhj0UhQsZXNG2mgLJ/+BbXB4HXlkWWibqqdb4c3SPW82eD1XSBvEddUAFqUKXF?= =?us-ascii?q?WWsQZkzZrNjj4UPCVbCuA6w9MgRd0c6CNrdKatrxgFRGRfbjP9Lebnm0m2e0HB?= =?us-ascii?q?qIx7WMYJDse2oHxiXdC0kEkx4N8nqcMwgxGDuhqXrEDDNyDVLvf1/s8e5mpXyl?= =?us-ascii?q?Vk871RuKb0x617eu4h4an+acS/II3rIcvCcusSl7E0in09LREdqAqBJrfL9Abt?= =?us-ascii?q?Ml/FdHyWXZuhRzP5yhK6Big0ARcx5sskPgyRp4F4JAkdIwo3My1gpyLqCY301d?= =?us-ascii?q?eDOEx5zwPafXKmbq9hC1d6HWwk3e0MqR+qoX5vQ4sU/svAe1GUoj6HVqyNxV02?= =?us-ascii?q?Od5pnTFwoTX4nxXlww9xhgqLHQejM96J/M1X1wLam0tSfP29EzC+smzRagYsxS?= =?us-ascii?q?MKCeGw/xFM0aGtKiKOswm1imdhgEJvxd9LYoP8O6cPuLwLSkM/t6nDKnk2tH+p?= =?us-ascii?q?tw3ViQ+Cp5UOLI2IwFw/6A1AudSzj8lEuhstzwmY1ceT4dBG6/xjb/BI5NZqxy?= =?us-ascii?q?ep0GCXyyLM222Np+gYLtW39C+1K5AVMJxtOpcwKIb1PhxQ1QyVgXoXu/lCui0j?= =?us-ascii?q?N7jiokrqWa3C3B2ejicgQIOnJTTml4kVjsOZS0j8wdXEWwdAgpmgGl5UHhx6hH?= =?us-ascii?q?v6l/NG/TQUBGfijzNW5iVLG8trycbM5T8JkoqzlYUPygYVCGTb7wuxUb3DnnH2?= =?us-ascii?q?tC2j87bSqqt47nnxNkkmKSN2tzrH/DdcF33xff68TWReRN0ToeWCl4lT7XC0Cg?= =?us-ascii?q?P9a04NqUlo3MsuSlWm29UZ1TdDXkwpmbtCun/2FqBwOwn+yrkN39DQc6yTP718?= =?us-ascii?q?VtVSjQshb8Y5Xk17i9MeJ9ZEVnGF/86818GoFxiYYwgJAQ2X4AiZWP+noLi2Dz?= =?us-ascii?q?Mc9U2ajmdnoCWSYLw8LJ4AjiwEBjKnOJx5nlVnmE2ctued26YmIQ2iIg4MFHE7?= =?us-ascii?q?yU7KRFnStzo1q3sRnRbeJ7njgD1fsk8GQajP0RuAox0iWdBagfHVNfPSzokxSH?= =?us-ascii?q?8cq+o7lQZGeharWwz1d+ksy6DL2YpQFcQnn5cI84HSBs9sV/LE7M0Hrr54H8Yt?= =?us-ascii?q?bQcNYTugeOnBvalOdVL5YxluYNhSphIm/9uGEpy+g8jRNyx526upaIK3l19qKj?= =?us-ascii?q?HhFYLiH1Z98U+jz1jqZRgMCW35u0E5ViBDoLWoDoTfS2HzIOr/jnMByOEDIkoH?= =?us-ascii?q?eBBbXfBROf6Fthr3/XC5CkLWyXJH0HwtV6XhadIlBfjx4OXDghg545DR6lxNb6?= =?us-ascii?q?cEtj/TAR4UP4qgFQxe12ORn/VX3fpAi2ZTsuTpiQMgZW5BlY50jJKcye8v5zHy?= =?us-ascii?q?ZA852/qgyCN3eWZxpODW4UWkyIHVbjMaey5dPY6eiXGvK+L+fSYbWJseFeT+2H?= =?us-ascii?q?xY+r0oZ94zmMN9mPP3l7A/01wEVDW2p1G8PDmzUAUyYXjT7Cb9aHpBeg/S16ts?= =?us-ascii?q?O/8fTvWA3x/oaPDrxSMdth+x+onaeDK+6QhCF8KTlGzJ8Mw2HHyKQH1l4Ily5u?= =?us-ascii?q?byWtEagHtSPVQqLfgKlXDwIcayN2L8ZI4bwz0RRKOc7BkNz1zqR4jvk3C1hbSV?= =?us-ascii?q?PhhtulZcsQI2GyLFnHHlqENKyaJT3XxMH6ebm8RadejelOsh2/ozKbE0jjPzmY?= =?us-ascii?q?jTbmSxWvPftLjCGBMxxUoJu9fQp1CWj/UNLmbQW2MNFtjTIo3LI0nWnFNWgAMT?= =?us-ascii?q?h7aENAtaef4j9dgvllHGxB9HVlJ/GemymF9+nYNooWsfxzDyRyjeJV+mw6y6NO?= =?us-ascii?q?4SFKRfx1gjDSrsJgo1GnlOmA0DxnXwZPqjlRgIKHp0JiOb/W9pNYQ3bL4AoN7X?= =?us-ascii?q?mMCxQNv9ZqEcbgt6dUytjOj6LzNCxC/8jP/cQCG8fYMtmHP2QlMRroHj7UEQQE?= =?us-ascii?q?QCW3OmDfnUxdjeqS+mebr5cgtpjsg50OSrlBWFwyDPMaBVxvHMYeL5dvQjMkjb?= =?us-ascii?q?mbgdYO5Xq/qBnRQNtVvovcW/2IH/rvMjGZgaNDZxsSzrPyNZ4TOZHj20x+dll6?= =?us-ascii?q?m5zHFFHRXdBCpS1haBQ5r1hT/3dlT208wUTlZhmq4H8JGv6+hgQ2hRdmYeQx6D?= =?us-ascii?q?fs5E86KUDFpCQqjkk+h87ogTeJcDHvKqewWJtZCyvwt0cqNZP6TBx5bQqonUxr?= =?us-ascii?q?LD3EXa5ej6N8dWB3jw/RoYdPGflZTaFeeh8QwvCWaOsu0VtHsCWnwlFI5ejeBJ?= =?us-ascii?q?R+kwsqdIKjoGhb2wJ/dtI1I7LfJLZRxFhKmq2OpjOo1vw2wAIGIUYC7nmdeCoT?= =?us-ascii?q?tUwLMbkmPDao8fZq6QyZmDtDeXIAV/w0rfJ27kk9IfiPzzr8075fLUC8L/afIL?= =?us-ascii?q?2Cu2fej8GIWE8/1kMTmkZe/Lh2y9osc02aV0A31rueCRQIOdDEKQ5Lc8pY7GLT?= =?us-ascii?q?cjqWseXR3ZJ1OJ2wGf3yQu+QtaYbn1mkER0zEIQW9MQBGZet0FrGIsj7Mb4F0x?= =?us-ascii?q?Qt5BjrJVmfCvRGZg6Lmi8do86j1J93wZVdJjYFDGpgKiW4+KzYpgAwgPWZQtc7?= =?us-ascii?q?eWwaUZEHNnIrQs21gTRVv3BdDDmxyO0Z0hGO7yP7piTTDDj8aMBvZPGKahNwEN?= =?us-ascii?q?u24ykw87CqiV7L9ZXTP2X6NdN4utDR7+MbppGHBuhbTbl7rkfQgY5YR2alU2TX?= =?us-ascii?q?C966O4Dwa5UwbdzzEnu6SUKwizY0T8f3IdasIbOFjh3vRYZRrIaUxisjNdOnGj?= =?us-ascii?q?EYBRhwu/kJ5Lhgag0bf5o7fRnouhwjOKOjJQeY1dOuQ3qwJTZNUflQ0/+6Z71W?= =?us-ascii?q?zioraO+20n0gQY8mz+Ov604CWIkKjg3Cxfakf4ReUjLzG3xHdAXJuSo5l3NsNu?= =?us-ascii?q?k1wucn3BzEq18cPC6XdOZxcmxLo8k8BU+OIXVxEmc4W16cjY/E4g6w37AT/zBQ?= =?us-ascii?q?kMtV0exFqnfxpYXTYDSyV6y3sZ/VqTYvbcA6o61tNozuOsSGtInEkTzZUJndqQ?= =?us-ascii?q?yFUCm0FvpchthQIDxXQPhOmWE5J8MGo5BN6UwvWcciP7ZPErUjpqi2aTp4Ci4f?= =?us-ascii?q?1TUWV4eB3DMenOizw77alxeWcJQlNhwLqo5PjcAcUyFsZCMSvaGjV5jMm2+CVG?= =?us-ascii?q?cLPB8Z7R5Q6wIYio9wYufl7ZLTQ5BSzT5buOh7XTbVFpZ27Vv7UXuZgUL4Sfm7?= =?us-ascii?q?lOypxw1Sxur20tYHQB5/FVRdx+FOm0syLrF3KrUfvo7Nsj+MbkP0pHvjxva8Kl?= =?us-ascii?q?RNzsPZbEH3DI3AtWXgSCIc4mEUSZVJyH7BCZQYixB5Z7ozpFVQPICmfV7z6CAm?= =?us-ascii?q?x4tzA7a1Ttykx1EhrXYCRielDcBBC/14v13LWD1peZerqI/qO59KWG9f5IWdq0?= =?us-ascii?q?tFkEVqKyO504BTK9tK4jEXRzVPvS+ds8GsSMJd3c92DpkMIth7u3f8F6NEOISR?= =?us-ascii?q?o3Mstbz1z3/V4TY8v0mmxD+rAa+3U/pZ/3ECGgUuP2mfpFMjAPcs8mfT91DNs0?= =?us-ascii?q?p7/+RAC7iOk0p+vihyEopJBjZT2nCvN05zQ2Ves+VGNKTVdNRRQ+E1ZR+rIRM+?= =?us-ascii?q?D/An30uN/UF6hnr5ZitytgxB+y/DQwY0Ty4Vgqz2mT0frMGnNiUWS5VSbTUudy?= =?us-ascii?q?3FMR6UmThLvBZDbEFnQ4oWAsxY+7Edx4dU/dHPSUetKSEEQBxtLRg00fxBmk5f?= =?us-ascii?q?qE+YYzzSDRK0dfbTtR16ZduRrMmsLPni4AdLlobnv/si+6UFWXKmhRWnQcrCoI?= =?us-ascii?q?/kqt2KqkyOeb/4M+Kme3/OVjzMgg2riLg5EZbK5zDTPxRfK5Zk03ooe5/hCXTE?= =?us-ascii?q?PR5ePaIUO1JbVbxmadVBuu1aZchkd7gS9KBwGB2HXQ3gGJazrPZYM1nfXzLeID?= =?us-ascii?q?ud8uanu4Lc8aTdSfT8ZsyL33vIWKx3MYtm5TT5Brvn35RT9Vbx2vdo6kx1U0PG?= =?us-ascii?q?MzyboNTnOAwL+NGodlH+sZ0xATPWHJBwnWL3xk5easUXQzel8IgDxZNd73bwV/?= =?us-ascii?q?x33lbvv+1V6rZr95M747Z3xseoPa3SM+hVsVd7AhiIAQVn7o0tAHNjR29Lf+AR?= =?us-ascii?q?NOzcfb8ejcDzseD4C7IY6BuJ++xDc9THI1vNms6lCjGTURZEhhsOqSYGLguA0P?= =?us-ascii?q?6Ig7N0Sdy7qufnx00g+EW+LhoazLB3/4iE5KuIpOjTbxTP0bgIQK/qRtn8rr40?= =?us-ascii?q?oUOd+eUklKISemxyewCnFfISVsoZxmj+0aAq0TgjHNnYErLm5vFDS2k5kS76lJ?= =?us-ascii?q?BlAVoaAPUUEqSX/Y5GhGc3h/TZNsEKcqBFgmuPFwSrEqUFyX6w7yuYOndljwrL?= =?us-ascii?q?0xHtRWOz8F72ojN5QSTWydfjiVBZVr6tBUddRyCpI1N3sCuTPAr0s9r6oaY141?= =?us-ascii?q?swMmzqrtKNk3auN61MEs3jPtOcJzI0pFUNgJ03WNOvxZgRGcChL9cJ7HF+cvze?= =?us-ascii?q?5nukky9coqdHg47e7d+Q+vjMAHavkbaVq7SXyzBe0HQ4uks/6t+4PPHU+9KKW+?= =?us-ascii?q?io13oWTypnvQvBWwW4qr3dr1ARI0CL0UHLmIIQPt5Dxnk4ylvm5PU/T9Iv6QVe?= =?us-ascii?q?DJjPa+kFpTDpNzv+2UyfbM4vVimCzztXGUr4EVx/GKg6xGLws9zGmGzV+10pXI?= =?us-ascii?q?ZwcVLohQB5DoU/M0It60MXzjAFEQcTdRCRFKuoClj9LYsYSUgDbgyK3Lyheqcy?= =?us-ascii?q?3UB+2b2v6/HOYux7HaoCLO5djhSJnFhZBJ0ZrbEeTKh7e19H+67dvhLiBJT/X/?= =?us-ascii?q?j6iXowMuW4QttA/sAHrXQi7RiwRwG75JdY9bkbloqHdqFabpjXpsx86Vlo5SIX?= =?us-ascii?q?fCxXnBd/lw+5UfwbpO374NjbsZ+o5/2rVKkzR+QY6QI0B2V4j5v/mlwjp8/Y1/?= =?us-ascii?q?tEQI3PlYv/6BxNI2KNuIvC0hl9KPABJJi3c7t77HUIOTQeKGwSMtaMbPk8+SBt?= =?us-ascii?q?Oi3J51NeGsMMec8YPM3VlA9Pi03pQ79S+dDZGl+ZF4dzb9on73fzyD0u7ZQ8Vf?= =?us-ascii?q?vv5yGsKpDC9VFNOOlDgz92mNLFvugVzuLYCDIL7nmBdxh13iSCxoGVC/nq4eWD?= =?us-ascii?q?1NHUVl0BHi4sUIdRPSGC9hKjRuq0kpXpTwyV59TrgJ0kaEKfWnyxnaoCsqZWEu?= =?us-ascii?q?5MkCb70SZEFoDzmf2Vt8Cg6GxNtl1ICIxz9wHKGL1DPpVnPhT1jtWrRlJiCSv7?= =?us-ascii?q?Ys7UcAQhtfGLyecN7OV+Nlf+apUAIh0e0bL69GBZTg1wR77qplyZR/4eZMN6SP?= =?us-ascii?q?PYqXBY8Y1gJLUVPFeDuJzqrixFqFQ3AA81drAwriZVdlTVnAFPXab7pqIAgBMG?= =?us-ascii?q?UdFloU9MBX6wOGUm6jrIS6tVirWRCPsS8jmUVawBTUFoMiJ4QxOo15RjYL+pku?= =?us-ascii?q?5dsmJGhCxxuv4q3CJ6RBGkoy3ju7oN2S48+LG/rDgBv31FQfmZkyfME1pD1+4G?= =?us-ascii?q?jaYbC3bl8ly8e2IObI797bhoP8jg8pMh43snaxU5YyIGRfigCz33j66QDYyArM?= =?us-ascii?q?lchAWUtMvTYrG9KykSNrIgyRPsXHV93Q3ekwxu8GQVWDmg68UkJIqlM8Y/2iWo?= =?us-ascii?q?AXTbdEoL4q5Rssvxsl4LTO0sZVx9wGVj1tWHSTAMRczOHWY1lQskaWRffZJd6B?= =?us-ascii?q?8aCbMngjKVsalH5A0UZinbEpi98InKgcjIwWU9Tcttxm/Op62FmIkl0Ht+ltNw?= =?us-ascii?q?8y6BpXUSd+vDU8N2BXjzzIhfw/TkZ/qxquAHVJdmyLO5Xf8ALMaj92W22JFxV0?= =?us-ascii?q?6r3LseGUS2MPMZyrfdTSilVXWSWf6XfGiUgzY5Lkny6AGnLl0zb8dLoVEyMu/G?= =?us-ascii?q?hpNHjA3hVrV0RiSMqlPBymwsL/8afRosuIi7YwwKUPIRZ++EKOgswP0/CEMMb3?= =?us-ascii?q?jNHSt3F++5r0WgnI16O3V8+0X1f/7h8gf8MNudAhMEC5LVroZt+fymQWKMIWNg?= =?us-ascii?q?zBx3PERv6+ffFkg+tuxCfJaVh9TQgcp00fIdffd3LSI9osITmp5k6YSM1ceKcB?= =?us-ascii?q?LRzpX1JdzOoPiXGf7fz0Msem5EVLoVewX16JsmPtQhQb3cAaNZvQgABag9WJEu?= =?us-ascii?q?LHn+9KdoLA5oaQ7RYLO0gtX2puKVeJRbumXa7lUqLCfToxcD0OC7TRRnb5C2gH?= =?us-ascii?q?X/OJ4wSSxFr91sEhtpApBCGsIBrwqiBp6bhru7i9uv9E9gvO8Kq6XwAOjQ1Nul?= =?us-ascii?q?x4VxQ4Ra5UuTMTffHKlrmEVlgfisjfrb15nxCN/ieckaW+RhRW7FcLDGFJ2lKj?= =?us-ascii?q?2SIsL8Z1JG87mE3bJ+VhWeejv0X7KCtCK+L/Vk/UQ7xZBkfOrJ0jMi8avX2N3s?= =?us-ascii?q?aGFHvi2jt2KGNIND7FzWAuzTRxZUSfuD8GZ4EqwbdI/09OYVMdw+29iR+Ahz4y?= =?us-ascii?q?5E0MuCOaShqVXM2k1jf5LBMETpwzo5WZUNIBmnKksjn2vZqnXbAXRBIcmoLsZj?= =?us-ascii?q?gMqVDhPz/Ul+h3ktaXRaF2rrW9iRI24b1Ny6ZAKR6QJLAMwPn+mteU43rqeyU/?= =?us-ascii?q?VnOo1ZmeW2s7UKidNpJDvTS8haPiHQKrh2MyFPDuXOolgnfBoEs7kzWocoapmC?= =?us-ascii?q?OkQHMF2PySnq1wvNzVX0d8Cw1KaOOCsW8G9Iz7HC0TdXvAS5pPCZgtHjULDecZ?= =?us-ascii?q?H2U/7SMDY/WjGcWzsyDV6j+U24tPocoPqYPWAfr0gWYiKXDw4TvLpvrdnLDmLI?= =?us-ascii?q?n+1sZpgKi+6bWyzqTy14jqUyDD5RtU+QW/oDCRXWb3j5jWpHtgyiI+ND8HPmYr?= =?us-ascii?q?CD2KpaRfYWAopNc/2eRdvUY/ZeKCk0lmZRBOHpR9TBq/4c1VXSQCNNC6DV8HWG?= =?us-ascii?q?RVOSB/mbwCjmG44Sut5w8iwl5t7dgAdpHKnSebWSvTij9si/linLl/fZUzwVak?= =?us-ascii?q?sxh6orCmSHwVEUMGgOBtcUkFvgTq6JewBH03d/2rEm4AMFZAkmCi4m6XZRhvvo?= =?us-ascii?q?X5QAEVM=3D?= X-IPAS-Result: =?us-ascii?q?A2CaAQBi6nVZ/wHyM5BdGgEBAQECAQEBAQgBAQEBFQEBAQE?= =?us-ascii?q?CAQEBAQgBAQEBgywDkHeQc6FmVwEBAQEBAQEBAgFqKIIzJAGCQAEBAQECAQECI?= =?us-ascii?q?AQLAUYDAgEJAQEIAg0LAgIiBAICAwFTBgEXiiIIA5FgnWSBbDoiAosNAQEBBwE?= =?us-ascii?q?BAQEBI4ELgh2DTYFhgySBPAGGQYJhAQSfTpQeggyFUINEKIZvSJUcVz9LMSEIG?= =?us-ascii?q?xWFXAwQgWmKVAMBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 24 Jul 2017 12:42:13 +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 v6OCf7sw029661; Mon, 24 Jul 2017 08:41:21 -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 v6OCPTbW006630 for ; Mon, 24 Jul 2017 08:25:29 -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 v6OCPSih022149 for ; Mon, 24 Jul 2017 08:25:28 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1BAAAAg5nVZl3MVGNZdGwEBAQMBAQEJA?= =?us-ascii?q?QEBg1eQB3OQc5YFghKFRwKEBj8YAQIBAQEBAQEBEwEBAQEBBhgGhW8BAQICASM?= =?us-ascii?q?EUgULCRoCAiYCAlcGAYo5CAORcZ1kgWw6izEBAQEBBgEBAQEBI4ELgh2DTYFhh?= =?us-ascii?q?GABhkGCYQEEn06UHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpilcBAQE?= X-IPAS-Result: =?us-ascii?q?A1BAAAAg5nVZl3MVGNZdGwEBAQMBAQEJAQEBg1eQB3OQc5Y?= =?us-ascii?q?FghKFRwKEBj8YAQIBAQEBAQEBEwEBAQEBBhgGhW8BAQICASMEUgULCRoCAiYCA?= =?us-ascii?q?lcGAYo5CAORcZ1kgWw6izEBAQEBBgEBAQEBI4ELgh2DTYFhhGABhkGCYQEEn06?= =?us-ascii?q?UHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpilcBAQE?= X-IronPort-AV: E=Sophos;i="5.40,406,1496116800"; d="scan'208";a="33587" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 24 Jul 2017 08:25:28 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3A+f1hmBBYZx4r5TKumVfLUyQJP3N1i/DPJgcQr6Af?= =?us-ascii?q?oPdwSPvyocbcNUDSrc9gkEXOFd2CrakV26yL6Ou9ASQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5Yr5+NhW7oAveusQWnYdpN7o8xAbOrnZUYe?= =?us-ascii?q?pd2HlmJUiUnxby58ew+IBs/iFNsP8/9MBOTLv3cb0gQbNXEDopPWY15Nb2tRbY?= =?us-ascii?q?VguA+mEcUmQNnRVWBQXO8Qz3UY3wsiv+sep9xTWaMMjrRr06RTiu86FmQwLzhS?= =?us-ascii?q?wZKzA27n3Yis1ojKJavh2hoQB/w5XJa42RLfZyY7/Rcc8fSWdHQ81fVTFOApmk?= =?us-ascii?q?YoUSDOQPPfhWoYf/qFsAsRSxCgaiCfjzyj9RnHL6wbE23/gjHAzAwQcuH8gOsH?= =?us-ascii?q?PRrNjtLqkdS+e1zK3PzT7ec/5Zwiny6I7Jchs8pvyMRah/ftHPxkkpFgPIlU+Q?= =?us-ascii?q?ppL4MDOVzOsNr3KX4PZnVeKqkmMqrRx6rDu3xso0lIXFm40Yxkra+Sh22oo5O8?= =?us-ascii?q?C0RFRmbdK5EJZcrz+WO5dyT884Xm1ltjg2xqcbtZO4ciUG0ooryh3ZZveaaYaH?= =?us-ascii?q?+AjjW/yUITpghHJqZra/hxGq/Ei9yu38V8203EtOoypdiNbAq3AA2wbN5ceZT/?= =?us-ascii?q?t95Uih1SyK1w/J6+FEJVo4la/aK54l2rIwl5wTvlrfHiLuhkn6kaCbel869uWn?= =?us-ascii?q?8ejrfKjqqoWBO4NpigzyKqEulda+AeQ8PAgORW+b+eGk2b3750L2W6tFjvs3kq?= =?us-ascii?q?TCqpDVO9kUpq6jDA9JyIos9xG/DzK+3NQCgXYHNE5FeA6Aj4XxIFHBPvT4Dfa5?= =?us-ascii?q?g1SxnzZm3OzGP739DZXNKXjPirHhfa1n5EJGxwozys5ftNpoDeQ5Ke/3Emr2s8?= =?us-ascii?q?bVRkshOhGw6/7uFdE404QZQ2/JCaicZueat1KU6u8xC/eDaZVTuzvnLfUhofn0?= =?us-ascii?q?giwXg1gYKJGg2p8QIFmyE/JnaxGBaHDhhNYpC2oGvgMiCuftjQvRAnZoe3+uUv?= =?us-ascii?q?dktXkAA4W8ANKGH9j1jQ=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DDAADz5XVZl3MVGNZdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgyyQepBzmBeFRwKEBlcBAQEBAQEBAQIBEgEBAQEBBhgGV4IzJAG?= =?us-ascii?q?CQAEBAgIBIwRSBQsJGgICJgICVwYBijkIA5F2nWSBbDqLMQEBAQEGAQEBAQEjg?= =?us-ascii?q?QuCHYNNgWGEYAGGQYJhAQSfTpQeggyFUINEhxdIlRyBFksxIQgbFYVcDAQMgWm?= =?us-ascii?q?KVwEBAQ?= X-IPAS-Result: =?us-ascii?q?A0DDAADz5XVZl3MVGNZdHAEBBAEBCgEBFwEBBAEBCgEBgyy?= =?us-ascii?q?QepBzmBeFRwKEBlcBAQEBAQEBAQIBEgEBAQEBBhgGV4IzJAGCQAEBAgIBIwRSB?= =?us-ascii?q?QsJGgICJgICVwYBijkIA5F2nWSBbDqLMQEBAQEGAQEBAQEjgQuCHYNNgWGEYAG?= =?us-ascii?q?GQYJhAQSfTpQeggyFUINEhxdIlRyBFksxIQgbFYVcDAQMgWmKVwEBAQ?= X-IronPort-AV: E=Sophos;i="5.40,406,1496102400"; d="scan'208";a="351116" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from uhil19pa15.eemsg.mail.mil ([214.24.21.115]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 24 Jul 2017 12:25:25 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;06b774f8-860c-46d3-8d51-5dd132b6752c Authentication-Results: uhil19pa14.eemsg.mail.mil; dkim=neutral (message not signed) header.i=none X-EEMSG-check-008: 222108453|UHIL19PA14_EEMSG_MP12.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: A0CzAAAS5XVZhxy3hNFdHAEBBAEBCgEBg1eQB3OQc5YFghKFRwKEBj8YAQIBAQEBAQEBEwEBAQoLCQgoL4UYAQEBAQIBIwQLAUYFCwkCGAICJgICVwYBijkIkgOdZIFsOosxAQEBAQYBAQEBASOBC4Idg02BYYMkgTwBhkGCYQEEn06UHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpPooZAQEB X-IPAS-Result: A0CzAAAS5XVZhxy3hNFdHAEBBAEBCgEBg1eQB3OQc5YFghKFRwKEBj8YAQIBAQEBAQEBEwEBAQoLCQgoL4UYAQEBAQIBIwQLAUYFCwkCGAICJgICVwYBijkIkgOdZIFsOosxAQEBAQYBAQEBASOBC4Idg02BYYMkgTwBhkGCYQEEn06UHoIMhVCDRIcXSJUcH3dLMSEIGxWFXAwEDIFpPooZAQEB Received: from mx1.redhat.com ([209.132.183.28]) by uhil19pa14.eemsg.mail.mil with ESMTP; 24 Jul 2017 12:25:24 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 59DD77F403; Mon, 24 Jul 2017 12:25:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 59DD77F403 DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 59DD77F403 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 5178068D20; Mon, 24 Jul 2017 12:25:18 +0000 (UTC) Message-ID: <1500899117.2458.2.camel@redhat.com> X-EEMSG-check-009: 444-444 From: Paolo Abeni To: Paul Moore , netdev@vger.kernel.org Date: Mon, 24 Jul 2017 14:25:17 +0200 In-Reply-To: References: Mime-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 24 Jul 2017 12:25:19 +0000 (UTC) X-MIME-Autoconverted: from quoted-printable to 8bit by prometheus.infosec.tycho.ncsc.mil id v6OCPTbW006630 X-Mailman-Approved-At: Mon, 24 Jul 2017 08:41:06 -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: selinux@tycho.nsa.gov Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Hi, On Fri, 2017-07-21 at 18:19 -0400, Paul Moore wrote: > I've been seeing a SELinux regression with IP_PASSSEC on the v4.13-rcX > kernels and finally tracked the problem down to the > skb_release_head_state() call in __udp_queue_rcv_skb(). Looking at > the code and the git log it would appear that the likely culprit is > 0a463c78d25b ("udp: avoid a cache miss on dequeue > "); it looks similar to IP option problem fixed in 0ddf3fb2c43d2. Thank you for the report! My bad, I completely missed that code path. > From a SELinux/IP_PASSSEC point of view we need access to the skb->sp > pointer to examine the SAs. I'm posting this here without a patch > because it isn't clear to me how you would like to fix the problem; my > initial thought would be to simply make the skb_release_head_state() > conditional on the skb->sp pointer, much like the IP options fix, but > I'm not sure if you have a more clever idea. Unfortunately explicitly checking skb->sp at skb free time will defeat completely the intended optimization. To preserve it, something like the following patch is required, could you please test it in your environment? Such patch is still prone to a kind of race, as only UDP packets enqueued to the UDP socket after the setsockopt() will carry the relevant cmsg info. e.g. with the following event sequence: setsockopt(...,IP_CMSG_PASSSEC) recvmsg(...); the ancillary message data will not include the IP_CMSG_PASSSEC, while kernel pre 0a463c78d25b will provide it. Do you think such behavior will be acceptable? If not, I fear a revert will be needed. Cheers, Paolo diff --git a/include/net/udp.h b/include/net/udp.h index 972ce4b..f109126 100644 --- a/include/net/udp.h +++ b/include/net/udp.h @@ -319,19 +319,24 @@ struct udp_dev_scratch {   bool csum_unnecessary;  };   +static inline struct udp_dev_scratch* udp_skb_scratch(struct sk_buff *skb) +{ + return (struct udp_dev_scratch *)&skb->dev_scratch; +} +  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..582c13e 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1163,32 +1163,47 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,   return ret;  }   +#define UDP_SKB_IS_STATELESS 0x80000000 +  #if BITS_PER_LONG == 64  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->len = skb->len;   scratch->csum_unnecessary = !!skb_csum_unnecessary(skb);   scratch->is_linear = !skb_is_nonlinear(skb); + if (likely(!skb->_skb_refdst)) + scratch->truesize |= UDP_SKB_IS_STATELESS;  }    static int udp_skb_truesize(struct sk_buff *skb)  { - return ((struct udp_dev_scratch *)&skb->dev_scratch)->truesize; + return udp_skb_scratch(skb)->truesize & ~UDP_SKB_IS_STATELESS; +} + +static bool udp_skb_has_head_state(struct sk_buff *skb) +{ + return !(udp_skb_scratch(skb)->truesize & UDP_SKB_IS_STATELESS);  }  #else  static void udp_set_dev_scratch(struct sk_buff *skb)  {   skb->dev_scratch = skb->truesize; + if (likely(!skb->_skb_refdst)) + scratch->dev_scratch |= UDP_SKB_IS_STATELESS;  }    static int udp_skb_truesize(struct sk_buff *skb)  { - return skb->dev_scratch; + return skb->dev_scratch & ~UDP_SKB_IS_STATELESS; +} + +static bool udp_skb_has_head_state(struct sk_buff *skb) +{ + return !(skb->dev_scratch & UDP_SKB_IS_STATELESS);  }  #endif   @@ -1388,10 +1403,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 +1799,12 @@ 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 && +            !(inet_sk(sk)->cmsg_flags & IP_CMSG_PASSSEC)))   skb_release_head_state(skb);     rc = __udp_enqueue_schedule_skb(sk, skb);