From patchwork Wed Nov 23 22:06:46 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Iooss X-Patchwork-Id: 9444433 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 910BD600BA for ; Wed, 23 Nov 2016 22:11:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 888FE27DC2 for ; Wed, 23 Nov 2016 22:11:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7AF6E27DF9; Wed, 23 Nov 2016 22:11:23 +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]) (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 77F8B27DC2 for ; Wed, 23 Nov 2016 22:11:22 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,540,1473120000"; d="scan'208";a="1030789" IronPort-PHdr: =?us-ascii?q?9a23=3AVtrHFxYH1q7uX6w7KZ6KxH7/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoc+/YR7h7PlgxGXEQZ/co6odzbGH6Oa6BidZvM3JmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBu7oR/PusQUjoduN6Y8xxXUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU2/nvXishth6xFphyvqQF0z4rNbI2IKPZye6XQds4YS2VcRMZcTyxPDJ2h?= =?us-ascii?q?YYUBDOQPOuRXr4flp1YMsBezCwajC//gxDBWnX/7xrE63uY7HA3axgEsA8wCvX?= =?us-ascii?q?LJp9v1LqcSVuW1wbHQwzXCc/xW3jP955LTchs8ov+MWrVwcdHKyUIyEA7FiFSQ?= =?us-ascii?q?ppDiPzORzOsNqHKX7+tnVeKokG4nsBp8oj2gy8YjkIXJgZgVyl/d+Ch/3Y07Js?= =?us-ascii?q?W4RVZmbdOrH5ZcrSGXO5ZsTs88TGxkpjw2xqAetZO4YSQG0pUqyh/FZ/CabYSE?= =?us-ascii?q?/gjvWPiNLTp6gn9uZaixiAyo8Ue6z+3xTsy00FFXoSVbitTMrXUN1wDL6siAV/?= =?us-ascii?q?t94l+t2TaR2ADX7eFJOVw0mrDBK54g374wjYAfsVjDHyDqmEX2i7WadkM49eiz?= =?us-ascii?q?9+vreLDmpp6YN4NsiwH+NLohmtCnDOglPQUDUHKX9OSh2LH540H0T6tGgucrnq?= =?us-ascii?q?XBtZDVP8Ubpqq3Aw9P1YYj7g6yDyy439QcnHkHKk9FeR2eg4fyPFHOPfb4Auuh?= =?us-ascii?q?jFS3izpr2/DHMaHhApXKNHTDlqzhcqxn505Tzwoz08hT54hIBbEZPPLzRkjxuc?= =?us-ascii?q?TWDh8jKQO0xfroCNRm1o4FXGKPGq6ZPLrJsV6G/eIjOe6MZJUauDzlMfgq++bu?= =?us-ascii?q?jWMlmV8aZaSp3oEYaHO/HvR7OEiZYmDjgtQGEWcXpAY+S/bqiFKaWz5Je3myR7?= =?us-ascii?q?485i08CI++F4jMW5qtgL2f0yehBZBZfHxJClWWHXfvbYWEVO8GaDiOLc95jjwE?= =?us-ascii?q?Sb+hRpch1R6wsA/6z71nI/HQ+i0FqZLj09116PfJmRE17zx0ANyX03uRQGFsgm?= =?us-ascii?q?MIWzg20bhkoUxz0FeD1rN4g+BDGNxI4fNJVQk7NZvGwOx8EdzyXBzOfsuRQla8?= =?us-ascii?q?XtqmGS0xTs42w9IWbUdyAdGijgzd0CqwGL8YjKKLC4Iu8q3HwnjxItxxy3Hc1K?= =?us-ascii?q?kul1MmWNdANXW6hq5j8AjeH5LJnFiEmKarb6sc2DXA+3uEzWqLoE5XShVwUbnf?= =?us-ascii?q?UXAZeETWsczz5lneQL+2FbQnLgxBxNaEKqtLbt3piUtJROz4NdvEfW2xgWCwCQ?= =?us-ascii?q?yPxrOWY4rgY38d0znFCEgYjwAT+m6LOhUkCSe9uW3REjJuFF30bkzw8elxsmm7?= =?us-ascii?q?TlMqwAGQdUFh0aS6+gINj/yGV/wTxq4EuDsmqzhsAla93s7ZC8aHpwp7ZqlTfd?= =?us-ascii?q?M94FBB1WLWrAF9Op2gL6Z4iV4EdAR7pUTu1w94Co9Yi8glsGsqzBZuKaKfyF5B?= =?us-ascii?q?czKY3YvsOrHOMWn94hSva6/Q2lHD39eb4bwP6Ow5q1XlvQGmClEi/29h09ZLz3?= =?us-ascii?q?uW/o/KAxYKUZLtTkY38AB3p6vdYik544Pby2dsPrWzsj7MwN8pH/YlxQq7f9tF?= =?us-ascii?q?N6OEDgDyGdUAB8eyMOwqh0SpbhUcMeBK7qE0Iseme+Gc16KxJ+lgmzamjXhA4I?= =?us-ascii?q?B7yU+M8jZwSujP35kZ2f2Y2BWIVyvkhle7rs/3gZxEZS0VHmenzCjkAJddabN0?= =?us-ascii?q?fYsQF2ehPcm3xtFgiJ73QXJY8kCsB08e0s+zZRWSd0D93RFX1UkPonyohy24zy?= =?us-ascii?q?dvnjEqsKWf2jfOw+L8exobIGJLQ3NijVj0K4iuk98aRFSobxQulBa9+0b6wbVU?= =?us-ascii?q?qb9hL2nVXEhIfzL6L2d8XausrrCCedJA6Is0sSVLV+SxeUiaRaTgoxseyC7sA2?= =?us-ascii?q?pexCw7dj2ztJX2hRp6hHiaLHZpo3rTYdtwygvH5NzAWf5R2SILRDFihjnKAliz?= =?us-ascii?q?IcGp8s+Sl5ffrO++TXmsVoBIcSb114OArzG35XZtAR2ihfC8hsPoEQY90S/h2N?= =?us-ascii?q?llSz/ErBDibYn3z666K/5oflF0BF/g7Mp3Ao9+nZE2hJEM3ngag46Y/XQZnmju?= =?us-ascii?q?NtVbw7jxbGIXRT4Mwd7a/hTq2FF5InKO3YL5WW2XwtF9aNmifmMWxiU94thFCK?= =?us-ascii?q?eU8LNEhyt0okKkrQLWevV9mCkSyec16HEGme4JoBQiwj+bAr8MAUlSJTbsmAiQ?= =?us-ascii?q?79CisKVXY36icb2q20p6mdCuEq2Coh1GV3njYZoiGzF/7tlkMF3QynLz8p/rdM?= =?us-ascii?q?PWbd0Nqh2eiw3AgPRNKJItivoKgjJqOXjnsXwr0eI7iAZh3ZW9vImHMGhi5r62?= =?us-ascii?q?AhtCOj3yfcMT9SnnjbxCkcaOw4CvApJhFy0NXJvyV/2oCCoSuO/pNwaPCj08sW?= =?us-ascii?q?ubGbTeHQ+Z8khmqW7AE5GxOHGTPnUZys9iRBaFLkxFnA8URCk6noI+Fg2y3Mzu?= =?us-ascii?q?blx26S4X5l75thtMzfllNxjhXWjBugikcDA0SIKQLBBO9AFN+1/VMdCC7uJ0By?= =?us-ascii?q?xX5YauoAuJKmyafARIEXoJVlafB1/9Irai/8LA/PacBuq/KfvOfLqPpPdCWPaI?= =?us-ascii?q?35Kvz5Bm8yyCN8qVInliFPo72kxZUXB+AcTZlC0FSzYLmCLVc86buBC89zVsrs?= =?us-ascii?q?+l7vTkQg3v6pWUC7ZJKtVg4Q62jr2MN+GOnyZ1MzBY2Y0QxXXQ0rgQwEYSiz1y?= =?us-ascii?q?dzmqCbkPri/NTK3Xmq9RFBMUdj18O9BJ760m2AlBI8nbisn61rRglP46F09FVU?= =?us-ascii?q?D9msGufcEFOW69O0nZBEmVL7mGIiXLzN/xYaO5U7JQjeFUuAa3uTeUCUPjOS6D?= =?us-ascii?q?lzbxXRC1Le5MlD2bPABZuIylbhZtDm3jQMj8ah28Md54kzs2zqYuhnPNK2EcMi?= =?us-ascii?q?NxfF9Krr2V8SxXmO5/G3Bb4npjM+aEhz6T7/PEJZYOrftrHiN0mvpZ4HU6z7ta?= =?us-ascii?q?8jpJRPlymCvcoN5hvU2mkvWPyjpgVRpBtCxHhISVskV+Ia/Z7IVPWW7Y/BIR6m?= =?us-ascii?q?WdExUKp915CtLxv6Bf1N3Pm7zvKDdY89PZ5swcB9DKJ8KBNXouKxvpGDrPAwsC?= =?us-ascii?q?Qj+nL2bfh1ZSkPuK7H2asoA6qoTwmJoJUrJbUkI6GekeCkl+H9wCJ4x3Xi8+nr?= =?us-ascii?q?6dl84I5nu+oAPXRMpEopDNTuiSDun3KDaFkblEYAMFwanmIoQIKIL0wVZiZUV6?= =?us-ascii?q?nInRAEXQXMpNrTBmbg86uEVN6mZxT20p10LjdAyt/GcZFeSokR4ulgt+feMt+S?= =?us-ascii?q?/x7FcwIFrKojY/n1c1mdXkmj2eaiD+LL23XY1MDCr0rUcxOIvhQwlpdQ2ygVBk?= =?us-ascii?q?NDDcSr1MlbRga2FrhxLHuZZUA/FcV7dEYBgexPGMefonzUlcqj+mxU9b5erJE5?= =?us-ascii?q?1imxU2cZS0tXJPxxpjbMIpJazXPKdG00NQibyUsS+nzOA+2hEeKl0W8GyIey4I?= =?us-ascii?q?pVYIOaM8Kyqs4+xs7xaNmyFadGgQUPoqofJr9kQnN+SG0S3gz6ZJKlqtOOyHM6?= =?us-ascii?q?OZp2/AmNaGQlMqyEwHilJF8qJw0cc/dEqUTFsiw6GNGBQML8bCLhtVb8VK/njJ?= =?us-ascii?q?YSmOqfnNwY5yP4ilEuDoSvWOu7gSgkOlGwYkBIsM7sIcHpW210HYN8jnJqYfyR?= =?us-ascii?q?ox/ATrOEmFDPNRdRKQjjgHp8C/zJlq3YhSPTwSHWJ9MSCr6bnNvQ8qnOCPXNEo?= =?us-ascii?q?bXcGRoEELG45WNWmmy5FuHRNFDq30vgZyQeY6T/8uiTQASLzb9pkfPebeQlgCN?= =?us-ascii?q?eo9jUj66K2k0LY8o3CJ2HmMtRvosPP6eIfp5aAF/NUTbl8vlzBlIlZR32lSXXA?= =?us-ascii?q?HcSzJ5fud4kmdcb0BWqiUlyjlzI1SN/8PNaqLqeWjwHnW5xUvZKa3D89K8CyCC?= =?us-ascii?q?sSGxBqp+EM/Kh8fxEMY4InYR70sAQzL7awIAOZ0tqyXWmiMT5WTvlZzeW9YbxY?= =?us-ascii?q?1TEhYfS7yHQ6SJE21ue38VMXSJEMkB7e2e6pZ5NCXijrBnxdZwLPqDIimGd/MO?= =?us-ascii?q?Y/2f0wzw7WsVYCKTCLb/ZmaHZEvt0mAlOSO3p2AHIiR1CAlYrD/hKs37cK8itS?= =?us-ascii?q?gtZU0OlFsHzgsZ/aez+jRbKkpo7UsyU6a9gquapxMZbsIsGerpPRgiTfTIXMsg?= =?us-ascii?q?2CSCO6DfxamtlMLyJYR/lInXolN9Qft4Rc80Q8SsAwKqdTB6kro7CldSBrDTUO?= =?us-ascii?q?zSMDUYOPwiACiP+m27TGjheQbIgiMBscvZVYn9QSTjV7YiwbpK6sTYnWkXGLSn?= =?us-ascii?q?QTKgcJ8QtM/B4AlpN3fu39/IXIToVDxCJNrv1oVSvLEp1o91rlRWGMnVj3Vumu?= =?us-ascii?q?k+yz0QJV1vLs3cERWARjBkhF2+ZWikwoJaltK6YKpI7KtSSHeFjmvGL30uSmOk?= =?us-ascii?q?deycnVd13+A4rFsWv8UiIc+X0IS49A0mvfFZEInwp/dqkruE1GIJq6dUbm+zwk?= =?us-ascii?q?24NpEqG4VM+x3FYqt3MGRyasE9daCuFmrEjYWCZ5bJ+xspnlPYtdQnNI8p2Ht1?= =?us-ascii?q?hZiFltMzK+yZdEJcBB+CIDXDhOoTWYvdu9Us5D1NR3D5ASPNhwpW3xGKReOJie?= =?us-ascii?q?u3c2oKDgymfF+zAgt1e33C+8G7WlT+Jf5WEeGR4kJ2WfqkkuE+sj6X3e8lbTvV?= =?us-ascii?q?Bo5+1bHKSAjV1toDZhGZBDHjlJ1Wq/IFR1UHlLqORaKKPbcsxaX/kyZQGgOx04?= =?us-ascii?q?Ff46wUOJ51t4nXHnbCxurgFa4TzSXxEoVSkJhbfggSEeqsaiOTIBV5JEcTAhYD?= =?us-ascii?q?zfJwKdhy9XoA5Va1t2VJABHtZF57Yb0JNU/sXYU0ajMyUFUwF5Ow0lz/VfjVZD?= =?us-ascii?q?v1uceS/DFwqkb/HPsgd4fc2Jts6mMOz5/BtbioPgqO049aIDSGO9lAKwX9/etJ?= =?us-ascii?q?HztseWtkSQaaj0Keu8bmHdTDLUlxC/ma8kD4XW/yjUKAdUMJd6xmY4bZXjFGLG?= =?us-ascii?q?Mw9LKL4cJ0peSa91c85GovxAa89iZqkJ5bdnBgibSRP3BIyvsP5GI07JRTvAMi?= =?us-ascii?q?qB8vawoZ7I4LzZTujgeNKDy2jbTKJwI5h19yP3G7H03o9C4kD2wOti9ltmSVja?= =?us-ascii?q?NCCMtMzhJhgX5Ma4a0TiooYkHSjRAJdtinri2l9Pd8wLQy2w6psYzIlV6HHqSe?= =?us-ascii?q?J3ykLzqvFd96F46Ykr5LBk0du0Jb3MJvtErEBqGQWUBgF29pU3Gmd/WWFRYugV?= =?us-ascii?q?KPjPYaQVl8fuq/r4F6YP8h2a5/RZacfbJ0HGgsSwFzecRgZfkQgcrz4VNBGQ1/?= =?us-ascii?q?mfm697Ucylv/T22lox41iiKR4L1LJt6p2e+qqPv+/XawHezaYfV6jvW8Pzqqgs?= =?us-ascii?q?u0KO6v0ljrEOfHd1bxegEOgHWc4X3n3gwrwyzSIwD8PDGKrt+PxZWHI/kDLggZ?= =?us-ascii?q?d9EEgIFf4PAbqE54Jennw/m+DDMN0ZbLxCkH6VFRG4Cr8C1WKr6yyPLWljhhHD?= =?us-ascii?q?yBDwQWW27FPsrC94RyXMz835nUpOSrm3H1pSUDa1OU9lqjOAIhDktN3tuaQ69E?= =?us-ascii?q?s2KHDrtMqRlGu9P7NaB8v/JN2ALikzoFIYloYxSsau2YAcHtq9O8wR/Wp7bvbR?= =?us-ascii?q?5GKniShBo71Ih4DG+MGa5u3XHWW8j62ds7iC2CpXynwmslEk9tChNvbO6saRQ/?= =?us-ascii?q?u01mYeUSF/uxfAXxGvsLDbqU4bOVCT2kfRhIMKJs1Z3WU/1kz+4OgjW9cz+QVF?= =?us-ascii?q?G4bOefwNuDfzOCHuzlaHedI3USue3CVLEVLpC1V4H7I82G3otsLTiXjQ40EoRp?= =?us-ascii?q?V3d0H/gBx3C5s3KUcq6FcJxioOCgcNZg6cDLGzHUTqN5cEVUkZZhSD3bi6fLs3?= =?us-ascii?q?0lN3wrOr5e/TYvJzB6wROflDlAKOmkZUGo4Ou60EXL18Y0Nd9LLQpgX6CYjnXv?= =?us-ascii?q?3mmGE1NfKrQsFV79oZt3ok4gawXRag74lM76oDgpCSaqFEeYTMvNx770p/5D4O?= =?us-ascii?q?dzZCjwJjgB6iSuATuvzj7cbHv5ay7eauTqktTf0N9xcoH2R+k4fwgFc7rN7M1u?= =?us-ascii?q?dcUYPUhp798ABMP36KoJzV0wR4KecVN42re6tv+GsdKCgDPXIOOsCWZOMm7y9q?= =?us-ascii?q?KjXT6ERIAtkQatMAIMrNhQdUh1XxWL5J6srUBl+YCol0d8Ay7Gr70Ss1/oU4Uu?= =?us-ascii?q?bh7j+2OJ/e4kpVP/xZkCVjiNLCpeYSwfrICygb+3qZZAZvwiOE1ZaND+z8/eKW?= =?us-ascii?q?yNHbT1kGBDI5U59BJDqe/gyqXva1lI/3XQOQ8MDzhowxeVmNSXywk6QFs7pMHv?= =?us-ascii?q?RbiirhxDheC5r5h/SLvNqw8GFXrEFIEJ5v7R3ZH6VSJpp7Ng7ilsa1Wkh8BjDy?= =?us-ascii?q?eMXVdhoypuWWxv0D4/hlN0fkY48UPA4Ewarg6XVJVgtuVKL2vlGBUOIeetRmTu?= =?us-ascii?q?/ErndS6Y5nMK8AIlydpJ3srjdVp1E7GwspZ6Eqrj1abEbChgtVVLjouLQYkAsT?= =?us-ascii?q?TcZ5uVNQGWK3IG8+4j3HVaJJjKmeFvMY6TCTTq0UXEVuLCx+Xx202JJ0e7uqhv?= =?us-ascii?q?BLqGVGkT1hoPIyyTxpWAO8uTHwp6IKwT8g9623tC4auXBcU+uQnCHGCVRFzPQX?= =?us-ascii?q?gqYREHni6Vmmb3kFcoT++r5nJd7v9YM5+XQwfQ0jfzEaXeSnEyzwjaSIAoyJsN?= =?us-ascii?q?5GmBGNuMHObaKuIikTN7Q9zwnjR3t80gXFghZo8XULTS+k7NA5JYWxI8AlyTS0?= =?us-ascii?q?GWLDblYD/rtJsNfttV4MVOY2aE1hz39l0sWcQi0NWdHAG2cyjgg/c2lEd4hD6R?= =?us-ascii?q?ACHakynjmIprVG/h0TYDrMEISq5IfQncnM2XQmQ9Zl3GTWqbOZhp8w1n1qhc90?= =?us-ascii?q?5DaUuHsOb+zYT9NsAn/r24dQzez+YPusvf4DSIti07mhS/gCMs+i+WSqwplqXF?= =?us-ascii?q?GqxqgGFVqjLOAD3qvbUzuiSWCAW+SLc2iNny4+Mk725BmoMkM4ZdxPr088LuvC?= =?us-ascii?q?nIBTmxfmUbNuSSWavUXbw3A7MeMGawI2v5+qexALTO4UfOWcOekuz+E9CFQSa3?= =?us-ascii?q?/FBy12BPGqsVS1hoh0J21g4VnmYeTq6g3mNdqSGhoHEY7dtZNx++a1RmGGOX9m?= =?us-ascii?q?0hJyOlN49+HBGFQtruVcaYqencDMh9Rn1u4Ib+xiPjM7ut4PgY9j8o2U0MCWcR?= =?us-ascii?q?HN0Jb9O8zaruKfA/3FwEQgYntaXaYBYQPp+4U6OcY0W6XUHbtdpxscH6Y7QJsl?= =?us-ascii?q?N2f/76x0KQRzcgnKZLuqnsbqvOWLZoBPp3/X6FIwIz3QuxoZyvy7VQZ7dYylh2?= =?us-ascii?q?3uIJAsQTJMt9NtBQViHItOA8MPsRGqAp+VmKG+jt++5Vl6u+sUvqbqDfDKztu5?= =?us-ascii?q?1Z1rX5dG/UyLICrRBK5zj0RlkuSygvDA0pzrBsP5Yt4EUel7QnLfarDYBIm/LS?= =?us-ascii?q?iOOs3kcU5c77GcyK55UgmWZC3hUauGrDekNPR47kol0YF4eevTzCA3777Fwtfy?= =?us-ascii?q?YHtbpii7p36TKJRf9EDKBfDZXx9MTvqF9HhqELYPbYvw7ugOKsAiwNmA7Alv9j?= =?us-ascii?q?RNztWKL7KnrkDSxkJxbYjbI1fx2yYlRYkKJwyyMU8tgW/ft3TcDm1QLsylKcl2?= =?us-ascii?q?nNaVFQfg50hrlmErYW5NAG3oRc2eOWIDwcKxeBWK9B5XD9YEh+O3YlA3tqmzSe?= =?us-ascii?q?luJ5VEluKmurobkdZpNS7PXtZVPznKI7JtPTpeEP/PpF42bR4AqLc1R4g1aYKJ?= =?us-ascii?q?IEMdP0eK0Tnywhfa0U3oa9ys076EICIX8nVc07LIyjlNpxC/ufmDmMHjVq7WbI?= =?us-ascii?q?3uVv7ILCUlTi2aRSg1EUux/FeroeYLvPqZIWcZpVAZeTySCA8Vpq9xqdjQD2nT?= =?us-ascii?q?mfBsfZEQg/CaQS/wQjVilKUuHiZLqVyMQ/0bGAnUdXDhg21ctxe5K/9R+3Llc7?= =?us-ascii?q?2Yxq1IW+wZAotMbueVQ93GdvBCPz0ojCkWOP6gf93AqLY0yl3IQnECHKnS9V2R?= =?us-ascii?q?UkqWT+eCxzLvR4oVpIk0ujcy9tLWgCB3D7zCP6yDqD627o64kCGYtPXcVmkoZE?= =?us-ascii?q?w1mvgCAGiawBRbLmELEdQVt1/sQqKaYEZMzn0pg/p02xAQYARzTmFu0npOkfmj?= =?us-ascii?q?GM1ZTl4UjGW1QP0BalB6Fzww/VWX4g3sf9MAo9rfR2lA+bsQUYAdNuUn6JHLOK?= =?us-ascii?q?sMx/YkxClmoCI/syqBDl5QjRmI87TOE6Jmx71D5G44//dsUkGJXTzfbnDNypC6?= =?us-ascii?q?BMJX2SduvXfk2tLWvuBqMrtao5p0AFIUDi1rKNDd+ipBXn3q1weouRa0Aiiec3?= =?us-ascii?q?ol52MQKCgEcPtl5/NquxbPMNDa4AWfsLxyhlGsDFOtC7Gz3JVQQuDu0h6jIX1N?= =?us-ascii?q?cD6sE5lt7PdKk80JSaZ7dc65GV+XfVu2NR6Rpy1ZrEuimb+sF8cfhzxGnw=3D?= =?us-ascii?q?=3D?= X-IPAS-Result: =?us-ascii?q?A2FEBQCSEzZY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAR+BWqUAAZZMJIgjUwEBAQEBAQEBAgECXyiCMxqCHAIEAQIkExQgDgMJA?= =?us-ascii?q?QEXIQgICAMBLRURDgsFGASITAQBsDc9KgKDaId4hj6IdhEBZAyFDQEEmk+Bdod?= =?us-ascii?q?hhx2KKoYTkXZVXhc9gzEcgV5xhheCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 23 Nov 2016 22:11:21 +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 uANMBJgY025072; Wed, 23 Nov 2016 17:11:20 -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 uANM7fBg049148 for ; Wed, 23 Nov 2016 17:07:41 -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 uANM7eoK023722 for ; Wed, 23 Nov 2016 17:07:40 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1DmAADjEjZYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF5pQABkj6ELYgoUwECAQEBAQECEwEBAQoLCQkdhRkGJ2I5GFcZiG0EAbA3PYQUh3iGPolsDIUNBZpPgXaHYYcdkD2RdoFKgxwMRhyBXnGGF4IuAQEB X-IPAS-Result: A1DmAADjEjZYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF5pQABkj6ELYgoUwECAQEBAQECEwEBAQoLCQkdhRkGJ2I5GFcZiG0EAbA3PYQUh3iGPolsDIUNBZpPgXaHYYcdkD2RdoFKgxwMRhyBXnGGF4IuAQEB X-IronPort-AV: E=Sophos;i="5.31,540,1473134400"; d="scan'208";a="5841773" 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; 23 Nov 2016 17:07:40 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3A+l2NXxFeNjEB2J8YLMRuRJ1GYnF86YWxBRYc798d?= =?us-ascii?q?s5kLTJ78rs+wAkXT6L1XgUPTWs2DsrQf2rGQ6f+rADFbqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLd8IRmsswnctMYajZZiJ6s/1xDEvmZGd+?= =?us-ascii?q?NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG4p6sLrswLD?= =?us-ascii?q?TRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Uims4qt3VBPljj?= =?us-ascii?q?oMOjgk+2/Vl8NwlrpWrhK/qRJizYDaY4abO/hwfq7GYd8WWXBMUtpLWiBdHo+x?= =?us-ascii?q?aZYEAeobPeZfqonwv0MArRqiCgmrAOPg0CRIjWL106091OQhChrG1xEnEtIIsX?= =?us-ascii?q?TbsNL1NKMIXuCu1qXIzDLDb/RN2Tfm84XIdx8soP6WUbJ3a8rRxlAiGgXYhVuT?= =?us-ascii?q?sYzoJy6Z2voJvmSB8uZsSe2ih3Qppg1tuDSiyMghhpHKi44I0FzJ9CR0zJwoKd?= =?us-ascii?q?GmVEJ3e8CoHIdSuiycKoB4WNktQ3tytyY/0rAGuYC0fCwNyJk/wh7eZOGLf5KQ?= =?us-ascii?q?4hLkUOaQISt4i2x5d7K/gRay8FGgyvDiWcWu11ZKtCVFnsHNtnALyRPT9tCKRu?= =?us-ascii?q?Zj8kqlwzqDyhzf5+5eLU06iabXMZAsz7EompoWq0vDHyv2mEvsjK+Rc0Up4vWm?= =?us-ascii?q?5fj6bLn6vpKSLIB0hQH8Pak2m8OxAvw1Mg0BUmmU4+i806fj/ULhTbVMj/05jq?= =?us-ascii?q?7ZsJTAKsQAvKK5AghV0oE46xakFDqpy9MYnWQBLF1ZZh2HlJLlO1TBLfH3F/u/?= =?us-ascii?q?hE6skDhzy/DcIrLhGonNLmTEkLr5ZrZy9UpcyAs1zdBC6JNZEa0BIfLvVU/xs9?= =?us-ascii?q?zUFBk5MxeuzOr9B9V90Z0eCiqzBfqCPafTt0KYzv4+KOmLIokOsXDyLOZ2yeTp?= =?us-ascii?q?iCofmFQaeaCylboQb2ujVqBgIk6eZXP3xNYGFnwRlg9iXKrtklLUAm0bXGq7Q6?= =?us-ascii?q?9pvmJzM4mhF4qWHo0=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GCAQCAEjZYhyIeaIFeHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgw0BAQEBAYF5pQABkj6ELYgoUwEBAQEBAQEBAgECEAEBAQoLCQk?= =?us-ascii?q?dMIIzGIIeBidiORhXGYhtBAGwNz2EFId4hj6JbAyFDQWaT4F2h2GHHZA9kXaBS?= =?us-ascii?q?oMcDEYcgV5xhheCLgEBAQ?= X-IPAS-Result: =?us-ascii?q?A0GCAQCAEjZYhyIeaIFeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAYF5pQABkj6ELYgoUwEBAQEBAQEBAgECEAEBAQoLCQkdMIIzGIIeBidiO?= =?us-ascii?q?RhXGYhtBAGwNz2EFId4hj6JbAyFDQWaT4F2h2GHHZA9kXaBSoMcDEYcgV5xhhe?= =?us-ascii?q?CLgEBAQ?= X-IronPort-AV: E=Sophos;i="5.31,540,1473120000"; d="scan'208";a="1030721" Received: from mx1.polytechnique.org ([129.104.30.34]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Nov 2016 22:07:39 +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 895FE564A10 for ; Wed, 23 Nov 2016 23:07:37 +0100 (CET) From: Nicolas Iooss To: selinux@tycho.nsa.gov Subject: [PATCH 5/5] libsepol: detect duplicated symbol IDs Date: Wed, 23 Nov 2016 23:06:46 +0100 Message-Id: <20161123220646.23504-5-nicolas.iooss@m4x.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161123220646.23504-1-nicolas.iooss@m4x.org> References: <20161123220646.23504-1-nicolas.iooss@m4x.org> X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Wed Nov 23 23:07:37 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 A valid policy would not have two symbols (classes, roles, users...) sharing the same unique identifier. Make policydb_read() rejects such policy files. When ..._val_to_name translation tables were allocated with malloc(), change to calloc() in order to initialize the tables with NULLs. Signed-off-by: Nicolas Iooss --- libsepol/src/conditional.c | 5 +++++ libsepol/src/policydb.c | 45 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/libsepol/src/conditional.c b/libsepol/src/conditional.c index e1bc961b2b52..8b2060ce3ff2 100644 --- a/libsepol/src/conditional.c +++ b/libsepol/src/conditional.c @@ -25,6 +25,7 @@ #include #include "private.h" +#include "debug.h" /* move all type rules to top of t/f lists to help kernel on evaluation */ static void cond_optimize(cond_av_list_t ** l) @@ -551,6 +552,10 @@ int cond_index_bool(hashtab_key_t key, hashtab_datum_t datum, void *datap) if (!booldatum->s.value || booldatum->s.value > p->p_bools.nprim) return -EINVAL; + if (p->p_bool_val_to_name[booldatum->s.value - 1] != NULL ) { + ERR(NULL, "duplicated boolean ID %u", booldatum->s.value); + return -EINVAL; + } p->p_bool_val_to_name[booldatum->s.value - 1] = key; p->bool_val_to_struct[booldatum->s.value - 1] = booldatum; diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c index 38c38f42cd2d..cb5fba9c9c94 100644 --- a/libsepol/src/policydb.c +++ b/libsepol/src/policydb.c @@ -849,6 +849,10 @@ static int common_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) p = (policydb_t *) datap; if (!comdatum->s.value || comdatum->s.value > p->p_commons.nprim) return -EINVAL; + if (p->p_common_val_to_name[comdatum->s.value - 1] != NULL) { + ERR(NULL, "duplicated common ID %u", comdatum->s.value); + return -EINVAL; + } p->p_common_val_to_name[comdatum->s.value - 1] = (char *)key; return 0; @@ -863,6 +867,11 @@ static int class_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) p = (policydb_t *) datap; if (!cladatum->s.value || cladatum->s.value > p->p_classes.nprim) return -EINVAL; + if (p->p_class_val_to_name[cladatum->s.value - 1] != NULL || + p->class_val_to_struct[cladatum->s.value - 1] != NULL ) { + ERR(NULL, "duplicated class ID %u", cladatum->s.value); + return -EINVAL; + } p->p_class_val_to_name[cladatum->s.value - 1] = (char *)key; p->class_val_to_struct[cladatum->s.value - 1] = cladatum; @@ -878,6 +887,11 @@ static int role_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) p = (policydb_t *) datap; if (!role->s.value || role->s.value > p->p_roles.nprim) return -EINVAL; + if (p->p_role_val_to_name[role->s.value - 1] != NULL || + p->role_val_to_struct[role->s.value - 1] != NULL ) { + ERR(NULL, "duplicated role ID %u", role->s.value); + return -EINVAL; + } p->p_role_val_to_name[role->s.value - 1] = (char *)key; p->role_val_to_struct[role->s.value - 1] = role; @@ -895,6 +909,11 @@ static int type_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) if (typdatum->primary) { if (!typdatum->s.value || typdatum->s.value > p->p_types.nprim) return -EINVAL; + if (p->p_type_val_to_name[typdatum->s.value - 1] != NULL || + p->type_val_to_struct[typdatum->s.value - 1] != NULL ) { + ERR(NULL, "duplicated type ID %u", typdatum->s.value); + return -EINVAL; + } p->p_type_val_to_name[typdatum->s.value - 1] = (char *)key; p->type_val_to_struct[typdatum->s.value - 1] = typdatum; } @@ -912,7 +931,11 @@ static int user_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) if (!usrdatum->s.value || usrdatum->s.value > p->p_users.nprim) return -EINVAL; - + if (p->p_user_val_to_name[usrdatum->s.value - 1] != NULL || + p->user_val_to_struct[usrdatum->s.value - 1] != NULL ) { + ERR(NULL, "duplicated user ID %u", usrdatum->s.value); + return -EINVAL; + } p->p_user_val_to_name[usrdatum->s.value - 1] = (char *)key; p->user_val_to_struct[usrdatum->s.value - 1] = usrdatum; @@ -931,6 +954,10 @@ static int sens_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) if (!levdatum->level->sens || levdatum->level->sens > p->p_levels.nprim) return -EINVAL; + if (p->p_sens_val_to_name[levdatum->level->sens - 1] != NULL ) { + ERR(NULL, "duplicated sensitivity level %u", levdatum->level->sens); + return -EINVAL; + } p->p_sens_val_to_name[levdatum->level->sens - 1] = (char *)key; } @@ -948,6 +975,10 @@ static int cat_index(hashtab_key_t key, hashtab_datum_t datum, void *datap) if (!catdatum->isalias) { if (!catdatum->s.value || catdatum->s.value > p->p_cats.nprim) return -EINVAL; + if (p->p_cat_val_to_name[catdatum->s.value - 1] != NULL ) { + ERR(NULL, "duplicated cat ID %u", catdatum->s.value); + return -EINVAL; + } p->p_cat_val_to_name[catdatum->s.value - 1] = (char *)key; } @@ -968,7 +999,7 @@ int policydb_index_classes(policydb_t * p) { free(p->p_common_val_to_name); p->p_common_val_to_name = (char **) - malloc(p->p_commons.nprim * sizeof(char *)); + calloc(p->p_commons.nprim, sizeof(char *)); if (!p->p_common_val_to_name) return -1; @@ -977,13 +1008,13 @@ int policydb_index_classes(policydb_t * p) free(p->class_val_to_struct); p->class_val_to_struct = (class_datum_t **) - malloc(p->p_classes.nprim * sizeof(class_datum_t *)); + calloc(p->p_classes.nprim, sizeof(class_datum_t *)); if (!p->class_val_to_struct) return -1; free(p->p_class_val_to_name); p->p_class_val_to_name = (char **) - malloc(p->p_classes.nprim * sizeof(char *)); + calloc(p->p_classes.nprim, sizeof(char *)); if (!p->p_class_val_to_name) return -1; @@ -999,7 +1030,7 @@ int policydb_index_bools(policydb_t * p) if (cond_init_bool_indexes(p) == -1) return -1; p->p_bool_val_to_name = (char **) - malloc(p->p_bools.nprim * sizeof(char *)); + calloc(p->p_bools.nprim, sizeof(char *)); if (!p->p_bool_val_to_name) return -1; if (hashtab_map(p->p_bools.table, cond_index_bool, p)) @@ -1035,6 +1066,10 @@ int policydb_index_decls(policydb_t * p) ERR(NULL, "invalid decl ID %u", decl->decl_id); return -1; } + if (p->decl_val_to_struct[decl->decl_id - 1] != NULL) { + ERR(NULL, "duplicated decl ID %u", decl->decl_id); + return -1; + } p->decl_val_to_struct[decl->decl_id - 1] = decl; } }