From patchwork Mon Nov 28 21:34:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Iooss X-Patchwork-Id: 9450487 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 1350D600CB for ; Mon, 28 Nov 2016 21:36:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0537D28047 for ; Mon, 28 Nov 2016 21:36:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EE2FE2807E; Mon, 28 Nov 2016 21:36:12 +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 (smtp.nsa.gov [8.44.101.9]) (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 95ADB28047 for ; Mon, 28 Nov 2016 21:36:10 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,565,1473120000"; d="scan'208";a="1100295" IronPort-PHdr: =?us-ascii?q?9a23=3Ac909/BakUfmOe8kl/DiFk8r/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoc+/ZR7h7PlgxGXEQZ/co6odzbGH6Oa7BydZvcvJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBu7oR/fu8QXjoduN6k8xxvUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU2/nvXishth6xFphyvqQF0z4rNbI2IKPZye6XQds4YS2VcRMZcTyxPDJ2h?= =?us-ascii?q?YYUBDOQPOv5Yoovgq1YAohSxGQaiC/30yjJTmn/737c33/g7HA3awgAtGc8Fvn?= =?us-ascii?q?TOrNXyMacfSfi7zKjUwjXEa/NZwyz945XLfBAmpvGMRqlwetfWxEkpFgPKklKQ?= =?us-ascii?q?qYj/MDOOzOgNsm+b7+17VeK0kGMnrg58oze1yscrkInJiZsYx1bZ/it62IY4Pc?= =?us-ascii?q?C0RUF0bNK+EJZcqjuWO5V5T888WW1kpT42x74btZKhfSUHyY4rywPBZ/CbaYSE?= =?us-ascii?q?/A7vWeSXLDxlnnxqYqi/iAy38UW4z+38UdS730hSoypel9nMqmgN1xvO6sibUv?= =?us-ascii?q?d9/lmu2TKI1w3L9uFLO1o0lavGK5462LIwipoSvljDHi/xgkn2irOZdl449eSy?= =?us-ascii?q?7uTnY7HmqoedN49ylA7+LrwjltGwDOk3KAQDX3WX9f6i2LDs40H1WqhGguUzkq?= =?us-ascii?q?bDsZDaIcobprS+Aw9Qyosj8AiwDzOn0NQegHkGI0tJdwmAj4j0PVHBPO73Deyk?= =?us-ascii?q?jlSwkDZk2/DGPrr7DpXLNXjMiq3tfbl6605C0AYz18xQ54pICrEdJ/L+QkHxtM?= =?us-ascii?q?bCAR8/LwO0wv3nBc541oMGWGKDG7SZMa3JsVOS4eIvOeaMbpcPuDnhM/gl++Lu?= =?us-ascii?q?jXghlF8eZ6ap3pwXaG2jE/RlOUqZYn3sgsobHWcNpAo+Q/TgiEeeXj5Le3ayQ6?= =?us-ascii?q?U86ykhB427F4fDR56igKaa0SihApJWY3pKCleWEXfnb4+EQesDaDqOIs99lTwJ?= =?us-ascii?q?TbihRJEl1RGqsw/30L5nLvfI+i0fsJLszsJ55+rJlRE97TZ0FdiS03mRT2FomW?= =?us-ascii?q?MFXyQ23K5loUx60VeDzbN1g+deFdxU6fJJVx01NZjGw+x8Fd/yRhrLfs2VR1a+?= =?us-ascii?q?XtWmHTYxQ8o/wtAUZ0Z9B8utjgrY3yexHb8aiaaLC4cp8qLZxXTxINx9y3ne3q?= =?us-ascii?q?k7k1YmWtdPNXGhhqNn6wjcGpPGk0SDmKaubqkTwCnN9GKfwmWUp0FYTBR8UaPb?= =?us-ascii?q?UnADfkHWt8j25lveT7+yDrQqKg1Byc+GKqtOdNLplk5LS+39N9TEZGK9gWCwBQ?= =?us-ascii?q?yHxrmUdorlZ30d3DnBCEgDiw0c4GyJNRQkCSi/rWLfAydjGk7vY0z26+l+tG20?= =?us-ascii?q?TlUuwwGMcUJhy6K/+gQJivyEV/MTwrUEtT8/qzV1AFm9w9XWC8CaqwV9fKVcZt?= =?us-ascii?q?U94Fhc2GLdtgx9OIavL7plhlIEdAR3pUzu3Q1tCopcicgqsG8qzA1qJKKc0VNB?= =?us-ascii?q?bC+Y0YnrOrLJLmny/Rava7PZ21zFy9aW4qYP6PI5q1r/pwGlDEwi/Gt709NNyX?= =?us-ascii?q?uT+o3KDBYOUZL2Sks37R96p7XeYiYj/YPbyXpsMKevvz/ZxtImGPAlxgynf9dF?= =?us-ascii?q?P6OODBXyHNECB8iyNOwqnECkbgoeM+BP8K44Jdmpe+Gd166sOOZggDWmjWJc7Y?= =?us-ascii?q?B4zk6M8S18RfLS05YD3f6YwhONVy3gg1e5rsD3hYdEaCkXHmq70CTrGohRa7Zs?= =?us-ascii?q?fYkVDWeuJ9O4xs9ki57rRXFY6EapB0ka18+xZRqSc1v90BVT1UsJp3yngjC1zz?= =?us-ascii?q?9qnDEvtaqf2jLBw/j4eBoAIG5LS3FojU3wLoisk9AaQE+oYhA3lBuj+En33LZb?= =?us-ascii?q?pKJiIGnTW0tIeTb5L316WKuqqrWCe9JP6I8vsShPSOSze02aSrrmrhQG0iPjA2?= =?us-ascii?q?tfyCk1dz6wvJX1hRt6iHiSLHxrtnrWZdlwxQvD5NzbXfNRxiAJRDR8iTbJHliz?= =?us-ascii?q?Jd+p/cmKmJfZqe2+SnmhWYNJcSnw14+Aryy75XBwARKjgf+zlNrnERI10SDlzd?= =?us-ascii?q?VqUzvHrArkaInxy6u6Kf5nflVvBFLk5cp1AId+kpc3hJEVwnUaiIua8mcAkWfp?= =?us-ascii?q?K9pbwbj+bH0PRTEV39HV/BLp2Ep5LnKG34j5TGmSwtN9Z9mmZWMbwi0978BWB6?= =?us-ascii?q?eO7L1EhTd1ol2joALXf/d9giwdxuc0534Cne4FogwtwTuBAroKB0lXITTslwiU?= =?us-ascii?q?79C5tKhXYXygcby01EVggdChEKuNrRtHVXb/ZJgiATRw4dllP1LUznL/8Ifkd8?= =?us-ascii?q?fMbdgLrB2bjw/Aj/RJKJI2jvcKnzBrOGznsX0g0eE7iRtu3JGhsYedN2pt+bi1?= =?us-ascii?q?AhlCNj36f8kT4C3ijb5CnsaK2ICiBpNhGi8RU5vwVfKlCzwStfX9NwaVDD08pH?= =?us-ascii?q?abGbzFEg+Z9EhmrmjAE5SxO3GQPnkZws1oRAOBK0xHnAAUQDI6k4YhFg+038Pu?= =?us-ascii?q?bkF55jEN5l7/sRZMy/xnOAfhXWvFoweocDg0QoCFLBVK9gFC+1vVMcuG4+1uBC?= =?us-ascii?q?FX4IeurAOXKmOBeQRFFnoJVVaHB1D+JLmh/8PM8+yFBuq4NfTOe6yCqfBZV/eL?= =?us-ascii?q?xZOv1ZFq/zCSOcWTJnNiFeE02lJfXXBlHMTUgy4PRDYJly3XYM6Uugy89zZsrs?= =?us-ascii?q?+l7vTkQg3v6pWUC7dIN9Vg5Qy2i7+ZN+GMnCZ5NSpY1pQUyHDTybgf01kSiyd1?= =?us-ascii?q?ejawD7sPri/NQ7jWmqNNCB4bcSxzPtNS760gxglNJdLbitTt27Figf46EUlFWk?= =?us-ascii?q?L6l8GufcwFPWe9NFbdC0aKMLSJPjrLws7tbaO7U71Qg/1etwestjaDD0/jIjOD?= =?us-ascii?q?miH1VxCoNOFAljubPBtfuY6jdBZiEnLjTNX4ZR24K9J4kTo2wbgoiXzQLm4cLS?= =?us-ascii?q?Jwc0VTob2M9SlYmOlwG3Rd7np5KumJgyWZ7uncKpkIqvZrByN0l+xU4Hsk17tV?= =?us-ascii?q?8CFERPtwmCTMtNJupU+pkvWXwDp9TBVOsipLhJ6MvUh6OKXZ8IVAVmjA/B0T6G?= =?us-ascii?q?WfFQgKp8FlC9D0vKBQ0sbAlKT2KDhY8tLU+dATB8/bKc6dN3ohKxXpEibODAQZ?= =?us-ascii?q?VT6rKX3fh0tFnfGU6HKatJw6p4PvmJoJUb9bSEY6FvUBCkRmHdwOOpF3US04kb?= =?us-ascii?q?SDls4H+WK+rAXNRMVdpp3HTOydAe7xJzmDl7lLexsIzKjjIoQSLI30xktialdi?= =?us-ascii?q?nITQBUXRXcpBoit/YQ8ouE9N6mRxTnUv20L5bQOg+GIcFfmynh4wlwRxf+At9D?= =?us-ascii?q?b37lgtOFXKviwwnFM2mdX/jjCbaCTxI7uoXYFKFyr0sFA8PY7hTAZrbA29gFdk?= =?us-ascii?q?OSzeSLJLlbtgcm5qiBTCtpRTBP5cV6xEYAMQxP2NYfUnz0hcoD29xUBb/evFFY?= =?us-ascii?q?dilAwyfJ6itXJPxR9sbMUvKqzWOKpJyUNQi7mUsSC00+A92ggeJ1wC8GmKYi4H?= =?us-ascii?q?pFQINqU6Jyqv5uFs7QuCmyFdd2gKVvsqpeln9kw7O+Sd1S7g1KRDKk+pPeyFM6?= =?us-ascii?q?yZo3TAldKPQl4ozUMHiU1F/blw0cc+fEuZTFwgzLyUFxsVL8XCMh1VY9BU9HfN?= =?us-ascii?q?YSaEqf/Nzo5tP4WhCuDoSveDtKUOgkOkBgkpGZgM7sQaE5mj10HYNdvoIKQDyR?= =?us-ascii?q?oz+AThPE+FA+hReBKXjDcHpNmyzIN23YlYITEdHWV9MCWs67nKpw8rgOCMU8ws?= =?us-ascii?q?bnccQIQEKmo8WNemlC5Bo3RAED633/oZyAiF8TD8qDrfDCPnYtpievibew1jBM?= =?us-ascii?q?ux+TUl/Ki8kUTX/YnGJ2HmKdRivcfC5vkep5aGF/xbU6Fys0LcmoleQHyqVXTA?= =?us-ascii?q?HMWuKJjxcYYsa8X4CninUlCljTI6UdvxNs63LqeUmQHoWZpUsI6D0T84K8C9EC?= =?us-ascii?q?oTFA1tqOEd+q18fxYDbIAhYR/orQg+MLa/IAiA2NW0X2mtMSdWT+VYzeiiaLxX?= =?us-ascii?q?0issbuu+yHQ+S5E31PS4/lAWS5ELlB7ew+yvZ45EUSj8AnZdYRnApTIll2h9Me?= =?us-ascii?q?Y/2v0/wBXJsVYAMzCLc+hpaHdcsd8lGF2cO2l7BG0jSlCAiorD5xKj0KoJ/ytB?= =?us-ascii?q?hdpU1/NKsGTmtJ/FfD2sQLCrqYnSsyc4d9gpvrB+PJfsIsuDu5LShDrfQ4fMsg?= =?us-ascii?q?edSi61C+JamsRMICJfWPRHhWMlNtYatoda9UUxUcM+J7hOCKYyvLCqdSRrAjIS?= =?us-ascii?q?zSMDUIOAxjMCiP+m27TGjheQbIgiMBscvZVYmNQdSSl2bTgFqa+/TYXZjXGERX?= =?us-ascii?q?YPIAcS6wRM6wYAlo5/fuDl/IrIQoVDyyRTo/5uVCvECIVo/UPhSm6KmVj4VOmh?= =?us-ascii?q?k+ux0ANS1v3sycMUWBt+CUhb3OtWl1coJ6tsK6YMpIHGqDmIel3mvGj10uupOE?= =?us-ascii?q?FRydHId13/FIfEu3DwXTEc+X0VQI9PyWvQFZcJngp4dqkkuktDLJqhekbk6Dwu?= =?us-ascii?q?355pEKWgVcC321Ylqm4LSD2wE9pcDeFqqlHXVSZkY5CqqZXlJ45dTnVW+JKDt1?= =?us-ascii?q?dTiF9tPDKhyZpAN8FN5SYBXDdVoTqHutuyVNZO2c5xD54CJNd/p3f9F71FOJiX?= =?us-ascii?q?v305pKbvxmXf+z8irFew3C+zFLOgT+JF420eHR0kJ3iZqkkqFOYs7nve8lXWvV?= =?us-ascii?q?xu+edUGKSPh11roDlhBpBOGipJ1Xe9IlRzVnZGqf9VKKDIfMFHXvY9ewevOwQg?= =?us-ascii?q?Gv4iwUOJ51t4nXDjYyx9rgFa4TzSXxEoVSkJhbfggT8eqsa5NjIBVp1Hcy4hYD?= =?us-ascii?q?nfKwKHhy9YoQxTa0d0VJAFGtxF4a0U3ZNI/sreTkahMToKXBJ+OQ4k0/dTiEBO?= =?us-ascii?q?vV6EdiDaCAqnaezAsgZrfcuLqs6mMuj59h9dioz7qOA467kDR3q+lA23X9/Rso?= =?us-ascii?q?/8uceWtkaVcKf4NPO8bmHfQDfQihC/mKkrA4PM/yfNLApRM4N6xmY8YZj9FW7L?= =?us-ascii?q?OgxLJ7oAJ0pHT691dMlGr/tBZ89jZaYJ47NiCQyBRhPzAoygtv1GIkzURTTEIC?= =?us-ascii?q?WL6va/rp7L7bzBVejgYdSBx2rdQ61pIJh19CL2G6ru0Y9C4Er5wOlt9kJ9SVjC?= =?us-ascii?q?LS+BsM7tJgQR5MmtbkHipIEmHSvKAJdsl3rg3lxPd8wNTCCx7ZsYzolW5Gz3Se?= =?us-ascii?q?Ji3Uj5qPdS+KV86Ykr/7Bpzt+5JaXIJvRAtk9nGRyUCR909pg2BWh/WmRRYvMQ?= =?us-ascii?q?KPjNfKQWl8buq/vtG6wQ8h2V9PRTacHbKEHZhsm/FjacRARGnAgbrz4aIBGc1/?= =?us-ascii?q?mYlKBqUsulufL22kQ241i5NBIGyq5i5Zuc8KqSuODXdwfRzaQDWqXyQMPzqq8h?= =?us-ascii?q?u0KU5f0hjrIOe2p1YwO9EOcHTc4d2n3gzb02wiIwDsPDBazv9OREV3IjkTLqg4?= =?us-ascii?q?p9EEkOGvMIAbqL+pxTnmE5m+PFMd0WdrpNmn2VGR6lFb8CzmWr6zCMLWlgjRzP?= =?us-ascii?q?3Av8QWSp7F/5tSV4WzfDz8//kkpJUbm6HVtdUDCtOUBmqzOPIArptN3stKQu8E?= =?us-ascii?q?42M3LrtNSRlGugIrxbBcv/K8KAISMsvlIYkIUxRsCz2YAcAde9JMwR8HR+Y/bF?= =?us-ascii?q?5WOkjTJOo6Bdh4XE+sGV4PLXHXu+gKKGt7WB3jdYymI3vVsn8NCvKunO58GWQ/?= =?us-ascii?q?Svz2sRSiN/tBXEXx6ytLPbq0sZOUOV30fMg4wKJstW3WU51k784OgjQdQz9BlA?= =?us-ascii?q?GYbEY/MCpD/zNyXywVmDfd07TC+e3CVLHljtC1l3BLA82H7svMLOjXrQ+VwoRo?= =?us-ascii?q?xrekzimxN2D5s3KVgs6FgRzSoPCw4NZg6HDLuwH0TqMZMEVVQfaRSAxLW6e6Y2?= =?us-ascii?q?0ldpzbyz/+LTdvJzB7YTOflBlAKOm0JbGp0Ou60EXL18Y0Nd9LLQpgX6EIfnXu?= =?us-ascii?q?PmlHQqOv23Q8Ba7dgZuGE/4ga7XBev9ZBD4KsFh5+Sa65Ee5/MvNpm4Et94j4P?= =?us-ascii?q?bCNNigBljxylSeAcuPzj4t/DvZqw8OmuSLoiR+UZ9hgzHWR+jIL8gEs9rtHT1u?= =?us-ascii?q?dcTJDViIvk/QBVOXGKpJrV0xlyKOoJMYKrf6xs93YZKCgEIXIBI96WZ+M74y93?= =?us-ascii?q?PzXZ/0ZCDd8UZdMEIMrNnhhZilHzWL5N8srUAFmYBJloes817mr3xzE18YcmXe?= =?us-ascii?q?b78jC2P43f40tLP/xdkCVmjMjCq/QNwfrOFCgX5mGUaxdvzSOY1ZaNF/bw8P6I?= =?us-ascii?q?yNHVS1MJAC42XJ1AJDqZ4wCnQPS6lInxWAOO9sDzmI4+dF6XRnGpk6QKrKBMEf?= =?us-ascii?q?JHiiX82TReDZ76h/aUs9qq9WtWuUZKEIJt4h3fGKRQJI93ORLmmcm3XkJ8HDfw?= =?us-ascii?q?eNnIdhoyv+qb3uIM4+J4N0viao8UPAkJy7f76XVPSAthVqL2v1ieXeILZ9tmU+?= =?us-ascii?q?nIrnZL5oJ8M6UPJkSSpIT2rjdUr1A7GAApZ6MrrjxBb0XAgQJbVaD1uL4Glwsd?= =?us-ascii?q?XsV0uUBJGW2qPmIx+SDLVaNPjKmeEPYV6CmcTrQSU0V0NSNzWxG12JJue7uvh/?= =?us-ascii?q?xIrmNGnidgoPc30j1mRR28uTbvp6IMwj8g5rC4tCsbtnxBU+qekj3ECVNdw/QW?= =?us-ascii?q?la0cEWrt6USgYHkfa4v/+LhnJdr6+okn+Hk/ZQgjcDAHXeSnECH8laSIApaAsN?= =?us-ascii?q?hEnh6CpN3ObaOvLSgVLrk9ywzsR3Zz0gjahxtp/nEEQjO+4984Pom9P9gqxjaw?= =?us-ascii?q?E2jBaFkM+r9JsNf2tVMTQ+s2bVRhwWt93ciDQi0AX9fPG2EzjggldWpIapRD5g?= =?us-ascii?q?EGF6MwmDaHorFG/h0IYDfTComl+InQnMfQ2Xk6Sddqx37WqbOei5Mv0X1lh8l0?= =?us-ascii?q?4TCUtHQVbezYXNdmAmLv2YdH1ez+e/Ktv/gbSItnzbSsS+MCMsi/9mu1xppqXl?= =?us-ascii?q?WpxrIAEFqlKOUD3KvUUz+5SW2EXuSGa22Mnzc6Mk7x4hmlNV83Z91Jr086NOvN?= =?us-ascii?q?mJhcmxfnUbxqWiWavUXbw3A7MeMGawI2v5+qdBcUQ+4Xe+iRPvMuwPk5CFsQc3?= =?us-ascii?q?/JAzV5BPKsvV6qhoh7NG1q4V/mbuT17gDmLNySFwEcEY7dqp5+4+a6R2yGOX9k?= =?us-ascii?q?wh1/J0x09+DYF1QqqOBTb4yRnd/Lh9Rg0O4FcfhtPTc6ut4JlYJp8ZOU39uScR?= =?us-ascii?q?HN0pbyIsnYovaGDP3bzkQqYn9VX6EYYAP04oU6O8A2W6fXHbRHpxgcArI6QJM5?= =?us-ascii?q?PWfr6K50NB9zchLWZLmsgsnquuKLZpxRp3DM9VI9NyLcuxwfyvyuUwN3dZeqh2?= =?us-ascii?q?/9IJooXDJOs8VtCgd6HItIA84BoRKnA4SVmK6nldC84EZ6u+4WsarqFP/GztO5?= =?us-ascii?q?359+X5JC/0yEIC7RBLV3gkRilumyhfPA3YfqBMP6fdMLTvN7QnLEarDaAoW/MC?= =?us-ascii?q?yBNdzmd05A7bGczKpzUg+NayDhQ6qGqCqkOe1g4UU6zIx4YeXSwCUp77Haw9vy?= =?us-ascii?q?e3pbqzyirXGTMptf60bGBevEXxJbUfCF6npqHbULbYvo8+cDKcciz8aY4wly6j?= =?us-ascii?q?RCzcSEL6+uoE/Q2kJ0a4jbI1Xx2ykjQoQKIwqwMVEqgWDHrnTSGmlcLse+Jclq?= =?us-ascii?q?mtaVAQTn51NtlmE1em5BBm3oSM+VOWgawMK+eBaH9QNSD9YFheG7Y0g4ubOuSe?= =?us-ascii?q?NwIJVKhf2qtKkbkdZuMyzPQdJVMD3QLL93ODpRCf7CpEYpYh4Crbc1XoY1ZZ6T?= =?us-ascii?q?IEIIKkuAzjnyzQTa203ua9OszLqJIDoR8nhfzbLKyztMpw6itvuCn83jVqzZbJ?= =?us-ascii?q?HxXP7PPyolVi2aSS40EUm35Veuo+AEs+aAIWcDvlAUZTqfBxUIqaxoqdjQD3TT?= =?us-ascii?q?mfF4fJEQn/CVRTz/RDdjlKUsAiZLtEaMQ+cMFATNc3DggHBcuBG5JvNW83Pqda?= =?us-ascii?q?GYxrFSW+wQGIdMdeeZQ9TAc/BEOzgojikZOPq7f9DEoLY2yEnHTXEYE6bW8F2T?= =?us-ascii?q?V1CWQviGyDLwXIUVopI4uiw29dLMhiV3CbjHP66Dpz6y9Y61lCSYuejZVmk3eU?= =?us-ascii?q?w1gfkCDXKHwBZaLWELFdAVtFvqQq6aaEZGzGgphv522x8QZARzVWVj3WNUnPa6?= =?us-ascii?q?Gs1ZT0UUjGSoQPAdY1B3Fi4w/VGU7Q3oe9AAv97cR3NG/LsWVYUdNOUo6JXQOK?= =?us-ascii?q?YI2/Yp0jdmrzA7viieFF5dkByK87DRHKN9wb1C43M0//doUUGTWznfaHTIypK6?= =?us-ascii?q?C8JTwidjuXLk183SvuBpL7Zaop92D0oEASJxPNDS4S5OXXvy2ASsoxboVAiZdS?= =?us-ascii?q?kU5DcNODwtavd+z+g9tg3BMNnG9xC+raUk/W2qAgGPA6H8+ZtMEdqhgQO5Yi5P?= =?us-ascii?q?eC7tFpdxse1lkYoCJ6Q9at7tUBj6MgHiA1fA6Gg3/x/wr+HuVJJH?= X-IPAS-Result: =?us-ascii?q?A2HoBAByojxY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAR+BW7tVJod4UwEBAQEBAQEBAgECXyiCMxqCIwIkExQgDgMJAhcpCAgDA?= =?us-ascii?q?S0VHwsFGASITAQBrw49KgKDaIdehj6IdhEBaIUVBZpUgXaPA4orhhRJkTRVXhd?= =?us-ascii?q?AhTFxhV+CLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 28 Nov 2016 21:36:09 +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 uASLZJQC024125; Mon, 28 Nov 2016 16:35:30 -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 uASLZInx089986 for ; Mon, 28 Nov 2016 16:35:18 -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 uASLZHPM024116 for ; Mon, 28 Nov 2016 16:35:18 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1BuAAC9oTxYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF6t0mELYd9UwECAQEBAQECEwEBAQoLCQkdhUaCI4htBAGdJpFoPYQUh16GPolwhRUFmlSBdo8DkD9JkTSBSoMlAQsBgj9xiA0BAQE X-IPAS-Result: A1BuAAC9oTxYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF6t0mELYd9UwECAQEBAQECEwEBAQoLCQkdhUaCI4htBAGdJpFoPYQUh16GPolwhRUFmlSBdo8DkD9JkTSBSoMlAQsBgj9xiA0BAQE X-IronPort-AV: E=Sophos;i="5.31,565,1473134400"; d="scan'208";a="5848397" Received: from emsm-gh1-uea10.corp.nsa.gov (HELO emsm-gh1-uea10.nsa.gov) ([10.208.41.36]) by goalie.tycho.ncsc.mil with ESMTP; 28 Nov 2016 16:35:17 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3As4Rhlx20Ow8DADo4smDT+DRfVm0co7zxezQtwd8Z?= =?us-ascii?q?se0eI/ad9pjvdHbS+e9qxAeQG96KsLQf1aGP7/2ocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDSwbal8IRi3ogndq8YbjIt/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?aI4PAvIZM+ZZs4b9oF8OogGlBQKxB+3vzThIhmTt3aYn1OkhFwDG0xAnH9IKqn?= =?us-ascii?q?vUt8/5NKYVUeCy16nI1i7Ob/ZZ1Dby8oTIdQohof6VUL92bMHfylEvGhvYglmO?= =?us-ascii?q?rYHpJS6Z2vgCvmSB4edsSfijhmAopg1poTWj290gh4jIi44P11zI6zl1zJwrKd?= =?us-ascii?q?GkSkN2Z8OvHoFKuCGALYR2R9svQ2F2tyY+zb0LoZu7fScXxJg93x7fbPiHcoiU?= =?us-ascii?q?4h39SOmRITF4hHN8eLKimRm+60+gyvfzVsWs0VZKqDRKksXUu3wQyRDe7tKLRu?= =?us-ascii?q?Zh8kquwzqC2Rzf5vtKLE07jabbLoQuwr80lpodq0TDGSr2lV3rgqGKa0so5vCl?= =?us-ascii?q?5/r8bLX7qJCRL457hBnmP6QrlcG+Dv40Mg8UX2iU4em80rzj8lH+QLVOlPI2ib?= =?us-ascii?q?PVsJHdJcQcva65GBRY3Z0k6xaiCTepzMoXnWIdIFJAdx+GgJLlO1bUIPD3Ffu/?= =?us-ascii?q?mUijkC93x/DaOb3sGo7NIWbHkLfge7Z99kFdxREvzdFf+51UCrYBLOj1Wk/qrt?= =?us-ascii?q?PUFBA5Mwuqw7WvNNIozY4aWGSSEoeFIajSthmO/etpLO6SN6EPvzOoDfku4Prn?= =?us-ascii?q?ljcYnlgGZuH925ocb3SxBbJnJEKCelLp3sdHFn0F6FltBNf2gUGPBGYAL025WL?= =?us-ascii?q?gxs2k2?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0G3AAByojxYhyIeaIFeHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgw0BAQEBAYF6t0mELYd9UwEBAQEBAQEBAgECEAEBAQoLCQkdMII?= =?us-ascii?q?zGIJLgiOIbQQBnSaRaD2EFIdehj6JcIUVBZpUgXaPA5A/SZE0gUqDJQELAYI/c?= =?us-ascii?q?YgNAQEB?= X-IPAS-Result: =?us-ascii?q?A0G3AAByojxYhyIeaIFeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAYF6t0mELYd9UwEBAQEBAQEBAgECEAEBAQoLCQkdMIIzGIJLgiOIbQQBn?= =?us-ascii?q?SaRaD2EFIdehj6JcIUVBZpUgXaPA5A/SZE0gUqDJQELAYI/cYgNAQEB?= X-IronPort-AV: E=Sophos;i="5.31,565,1473120000"; d="scan'208";a="1356261" Received: from mx1.polytechnique.org ([129.104.30.34]) by emsm-gh1-uea10.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Nov 2016 21:35:16 +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 C976C564909 for ; Mon, 28 Nov 2016 22:35:13 +0100 (CET) From: Nicolas Iooss To: selinux@tycho.nsa.gov Subject: [PATCH 1/2 v2] libsepol: check decl_id bounds before using it Date: Mon, 28 Nov 2016 22:34:43 +0100 Message-Id: <20161128213444.6738-1-nicolas.iooss@m4x.org> X-Mailer: git-send-email 2.10.2 X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Mon Nov 28 22:35:14 2016 +0100 (CET)) 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: MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP When loading an invalid module which uses a declaration ID 0, semodule_package crashes in policydb_index_decls(): p->decl_val_to_struct[decl->decl_id - 1] = decl; gdb shows the following stack trace: #0 0x00007ffff7aa1bbd in policydb_index_decls (p=p@entry=0x605360) at policydb.c:1034 #1 0x00007ffff7aaa9fc in policydb_read (p=, fp=fp@entry=0x605090, verbose=verbose@entry=0) at policydb.c:3958 #2 0x00007ffff7ab4764 in sepol_policydb_read (p=, pf=pf@entry=0x605090) at policydb_public.c:174 #3 0x0000000000401d33 in main (argc=, argv=0x7fffffffdc88) at semodule_package.c:220 Change policydb_index_decls() to report an error instead: libsepol.policydb_index_decls: invalid decl ID 0 Signed-off-by: Nicolas Iooss --- libsepol/src/policydb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c index 142bad8f09e2..26cdd9b13516 100644 --- a/libsepol/src/policydb.c +++ b/libsepol/src/policydb.c @@ -1090,11 +1090,11 @@ int policydb_index_bools(policydb_t * p) return 0; } -int policydb_index_decls(policydb_t * p) +int policydb_index_decls(sepol_handle_t * handle, policydb_t * p) { avrule_block_t *curblock; avrule_decl_t *decl; - int num_decls = 0; + unsigned int num_decls = 0; free(p->decl_val_to_struct); @@ -1114,6 +1114,10 @@ int policydb_index_decls(policydb_t * p) for (curblock = p->global; curblock != NULL; curblock = curblock->next) { for (decl = curblock->branch_list; decl != NULL; decl = decl->next) { + if (decl->decl_id < 1 || decl->decl_id > num_decls) { + ERR(handle, "invalid decl ID %u", decl->decl_id); + return -1; + } p->decl_val_to_struct[decl->decl_id - 1] = decl; } } @@ -4039,7 +4043,7 @@ int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose) } - if (policydb_index_decls(p)) + if (policydb_index_decls(fp->handle, p)) goto bad; if (policydb_index_classes(p))