From patchwork Wed May 17 20:51:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Iooss X-Patchwork-Id: 9731889 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 CC135600CC for ; Wed, 17 May 2017 20:53:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92A97287D6 for ; Wed, 17 May 2017 20:53:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 85C20287ED; Wed, 17 May 2017 20:53:29 +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 emsm-gh1-uea11.nsa.gov (emsm-gh1-uea11.nsa.gov [8.44.101.9]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B4EAA287D6 for ; Wed, 17 May 2017 20:53:28 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,355,1491264000"; d="scan'208";a="5882040" IronPort-PHdr: =?us-ascii?q?9a23=3AIW/3PhO+HRJtRJjfyA8l6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0LP34psbcNUDSrc9gkEXOFd2CrakV1KyP7Ou5BDVIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbF/IA+roQjTucUanItvJrsswRbVv3VEfP?= =?us-ascii?q?hby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPXw7683trhnD?= =?us-ascii?q?UBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RDqv47t3RBLulS?= =?us-ascii?q?wIOSQ58GXKgcJuiqxVrg+qqxhmz4LJfI2ZMfxzdb7fc9wHX2pMRsZfWTJcDI2y?= =?us-ascii?q?bIUBCPIBMORFo4TzuVQOtgCzCRWwCO711jNFnGP60bE83u88EQ/GxgsgH9cWvX?= =?us-ascii?q?rMrdX6KKASUeSvw6nT0D7NbPRW2TDm6IjTbxsspveMXbNsfsrWzUkgDRjFgk+R?= =?us-ascii?q?qYziODOVzf8NvnOe7+dvWuOjkWknqxt+ojW2wMonl4rHhpoNx1zZ+ih0z5w5KN?= =?us-ascii?q?2lREJhf9KpH4VcuzuHO4duQc4uXntktSc7x7EcpJK3YjQGxI45yxLDafGKdZWD?= =?us-ascii?q?7Aj5W+aLOzh4gWpoeLe4hxmv70et0vb8Vsyo0FZSqSpFj8XMumgN1xPN7siHTe?= =?us-ascii?q?Nw/lu71jaV1gDT9/pELVoolavbN5EhwrkwmoAVsUvfBS/5hF/6jKqXdkUg4uSo?= =?us-ascii?q?6uLnbav6ppKEKoN5hQ7zPr4ul8CiG+g0LAcDU3aB9eihzLHj+Ff2QLROjv04iK?= =?us-ascii?q?nZt5XaKNwApqGnBw9V04Aj6wuwDju/y9sYmmQHLFRZdx2ZlIjkIE3OIfDkAve/?= =?us-ascii?q?hFSgijFrx+vcMbH7DZXNKWbDnK/7fblh805c1BYzzddH6pJWDbEBJuj8WlPxtN?= =?us-ascii?q?PCCB80KA60w+HhCNV4zIweQn6PDbGDMKPJq1OI4fgvI+aUbo8PpDn9M+Ql5+Lp?= =?us-ascii?q?jXIhm18df7Om0ocUaHCjGfRmJUSZYWT3j9cPFWcKowU/Q/f3iF2ETT5Temy+X6?= =?us-ascii?q?Um5jE0EIimF5vMRpixgLyd2ye2BoVWaX5dBV+SF3fodpmEW/AXZSKTPMBujCIL?= =?us-ascii?q?WaKmS4872hGkrBX6xKZ/LurI5i0Ysoru28Vy5+3VkxE96CJ7D8Cc02yWVW57gH?= =?us-ascii?q?kIRzgs0KB4u0x9xU+J0bJkjPxACdxT+/RJXx8nOp7A1eN6Ecv/VR7GfteMVFmp?= =?us-ascii?q?WM6mAS0rQtI33dAOf153G8++gRDbwyqqH7gVmqSKBJwy7qLTwXzxKNh4y3nYyK?= =?us-ascii?q?khlVknT9BINW2+mKF/8Q3TCJTIk0WdjKmqcqsd0DTK9GeZwmqEpFtYXxJoUaXZ?= =?us-ascii?q?QXAfYVPbrNT450PFSb+jErEnMg9Yxc6DLKtGcNvpgk9cRPfgOdTefXy+l322BR?= =?us-ascii?q?mW2rOGdJDqdHkF3CXBFEgElBge8mieNQckHCehonneASd2FV31eUPs8PJ+qGu/?= =?us-ascii?q?TkAu0w6FcVdt172v+h4anfacUe8c3qoYuCc9rDV5BFi839PSC9qFuQVhZr5RYd?= =?us-ascii?q?0j71ha0mLZrRZyPoS6L6BlhF4RbRh4v1/02xVwEIVAntAgrGk2wwpqNaKYzFRB?= =?us-ascii?q?eiuW3ZDqILLXLHX9/BG0a6PN31HeyNeW9r4U6PU2sFXvpgapFlAt839/ydlaz2?= =?us-ascii?q?Oc5onWDAoVSZ/xUVw49xt9p7HHeSQ95Jnb1X5rMampqDPC3MgpBOQ9wBa6Y9hf?= =?us-ascii?q?KL+EFBP1E8ACHcehNfYqm1m3YRIeJ+1d7rI7P8a8e/uBwq6rM/5qnCi6gmRf/I?= =?us-ascii?q?B9zkWM+jJgReHS25YK3eqY3heHVjf7l1qhqdz4mYFaajEUAmq/yDLrCJRXZqJs?= =?us-ascii?q?YYYBEX2uLNGvxtVim57tXGZV9EWtB1Mc38+pYgaSYkfm3Q1W0kQWr3mnljG+zz?= =?us-ascii?q?BulTEmsLaf1jTUw+v+bBoHJnJLRG56gFbiO4e0i8waU1aybwgyjxal+1j1x7JA?= =?us-ascii?q?q6RiKmnfW0BIfzL5L2t6SKu/qqKCY9JT6JMvqShXTPmzbk2bSrHnpxsXyD/sH2?= =?us-ascii?q?xbxD8nbT6qoYn5kwZ8iG2DMHZ5tGDZdt1oxRfD+NzcQuZc3iQHRCZklTnXAUK8?= =?us-ascii?q?M8O18tWUkJfDtO++WnmlVp1Sdynk15mAtCyh6W1tGx2/kOi5msf7HggizS/7y9?= =?us-ascii?q?5qWD3MrBb9eYnry722Mfl5cUlsBV/87dd6G45ln4srnJEQ2H4ahpSJ8noci2vz?= =?us-ascii?q?N8tU2b7mZnoXWTEL28LV4BTi2EB7NHKJwIb5VnGDzct7e9a6ZW0X1zkm78BXFK?= =?us-ascii?q?iU96ZInSxvolq3tQjRe+Ryni8Byfsy734Xm/kJtxAwziWZGLwdB1NUMjfrlxSM?= =?us-ascii?q?89C+q6NXaX2qcbSs0kp+msyuAKuEog5CRHbzYo0iEjNo7sVjLFLM12X+6oL6d9?= =?us-ascii?q?nWdtIerR6UnAnGj+hOLpI+iOYKiTBgOWLnsn0v0/Q7ggB23ZGmoIiHLH1g/Lqj?= =?us-ascii?q?DR5FMj36edsT9SvrjaZCgMmWxZuiHoh6GjoVRpvoVuikECkVtfT6LQaBDCMzqn?= =?us-ascii?q?mcGbrFEg+Q9l1qr3TRHJC3L3uXPmUWzc1+RBmBI0xSmB4UXDMnkZMiCACqwtHu?= =?us-ascii?q?cEdj6jAX+FH4tgNGyvh0OBnnTmffuACoZy8sSJeFMRpW6hpP6FvUMcyC7uN/Bi?= =?us-ascii?q?9Y8YenrACXLWybfQtIB3kTWkOYH1DjIqWu5d7Y/uibBuu+K+XBbK6LqexZWfeI?= =?us-ascii?q?y4yg0pd6/zaMMcWPO2dtA+c92kVdQXBzA97ZlCkXSywLiyLNaNaWpBmm9S1xss?= =?us-ascii?q?C/9/HrVRnh5YSRFrRSNs9v9AqugaeZMO6Qhjh2JipE1p8Wwn/I0rcf1kYIiy5y?= =?us-ascii?q?bzmtDagAtSnVQaLKgKNWAQQXayZpO8tM6KI93hJANtTHhdPwzLJ4ieQ1C1hdX1?= =?us-ascii?q?z7hs6pfdAKI326NF7fCkaLLqqJKiDQw87tZ6O8VbpQjP5PuhKqpTmbFlXvPjOZ?= =?us-ascii?q?lznmTxqvK/1DjDmHPBxCv4GwahBtCXL5Q9L+ch22K9F3jTwswb0vmnPKO28cMT?= =?us-ascii?q?5mfENLsrKQ7DlXgvFlF2xG9HplIvGOmzyF4OnANpYWrfxrDzxvmO1B53g6z7pV?= =?us-ascii?q?7DpYRPxugifStcBhrE28numU1DVnVBtOqjBWhIOEpkhtJaXY9oNdWXbf5h4M43?= =?us-ascii?q?+fCwgRp9tiDN3joadQysLAlKjrMjdN78rU/dcAB8jTMM+HNnshMR7tGDHKFwsI?= =?us-ascii?q?ViSkOn/Fh0xaiv2S8WeVrpcioJj2hJUOUqNbVEAyFv4CEUtlHdMCIJBxXj4/jL?= =?us-ascii?q?GUktUH5XukoxnXXslauYrHVv2KC/X1NDmZlaVEZwcPwb7gN4sTOZf021J8ZVRh?= =?us-ascii?q?m4TKA1TfXdZIoiJ7bw80pF5C8H9xT2Ep3ELlcAyt6mcJFfGohh42lhd+YeM1+T?= =?us-ascii?q?fw5Fc3I0DGpDE3kEgwh9rlhyuecCT2LKiuXoFbEDb7t080MpznWQl1dhGykVZi?= =?us-ascii?q?NDjaW7Jbl6FgenxziA/ApZtPHuZRTatabxAKwfGafPYo0VNHqiW730BH4/DFCZ?= =?us-ascii?q?hjlAcwd56jsW5A0Rp5bNEpPazQOLZJzl9Ii6KUoCCozf4+zxUEJ0kR8GOfYzUH?= =?us-ascii?q?uE0SNrY7ICqo8PRs6RaclDpDYmQMUeQlou5y/EMnJ+uA1z7g06JEKk2pKuOQNb?= =?us-ascii?q?2Zu2ndms6TWV4/zFkIl1NC/bl4yscsbVabV101zLuQCxQINdDOKQdLYMpO7HLT?= =?us-ascii?q?ZzqBsf3RwZJpOIWwDv3nTfSQu6kOjUKkBhwmH5oX48QaBJas01zYLd39I7IfzR?= =?us-ascii?q?Ut+QLrK0+fDPhQZBKLlzQHosG4zJNt24lSOC0dC31nMSqr/rbXuhMqgP2bUdcy?= =?us-ascii?q?ZXcaRJULNnQ3Wc29gCNZsHJADCSt3uIe0giC4Cf2pj7MAznkc9pjePCUaAt3CN?= =?us-ascii?q?6o/TU/8q62iUPY85jFO276MtFitcPV5uMBu5aLEfVUQqdhs03EgYlXW2SqU3LT?= =?us-ascii?q?Ed6yP5X/dpUjbdnzCna8Tlyzlik4T9nvM9a3L6iJgAboRYBOvImdwj8jKde3Fi?= =?us-ascii?q?sCFBdou+ED+KV8aBUAY5ohYR/nrQI+N7C/IAqD3dWuRH6tJidMQ/lZ0+q6e6Rd?= =?us-ascii?q?zzAwYe+i1HsgUpY6wvGr8U4MQZEKiQ3exfajZoRFTCfzG3xcdB/UqiYjkWhuKP?= =?us-ascii?q?oyyP8lwBzUqVkcLyyLdOtxZWxLpdEzH1WSIWltB2o5QF+dg4zD4hKs378M/itd?= =?us-ascii?q?mcpU3vNfsHTkuJ/Qfi6sUrSxqZrJqyogccQmo6ppPIP5JsuGtY/RkSLHQ5nVsg?= =?us-ascii?q?yFVim6F/xAldVLOy1YQeNHmWc8NcwIpIpN80wxWdkiJ7ZXEqkjuqiqaSZ4DS4V?= =?us-ascii?q?1SIWTJ2P3DoZj+imxrTaiAmfcI45MBMeqpVDgsERUylsYiMRvKWjTZnZl3eYSm?= =?us-ascii?q?gXJwce9R5M5AQBloBsfuDl547ITIRUxTBPvvx6SDfGGJ5z+lTnTWGWhET3R++6?= =?us-ascii?q?k+y1xw5Syuzj0sUDUh5lFUdd3/pWllcvKLxvN6YQvJTFvSOTeEzmu2LtzO+mJF?= =?us-ascii?q?hPxs3Oa133EpbKtWrmXi0b430USpdFyGvDGpQKjwp5dKErqU1WII+8YEb+4Ccr?= =?us-ascii?q?yp91H7miT8+r2UgqrXIHRyesHNpBD+BmsF3XWD15bZCkso/lO5BITm9W5pKdt0?= =?us-ascii?q?9TkF9xPC6h1ZpcN8ZN7yYCXTRVvTqdvNqySMhC2cBsDJ8BOdZ/tGnjF6xaIpSR?= =?us-ascii?q?pGc2urP3wH/D5z88qEu6xCm0G6KgV+JZ+GkeFR8zJ2WQrUkvC+Us/3zX8lDKtV?= =?us-ascii?q?B05PlUCaSVjUV2uzZ9BZFOBjBG1Xy/KFRzVnZGuf1AKKvJa8xcX+UyZRi3NhMk?= =?us-ascii?q?D/4mwkqJ8Vt3nXriYixytwpa+zzGUAUuUykanKvtkyUEqs67IT8aV45IbTI5Yi?= =?us-ascii?q?fZLAKbnDtavApDZ0FvQJ8VGNBF9K8H3YFM5MrNVV6sKT0ZXBxlLg840eBQlVRZ?= =?us-ascii?q?v0WcZC/QFheneujXsh1vY8iRqNCmLO7j8AdAkIPnv/gy978fSH2+hQ2tXdfeop?= =?us-ascii?q?f+tt2NqESDb7r3PPOnYXDfVjjMkQ6/iqo+A5nM4SfTLBJRK4Nmxno8fZjhFWnL?= =?us-ascii?q?MAxdKKIVO0VXSaJ3ZchIr+1Be8Bkf6MJ9rN3CRKcWhPjAoqvo+daLlzLXzTRMz?= =?us-ascii?q?2B8vCjoYLU9bHdU/bvadGMx3ndX6J6JZN66T7lG7j0z4NR5k321epz+U9gT1jJ?= =?us-ascii?q?LTyBpsz7JgwX/MmialfivpoxEDPOG5dwjGDiyVxcd8cMWC2q94kYyIlF53nuT+?= =?us-ascii?q?J4zlLzv/dW97V+7ok3+b9pw9+uJajOMfRarVNnAh+MCwV27JUiHnZwSH1Kb+8M?= =?us-ascii?q?LPfRYb4Zgtrwq+D2EKwX7AOa+/BDZdvAPUHBldG1CiuARhxcgAcBtTkaIxOZ1/?= =?us-ascii?q?Gfn690TdiqpfTl2k03+VezNRgGw65x5Yef5qWHvvfXYAXLwbgCRKfqWtv5rq4w?= =?us-ascii?q?tEOK+f0kiLkOd3R3YwK9CugdUdUdxmP6wqA01i8sFt7DH7b8+P5CS305nyjvm5?= =?us-ascii?q?ZmH1kMHfMUB7WL95xEnmgkg+zZKsEWcqdal2aNDxGkFLECyWSs6ySKPmZomQ3O?= =?us-ascii?q?3Av2QWOo61/6tyl4TjXQz937iEpaSqG3BVtOXyquIUJ4vy6PPAvstNrzp6s16V?= =?us-ascii?q?o7PXH6u92WlWuuIrVXE9f4JNyGLik+vEgXg4EpRtyzxYAbHsKwINEV8Hxlb/ve?= =?us-ascii?q?7WarnzVAo6dBiYre+Nua+u7LHXm6kq2Vt6mNxC1Cyncmp10/7cqgNv7W7d2QX/?= =?us-ascii?q?uoz3oRTzt4uwbZWh61rbrbr0wbOUOVy0rLnY0KMctf3XYmykHn6u8jQMgw9AVF?= =?us-ascii?q?DIrAYe0NpSzrMjvu3Vmfe843VjWZ0zZPBFL6DER3FbMz2GL1s8PFj3HQ9EM0Ro?= =?us-ascii?q?NobUzomQR3D5kkKUIq8FUXxjEDEQ0NZB2AArGnG1nqLYweVUcZcRSHxr+6eqUp?= =?us-ascii?q?0kJv3rOj/ujTbfZzB6AVLPZSkhaOnERHGpIRqaAeW6hze0FH+67YuAfiEJPqX+?= =?us-ascii?q?P8mnouL/K1Td5V8dsDu3sk/Am/WwKq6Y1f4LYDlJCIaqlEbIDOvMB96kdq/jsP?= =?us-ascii?q?eTJNgRdhlRO5UOYcpO/57tjdrpWo9v6kVLwxSOUP6xg0G2N+goPxgFEiu97Yzf?= =?us-ascii?q?tTR5bOiYvh7ABCPWKFtJzd0xlmJuoEM5irc6p493UbOygeIGoDMsGXa/kn7S5i?= =?us-ascii?q?KjfT511eAsMUf9wYIc7NlBtIhU3uRb5c6NDUGkKCC4d0bcAn9XD7yDcv8ZszSu?= =?us-ascii?q?zg8iO5JYjD71FROPNOlD1sm8jepOcJwfrTBi8X4WOaaxRs2SON1Z2NC/f2/eWR?= =?us-ascii?q?x9DZTEsGETQqU4hBJDqD9wunRvC2lJnzUQOb9NXzgJQge0KUXHCxm74FsqlUG+?= =?us-ascii?q?5alir7xiReFpzyh/+Nr9qs8nVYtlldH4Z18xLIA7hQPpR0ORT5ismkXFN8CTHl?= =?us-ascii?q?eMHJbBYuvvSZxvsU6eVkK0T+fZMbIg4Dy7/i5npaVBFuR6DqvlaZRu8RYNpmSO?= =?us-ascii?q?/aoXBV841gNrQPMEKbpJP0sjdCsEo2DxMxaL8ssjxacVHDnAJLVKbypL4AjQwc?= =?us-ascii?q?XdliuUBSHWKwOWQ+5yfIVKlOiKmeFuYV8zWJQaAUVUVnLD9+SQuv2JpyY7upge?= =?us-ascii?q?xHsmRekyN7ofglzztmRB+mti33va4N2DUg+LajtDUaonFFS+qTkijSBVVE1vQK?= =?us-ascii?q?gr8WC2z+5lykfHkDcIzy7aFoJcv87okh+G0zbwgscSMAXOSgDTzwjqyTD4yAtd?= =?us-ascii?q?JTnhiNt9vUYb+0NygSOaw3yQj/SHhlzgjegBFo/XMJQjWn7N8kIp+xNtolxiqs?= =?us-ascii?q?BGjUaVcN4qJPsMvqtl4LTfA7aU1gwGV9yMeHQjACRM3VF2YzkAckdX1OcIhf5h?= =?us-ascii?q?8CC6konjGIs7FH/gEKejjUFJ+o+o3NncjV2Hk9SsxqynjRpq2fiZMgyGdllM9s?= =?us-ascii?q?7i6SpHQScPTVU81yDXj92IdfzffzZvu3veABVoRm1K6tUPkcPcm/4WG2wollWl?= =?us-ascii?q?e5xrQCGFq0KOADxrPcUyarV2KYXeCLfnOXnzY+NE7y5AWnIkcxaMhUs083KvHC?= =?us-ascii?q?iYJElw39TbN0QT2dpV3bzG0jKeMacAY2uIa7ewMUV+MRYumcJfQ0wPIgElcMaG?= =?us-ascii?q?XJHSRuAe+srVGthJR7O2ln4UjifeTt8wXmPcCOGhkFDYHarYB++figSmKHJ3Bg?= =?us-ascii?q?0AV4PFNo+OfHC1Qxquhcfo6UndjRhNR70ukFeuxvMSInud4TnYRj5peS0MuQdx?= =?us-ascii?q?He0IryL8nPoveEG/3f01gqemZCX7UCfwz14Zk6M8UiW73XGrtZoQgcBbYkT5M8?= =?us-ascii?q?LWvx87t0LAxreA7LeLu0mtXqpv6MZpZMqX/Z8FYwLCbEuxId0fG1TA17b5Wvh3?= =?us-ascii?q?rsOpAwQixOo8dqCht8E4tFA9kAoBa/A56IhKG7jMe8+k1iu+8QsKr/Fu7F2c+8?= =?us-ascii?q?34VwQ5ha/1KEMCzWBKlxjURvlv6yjevY0pntFcPifssJVO9/QmHbcbLGBoG/JS?= =?us-ascii?q?iVOsLgek5J76Kc0KhnXRqPfiz5WbSJtDG8PvV+/Uo70pB4fPbUzDE167Hb2d3y?= =?us-ascii?q?Z3xUpyu6qX6JNYBf7EDRBeHFXhJbU/yF8GF/Ea0Qd4v0+/8EMcY+z9iE/wlz8D?= =?us-ascii?q?NC3dOeI6e/qk/M20R7dY/ULUfu1Cg5RYkKLwqlMUQymW/WsG/QAXdCIci+L8li?= =?us-ascii?q?ntKVAQfw50l+g20tYXRBGmXwT9eLJWcbw96+ZBGN9A9TCtYMhfK4eU45tq20Tu?= =?us-ascii?q?llIYtFmeSstLoZldZpKifPRNVVPi3KK792JDVRBP3VpFc0eh4Er6Q1WoAtaJiM?= =?us-ascii?q?OkwHM0CAxjjpwAvf1030a9ys1KGUICYZ8nVH06jJ0T5SqAmlofyZmNHsUKjFbJ?= =?us-ascii?q?HqW/7fKCUlWSuBSjQoEEam51OktuEavPqcO2gfuVEUYj+IBA4VuK9vscDaDnXP?= =?us-ascii?q?lu17YJ0KmPeaVjjySC19k6oyHDxLtUGXQ/cYEwnZdXrhj3RduAC4If9M533lZa?= =?us-ascii?q?WCxqVJQ+wWHpdMcvqBTtvDd/BeIisnmzQaNeunYd3Tsaw50lPJTGseFanE7lue?= =?us-ascii?q?Q1CKQq/U+zW+RogRvo4pqgI069nQmWlxCK2OMLGB9BC09YvtqieTvunXTSEMZE?= =?us-ascii?q?sum6pWBmiKxx1JMycFDNYOo2noHr7GYFxDgiF6wdly0gMBLVwgGkZl1WdbybPk?= =?us-ascii?q?QsA=3D?= X-IPAS-Result: =?us-ascii?q?A2GvAwAjtxxZ/wHyM5BcHAEBBAEBCgEBFwEBBAEBCgEBgwE?= =?us-ascii?q?pgW6OeKILhmcoi2RXAQEBAQEBAQECAQJoKIIzJIJJAiRVAwkCFzEIAwFsBYhPg?= =?us-ascii?q?U8EAa5rOiYCg2mHJIZfgV6NcAWeEIIQkH6LJ4ZTSJN+WIEKLyAuToR3HIFldIh?= =?us-ascii?q?nAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 17 May 2017 20:53:27 +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 v4HKrQOc024189; Wed, 17 May 2017 16:53:26 -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 v4HKr1CK052785 for ; Wed, 17 May 2017 16:53:01 -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 v4HKr0aO023924 for ; Wed, 17 May 2017 16:53:00 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1BgAwDUtxxZhyIeaIFcHgYMgyyCF454oguHCotpVwECAQEBAQECEwEBAQoLCQgohXWCI4hUgU8EAZx2kXc6hBGHJIZfgV6NcAWeEIIQkH6RekiTfoFhLyAuToQnAQsBQxyBZXSIZwEBAQ X-IPAS-Result: A1BgAwDUtxxZhyIeaIFcHgYMgyyCF454oguHCotpVwECAQEBAQECEwEBAQoLCQgohXWCI4hUgU8EAZx2kXc6hBGHJIZfgV6NcAWeEIIQkH6RekiTfoFhLyAuToQnAQsBQxyBZXSIZwEBAQ X-IronPort-AV: E=Sophos;i="5.38,355,1491278400"; d="scan'208";a="6056650" 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; 17 May 2017 16:52:25 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AIe7gaxEYCIPkxhADi6d3HZ1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ78r8WwAkXT6L1XgUPTWs2DsrQf2rWQ6v+rADFZqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLdwIRmssAnctMYajZZiJ6os1xDEvmZGd+?= =?us-ascii?q?NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG4p6sLrswLD?= =?us-ascii?q?TRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Uims4qt3VBPljj?= =?us-ascii?q?oMOjgk+2/Vl8NwlrpWrhK/qRJizYDaY4abOeFicq/BZ94WWXBMUtpNWyFHH4iy?= =?us-ascii?q?b5EPD+0EPetAt4f9pkcBrRy6BQa2H+Pk1zxGhnjx3a0hyOQqDAbL3AohH90St3?= =?us-ascii?q?TUqM/6NLwIXeC0y6nIyi7Db+hN1Df454XJfQotofaWXbJ/aMfcz1QkGQDdjliI?= =?us-ascii?q?tIDpITeY2v4Qv2SH4OdsT+yih3I9pwx/rTWj3sQhhpTTio8Uy13I7zh1zJgpKd?= =?us-ascii?q?GiVkJ3fdypHZ1NvC+ALYR2WNktQ2RwtSY61LIGvZm7cTAPyJUo2hLTceSHc4+M?= =?us-ascii?q?4hPjSOaePyt3hHJjeLK+nhay7Favxvf7Vsmu31ZGtitFkt/SuXARzxHf99aLR/?= =?us-ascii?q?9n8ku8xTqC2Brf5+9YLUwum6fWJIYtwrsqmZoStUTDEDX2mELzjKKOa0sq5vWm?= =?us-ascii?q?5/j/b7vhup+cL4l0hxnxP6svgsG/BOs1MwcUU2ic4+S826Xu/Uv4QLpWif02lr?= =?us-ascii?q?PWsIvAKcQaoa65BBRV0p045hmkCDemzdIYkmUZI1JeYh6HiofkOl7ULPD/F/e/?= =?us-ascii?q?jEygkC13yPDeIr3hHpLNI2DYkLj/ebZ96khcyBc8zN1E+5JVCq0OIPL0WkPrst?= =?us-ascii?q?zYFQU2Pxa7w+bgFtUunr8ZDHmCBq6fLbP6rU6D5uVpJfKFIoASpmXTMf8gstjv?= =?us-ascii?q?hng9kERVXK6uxoBfPHa5FfNiKl7fYH3rmcwpFDsa+A0kQ7q52xW5TTdPaiPqDO?= =?us-ascii?q?oH7TYhBdf+AA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0FTAwAjtxxZhyIeaIFcHgYMGQYMgwGCF?= =?us-ascii?q?454oguHCotpVwEBAQEBAQEBAgECEAEBAQoLCQgoL4IzIoJxgiOIVIFPBAGcdJF?= =?us-ascii?q?3OoQRhySGX4FejXAFnhCCEJB+kXpIk36BYi8gLk6EJwELAUMcgWV0iGcBAQE?= X-IPAS-Result: =?us-ascii?q?A0FTAwAjtxxZhyIeaIFcHgYMGQYMgwGCF454oguHCotpVwE?= =?us-ascii?q?BAQEBAQEBAgECEAEBAQoLCQgoL4IzIoJxgiOIVIFPBAGcdJF3OoQRhySGX4Fej?= =?us-ascii?q?XAFnhCCEJB+kXpIk36BYi8gLk6EJwELAUMcgWV0iGcBAQE?= X-IronPort-AV: E=Sophos;i="5.38,355,1491264000"; d="scan'208";a="5882013" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mx1.polytechnique.org ([129.104.30.34]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 May 2017 20:52:24 +0000 Received: from localhost.localdomain (81-66-120-207.rev.numericable.fr [81.66.120.207]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 82915564753 for ; Wed, 17 May 2017 22:52:22 +0200 (CEST) From: Nicolas Iooss To: selinux@tycho.nsa.gov Subject: [PATCH 1/2] libselinux: rework selabel_subs_init() to avoid use-after-free Date: Wed, 17 May 2017 22:51:45 +0200 Message-Id: <20170517205146.18315-1-nicolas.iooss@m4x.org> X-Mailer: git-send-email 2.13.0 X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Wed May 17 22:52:22 2017 +0200 (CEST)) X-Org-Mail: nicolas.iooss.2010@polytechnique.org X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Security-Enhanced Linux \(SELinux\) mailing list" List-Post: List-Help: Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP In selabel_subs_init(), when digest_add_specfile() fails, the returned value is a pointer to data which has been freed (because label "err" frees variable "sub" which is equals to the returned variable, "list"). Moreover since since commit fd56c5230cea ("Separate out the calling of local subs and dist subs in selabel_sub"), argument "list" of selabel_subs_init() has always been NULL (rec->subs and rec->dist_subs are both initialized to NULL in selabel_open() before selabel_file_init() is called). Drop selabel_file_init()'s "list" argument and free all the list items which have been allocated in this function, when the code encounters an error. Signed-off-by: Nicolas Iooss --- libselinux/src/label.c | 14 +++++++++++--- libselinux/src/label_file.c | 10 ++++------ libselinux/src/label_internal.h | 1 - 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libselinux/src/label.c b/libselinux/src/label.c index 71a273bdeb2a..70f6809ead2f 100644 --- a/libselinux/src/label.c +++ b/libselinux/src/label.c @@ -92,12 +92,11 @@ static char *selabel_sub(struct selabel_sub *ptr, const char *src) } struct selabel_sub *selabel_subs_init(const char *path, - struct selabel_sub *list, - struct selabel_digest *digest) + struct selabel_digest *digest) { char buf[1024]; FILE *cfg = fopen(path, "re"); - struct selabel_sub *sub = NULL; + struct selabel_sub *list = NULL, *sub = NULL; struct stat sb; if (!cfg) @@ -146,6 +145,7 @@ struct selabel_sub *selabel_subs_init(const char *path, sub->slen = strlen(src); sub->next = list; list = sub; + sub = NULL; } if (digest_add_specfile(digest, cfg, NULL, sb.st_size, path) < 0) @@ -158,6 +158,14 @@ err: if (sub) free(sub->src); free(sub); + while (list) { + sub = list->next; + free(list->src); + free(list->dst); + free(list); + list = sub; + } + list = NULL; goto out; } diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c index 0d4029bb3670..3ff759032cc1 100644 --- a/libselinux/src/label_file.c +++ b/libselinux/src/label_file.c @@ -589,17 +589,15 @@ static int init(struct selabel_handle *rec, const struct selinux_opt *opts, if (!path) { rec->dist_subs = selabel_subs_init(selinux_file_context_subs_dist_path(), - rec->dist_subs, rec->digest); + rec->digest); rec->subs = selabel_subs_init(selinux_file_context_subs_path(), - rec->subs, rec->digest); + rec->digest); path = selinux_file_context_path(); } else { snprintf(subs_file, sizeof(subs_file), "%s.subs_dist", path); - rec->dist_subs = selabel_subs_init(subs_file, rec->dist_subs, - rec->digest); + rec->dist_subs = selabel_subs_init(subs_file, rec->digest); snprintf(subs_file, sizeof(subs_file), "%s.subs", path); - rec->subs = selabel_subs_init(subs_file, rec->subs, - rec->digest); + rec->subs = selabel_subs_init(subs_file, rec->digest); } #endif diff --git a/libselinux/src/label_internal.h b/libselinux/src/label_internal.h index 3d7ff7488cf8..b03652ebc477 100644 --- a/libselinux/src/label_internal.h +++ b/libselinux/src/label_internal.h @@ -76,7 +76,6 @@ extern int digest_add_specfile(struct selabel_digest *digest, FILE *fp, extern void digest_gen_hash(struct selabel_digest *digest); extern struct selabel_sub *selabel_subs_init(const char *path, - struct selabel_sub *list, struct selabel_digest *digest); struct selabel_lookup_rec {