From patchwork Mon Nov 28 21:34:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Iooss X-Patchwork-Id: 9450489 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 77DCC600CB for ; Mon, 28 Nov 2016 21:38:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 68F0527BFC for ; Mon, 28 Nov 2016 21:38:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5D06727CF9; Mon, 28 Nov 2016 21:38:26 +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]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4511B27BFC for ; Mon, 28 Nov 2016 21:38:24 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,565,1473120000"; d="scan'208";a="1100406" IronPort-PHdr: =?us-ascii?q?9a23=3AqlQ1FxzQwzXtDD7XCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?1ekUKfad9pjvdHbS+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+46ptVRTnhj?= =?us-ascii?q?0HNzok+2/JjMJ+gr9QrBa4qxBi34LYZYeYP+d8cKzAZ9MXXWpPUNhMWSJPAY2y?= =?us-ascii?q?aIkAD+QZPetasoXwqVQBogexCwayH+Pi0SNIi33s0KEmyektDR/K0Qo9FNwOqn?= =?us-ascii?q?TUq9D1Ob8KX+C00KbIyjHDYOlN2Tzg64bIdRchoeqXXbltdsfRz0gvGB/CjlWU?= =?us-ascii?q?s4PlJCmZ1uUKs2ic9OpgTvmii2sopgB+uDSvwd0siobQi48T11vK9j15zZ4oKd?= =?us-ascii?q?C3R0N3e96pHIZKuy2EOIZ6XNkuT3xwtCs517EKo5+2cSkQxJg62RLTd+aLf5aU?= =?us-ascii?q?7h/hUuuaPC12i2h/eL2lgha/6U2gyurhWcaqyFtKtS9FksXUtnAKyhzT9tCLSv?= =?us-ascii?q?tj8Uel3jaCzxzT5fteIUA1iKrbMIQtwqIwl5UPsUTDGTX6mEPqg6+Nakoo4O2o?= =?us-ascii?q?6+XjYrn+p5+cMZF7ih3mP6gzlcGyDv40PwgTU2SB5+ix26Pv8VfkTLlSi/05iK?= =?us-ascii?q?jZsJTUJcQBoa65BhdY0p095Ba7Djem1skYnHYeIF1efxKHko7pNE3QL/DjFvq/?= =?us-ascii?q?n1Stnytrx/DBJLHhBI7NIWLZnLfuerZ99VZQyBAvwtBH+5JUFrYBLertVU/prt?= =?us-ascii?q?PYFB45Mxevzub/Etp9zIIeWXmXAq+dKqzdrUGH6vgoI+mWa48foCz9JOQ95/7y?= =?us-ascii?q?kX85nkcQfaez3ZQNbnC3AvVmI16CbHrpmtcBEH4GvhEwTezxklGCViRTZ3mqVa?= =?us-ascii?q?Im+j47EJ6mDZvERo21g7yOxiS7HppLZm1dCVCDC3Tod4KZW/sWbyKSOMBhmCQe?= =?us-ascii?q?Vbe9U48hyQ2utAjixrV9M+XU4CwYuoz51NVu/eLciRQy+SZzD8SH3GGHV3t0kX?= =?us-ascii?q?8QRz8qwKB/plRwyled3qh8h/xYEsde5/dUUgcmMp7cyvZ1B8r1WgLbcdeDUEym?= =?us-ascii?q?Tcm+ATEtUtIxxMcDY11zG9W4iRDDxDaqDqQOl7yNA5w1/Kfc0GL3J8pnzXbJyr?= =?us-ascii?q?UhhUE8QsRTLW2mmrJ/9w/LCo/HiUqZk7qqeroG3C7W72qD03SBvFtDXw5tVKXJ?= =?us-ascii?q?R3cfZlHZrd7h/EPNU6euCag7MgtG0cOCNrZFZcDojVpcQPfuI8jRY2W0m2isHx?= =?us-ascii?q?mI3a+MYJDse2oDwCXXEFIEnBwL/XaaKQg+AT+so2TfDDxqEVLgfVjs/PJkp3yl?= =?us-ascii?q?VE80yBuGb0p717q64hQVn+CTS+sP3rIYvycssyh7E0yh393MFdWAqQVgcb5Abt?= =?us-ascii?q?M9+lhHz37ZuBJnPpC6KaBtmEIeeRxtv0zyzxV3FplAkc8yoXM0zQp9Nb6Y0FRb?= =?us-ascii?q?dz+CwZ/wOrrXKm/9/B20b67W21fe38yM+qcI8vg4rE/jvA6xHEo473pny8VV02?= =?us-ascii?q?eb5pjSCAoSUInxUlou+xhhub7aZig954XJ1XxjKqS0qSfC29MvBOsk1hmgZM1T?= =?us-ascii?q?MKWaGw/uC8caHdShKPQ2m1i1aRIJJPpS9KkwP8OiafSGwrKkPOFunT+9lmRH/Z?= =?us-ascii?q?xy0lmW+yp7UO7I0I4Pw+uE0QufSzf8kFChv9jvmY9eeDESGnCzxjL+CIFKYa1y?= =?us-ascii?q?eZoLCWCoI8Csw9Vym5jtW3lE+1K5AVMJxtOpcwKIb1PhxQ1QyVgXoXu/lCu9yz?= =?us-ascii?q?x4ii8mrqyE0SzQ3evicB4HNXBRRGV4i1fjP5S0hcgAXEe0dwgpiAel5UHiyqhY?= =?us-ascii?q?uqt/KXLTTFxLfyfoKWFiSa2wuaSeY8JV75MoqypXWvymYV+GUr79vwca0yT7Em?= =?us-ascii?q?tAwjA0aiqnuov/nxNniGKRNnBzo2TFecto3xfQ+MTcReJN3joBXCR4kSPYBkW4?= =?us-ascii?q?P9Sy4dqUlovDs+CnW2KvTJJTdzPnzYSatCu0/WdqGwGwn+ivmt37Fgg3yTX72M?= =?us-ascii?q?R3WijToxb8Z4bq2768Me15YkliHEX85NZiGoFijoswg4kd2WAAiZWI+XoIj3/z?= =?us-ascii?q?Ps9d2aLicnUNXyUGw8PO4Af7wk1jNWiFx5n+VnWA2Mtue8e1Ym0R2iIn4MBFFr?= =?us-ascii?q?2Y7LpakitpulC4tx7eYeBhnjcBzvsj8HAajPsPuAoxySWdB6sfHUdGMiPxkBSI?= =?us-ascii?q?9cqxrL1NZGaoc7i/ylZxncy7ALGFuAFcV27zeo0+Ei9o8sV/LFXM3WX86oHkZN?= =?us-ascii?q?bQd9IStgWIkxfHlOVVLow+luYRhSV7I239pWMqx/Q9jRNwwZGwpJKHJHl1/KKl?= =?us-ascii?q?Hh5YMSX4Z8YJ9THpiaZRgNqW35y1EZp7ATgLWoXnTe6zED0Or/vnLxiBHCc6qn?= =?us-ascii?q?iFBbrVBRWf51t+r3LTD5CrMGmaJGMDwdRsXhWdIVZQgAQTXDQ6hZM2DBylxMn7?= =?us-ascii?q?fEd+/DAR6UbyqgFQxeJwKxn/TmDfqR+uajcuUpefNAJW4xpM50fUK8ye9f5zHy?= =?us-ascii?q?9Z/p2ntgONLHCUZwVSAmENQECEAErjPra279na7+eYHva+L+fJYbiWsexRSeyH?= =?us-ascii?q?yoyp0otn4zaMMd6CPnh8APIlxEVPR3d5G97Wmz8XUSwYizrNb9KHpBe74iB4s9?= =?us-ascii?q?u//+rxVwLg/4uAEaVSPM50+x+sgqeDKvSQizxjJTZcy5MMw2XHyKIG0F4OjCFu?= =?us-ascii?q?dDmsEbMauS7LUq3QhrddDwQHZCNrKMtI86U80xFWOcHBlNP6zLF4geAuC1peTl?= =?us-ascii?q?zugN+patYFI26jL1PLHkCLO6qaJTfT2cH4fbu8SaFMjOVTrxC/ojebE0DkPjSF?= =?us-ascii?q?jDTmSg6gPvpNjC6BOhxSooa9cgxiCWL7VtLpdgW7MMNrjT0x2bA7nHzKOnQCMT?= =?us-ascii?q?diaE5NqaWQ4j1egvV6AWNB735lIvKDmyeW9eXYLYwWsfRzCCRui+1a+Gg6y6dS?= =?us-ascii?q?7CxcWPx1ny7SosR0o1Ghk+iA1DxnXwFUqjZMmo2Lvl5vNrne9plFRXnL5gkN7X?= =?us-ascii?q?mKBxQMudRlFsXlu7pMxdjXiKLzNDBC/srX/cocA8jbNtmKMH8mMRrnFj7bEhcF?= =?us-ascii?q?TSKrNWHYgkxSjuue9nuLoZgmspLsgoYBSqdHVFwpEfMXEkVlHNoeIJhpWjMrj7?= =?us-ascii?q?ubg9AU5XqkrBjcX8JavojZWfKUBPXgMjeZjb1faBsPzrL0N4MTNpf020Z6cFl1?= =?us-ascii?q?gJzKG1bMXdBKuiBhaBE7r19J8HVlTW0z3Fnlah+3738VDv60nR82hhF4Yesz6D?= =?us-ascii?q?fm+003KUbSpCssjEkxns3ogSqPfz7qMqi/R5tWBDb0t0UqKZz7Qhx1YhC1nUxq?= =?us-ascii?q?LDfEXaxejrt6eWBtlgDcpYNFGeRAQq1cfB8Q2faXau013lRbrCWnw1JI6vXBCZ?= =?us-ascii?q?tjjwYla4Cjr2hH2w55a941P6PQLrJTzldMnqKOojOo1ucpzQADPUkN7mKSdzMT?= =?us-ascii?q?uEETLLYmPTCo/uti6AyZhTRMZHUMV+ArovJ29kIxIeKAwDz807RbMEC+K/SfL7?= =?us-ascii?q?+Fu2jHjcOITEkw2V0VmEle57d219sjc02PV0001rSeCxEJOdDFKQFPYMpY7GLT?= =?us-ascii?q?cjqWseXR3ZJ1OJ2wFuTvTe+UqqkUhEOlHAEyEoQD6MQBA4Og0EbCLcfoNLQF0w?= =?us-ascii?q?ki5Bz3JFWZC/REYAmLnykDo8G+yp93wIZcKyoBDmV6NCW4+qzYphQ2gPaZWtc5?= =?us-ascii?q?fGsaVJMeNn0qQM26hzJZv3NYATm0yOIYyBKN7zngpiTQFzT8YN1jZO+Iah92Dt?= =?us-ascii?q?G55yk/+bCsiVHL6pXeO336NdN6t9/T6OMaopGHC+9UTbh9qErThohYRnywXGHU?= =?us-ascii?q?C9K1IYb/a5U0Z9zuFnm6SkC/iy4yT8rpPNatKbaHgQ/2SoZOq4Sb3S4sOtGjGT?= =?us-ascii?q?0EHBdwve4D7rpmZQIfe5o7fQLotwMmOqOlJAeY08mhTHi1JjtTT/hfy+K6Z7pN?= =?us-ascii?q?wCc3deC6yWEvTpcjw+m57E4BXpcKgQ/Cxfy7fYlRTTDzGmBBewXIvSc2jHZuNu?= =?us-ascii?q?Apz+gl3RzIr0cTMyqQdONzcmxFv8swBVSIIXV5EmA4XUOTjZLf4g6w2LAf5yRd?= =?us-ascii?q?n8tV0e1BtHjxoJrfbSmxV6O1sprVsjAvbd48r612K4zjLdOMtInCkTzHUJnQrg?= =?us-ascii?q?qFXTagF/pcm9hfPCJYQP5MmWE+IcIIoJdP51AtW8k5PLFAFK4sprW2ZjV+Fi4S?= =?us-ascii?q?0TUVV4We0zwemu28wafVlg+McJQ+NxwJqIlNgtkHXCFqeS4RuKijV4HSl2+FVG?= =?us-ascii?q?cLOhsT4hpQ6wIAjINwefrl4IXQRp9W1zFWu+50UjfMFpRw7Vv0UHuWgV/jR/i6?= =?us-ascii?q?j+ypxxhdzOzy3dkfWR5/D0ddx+JXlksnKLF3N6cQsZTQsj+Nb0/6unziyPe+Ll?= =?us-ascii?q?lL1cLUb0H4DJbCtWfkUiwT42YUSpVKyHHeE5QfiAt5aLoxq1VXPI+pYFzy5zo6?= =?us-ascii?q?yIR1B7O4T9ykx045rXYaQCenC9RAB/t6v1LXWT1lZpGrp4/mO5hJQ29f5oOSpE?= =?us-ascii?q?lDnEVqKS65xoJWK9tR7T4UQDhPvTKdscOoR81ZxM92CYUAItRktnf8GaNEOYSR?= =?us-ascii?q?rGYstrzp1HDZ5yg2sE2myzWrB6+4U+VZ8nURGgUzPWuerFUvAvAt8mfV/FHNtE?= =?us-ascii?q?x0/+dFCbiOi0VxvChyHopUCjZPy3+lM0x5TGNavOVCNKTVb8tcTuEuZR+oPhwz?= =?us-ascii?q?DuIm01CM/U5vh3v5ZTJ9thdC8SDHQwY0TTUVgqvqmTAGqsGoIyUaRIhMbTo8dC?= =?us-ascii?q?rKNhyUmThPvBlBb0FlRYoZDsxC+7EB0ote5tDCRlq0KSEZQBxiMRo10fhYlUFd?= =?us-ascii?q?q0iXZD7SDRG2evbVrh14Y9qeoNSvLPvn4AdNkpnnv/wg96UfW32mnhWgTsvQr4?= =?us-ascii?q?DgqtGHtFaCeanjPuKgZn/BSSTDggqrhbc4FZXK+TbcMBZDIZlg1XUkeYThCXLM?= =?us-ascii?q?PRlePaIUOVdUVaBgZtVaue1aY8hkeLgX9qNzGh2HQQ7gF5K1oPlAMFnTWSzULz?= =?us-ascii?q?+d/eynvYLT8bvdRPD4ZsyX23bIWb94Poth5DngHLfqzJVe9Vbo1fdr6kN6U0LJ?= =?us-ascii?q?MySboNTmPAML69GodlH+sZ0xATPWHJBwnWLxxkFaacUYXTCl/Y8FyJNd9HbwU/?= =?us-ascii?q?h30lbysO1V87lr95U376puyceuKqfYMe5avlN/AhiIGgVq8Y0gD3V5R29LeeIe?= =?us-ascii?q?NfHRcr4DgcDpseD3GLQd6AeJ9OxBddvHO0bBl9G9Cj6GUxxEmxwBqToAIQuCzP?= =?us-ascii?q?OFnrJ0ScK5pej4xk0t4kKxLhgdzLx34oeE4KWIrvfNbxTN1bgERrTqRsTro7Qu?= =?us-ascii?q?oUyS4/MklKQJemNofQKqC/QdWdQbxmf7yqAm1yQsHN3fH7j44v5MS2o5ni78m5?= =?us-ascii?q?B6B1gWHPcUEKGK/YRYm2c0ge3ZNtsYcqBYgGmPDgKkEqUfyXG39yuXPXNljQ/U?= =?us-ascii?q?3xH3W2Oz40f8rTVkTivU09fjjk1VW6GxBUdTQyWpPkt4vymUPAbytdr3vqM17F?= =?us-ascii?q?otMmH/sdKAm2SgNKlQH83lK9yWOTM0q04PjJ0tWtyv3pgWFsanL9cV7n5+defe?= =?us-ascii?q?6mOskyJauKdIm4ve7d+T+vXLHHmvlbeWq7OTyzBE0nI4p00w6si8NvHS4N2HW/?= =?us-ascii?q?Co130UTyp/oAbBUQC6paHcr1AOI0OLyF3LmIsIPt5HwXY4ylvq5O85QNI87A9e?= =?us-ascii?q?DJrPZ+sepTDvPzv52VOfY9YpWSmb1DtYAFb1HEJ3GKci32Lwp9rJmm3M+10pXI?= =?us-ascii?q?Zwc03nhRprD4omLUIt7FkXwiUdHggLdR+UEqukBUL7IosYTUIDcwiI3KCmeqcr?= =?us-ascii?q?2k1+2rGv5O7WbeFnAqoCKPZcgRCUnFhaHJIWvrcSQLRidF9B7KTXvBTtC5D7X/?= =?us-ascii?q?j6kno9Lfy1Q8FA/s8Dq3Qv+R2/SAS86Zhd87kXkpeIdrRLYZLUpsBz819n5SIT?= =?us-ascii?q?dixKmBVwlBK5UfsSpe/54NjbsYao6v60W6YwQ+Ua7AQ7B2NjgJTuml8jvMvX1+?= =?us-ascii?q?BGSoLPk4j/9xpNI3GSsobAzxZ8MfYOK56sfLt473UIPTQeKG4OPduYbPk8+Sxt?= =?us-ascii?q?PCzI51NcBsMMZNUYPNfCmA1Pkk3mQq1T+dbbGl6WDIdzbcMo43D0yD8r65s8VP?= =?us-ascii?q?jv6DusKZDY9VFNMOtJjD9wm9LauOgV3f3SBTAL4XmDdRd1xjmNy5+TBPvr4OqM?= =?us-ascii?q?yd7UV1IaHiEsSIdSPiCC+RG9SuqziprpThue6tXvj5ImaEKQWnuxkbwKsqlWC+?= =?us-ascii?q?5PlDn73jhFG4DxhvKVr8Sj6GtNuV1aC4Z/9xvFF7tDPp9jIxT3itGrRlRgBiv4?= =?us-ascii?q?YMzUeQQhuOyKxucL5OVyMFD+apEfIhIFzbL69HVUQxBqSLHopFaYXfgeaMFgSP?= =?us-ascii?q?zasnBf8ZhgJLMXPFiBuJzqqS9FqFUxAA8vdL8woSJVe1LLnA1UQan0vqAPihcS?= =?us-ascii?q?UN5+o09MGnmwNHg45zXZSaRflLORB+AN8jWPUqwOVF1lMixiTBOuw5ViYqank/?= =?us-ascii?q?9BvGNHmCN9vfcr3idpRBu5oyLsobwC1Sgn+LGiuzULoWZFQfmGkyfUFVVDy+wH?= =?us-ascii?q?jaUbC3bi71ywemUMbIv24Ll6OMvh9Igh43IkYRUgfi0LRvqgCyDuj6ySBoyArd?= =?us-ascii?q?NciASLuMrQcb+5NTISOaglyRL/W3h91RDTnBd28GQRRDWt99skJJigNsYkwSqo?= =?us-ascii?q?AnLXdFEW4qNGqMHxr0IETPMqaVN9x2VuysqHSTMDRMzBH2Y4lQYlZn9CcJ1d9R?= =?us-ascii?q?8WDa8ojSiUvqNe5AEbfC/UEpi5+onXhcrI1n09TdBkx23Ioq2Fgogn0GZim9Ny?= =?us-ascii?q?7y6BpG4ed+rGXM9wGnLzzJtQyfTiZ/WxteAKUIlmyLShUf8aNcmj/Wq22Il0VU?= =?us-ascii?q?K+w7QeHka5MPUdybvBVCelU2KYU/yRc2eQhzY5LlLy5R6wI10racdKqlQwMvfD?= =?us-ascii?q?hpFAlA3uT7d0Sj+WpVDF0GwpKfkaeB4uuIe7ZwwKS/YcZ+2dJegtw/0+D0ABb3?= =?us-ascii?q?3TEit1DO+2t0CinI5hN3Vm/0r6ffzn8hr6P9uKBhkEDYnao4Zq9vOkQGKBJWRt?= =?us-ascii?q?zAZ2PElz6+ffC0oxufFBfJqLmtjQndt72/Yfd/hxKS09psITmoV75ImM18eKdQ?= =?us-ascii?q?vezoz8JNHSpviYDebSz0EtemFdSboWfx/65589Pt4iQL3THL1ZvRsGCag9Wpwh?= =?us-ascii?q?OH/79LtoIwNrbg7ReLO0j9Hkpu2VYptUpmfW4UwrISbduh0Dz/m0QhJhb5CumX?= =?us-ascii?q?r+OpcwRihOr9d1EBtpAJNPG98crwqgG5OUmL27i9+2+0N/oeAKqrH9CvXL1NSl?= =?us-ascii?q?xYV+QYJW5UuRPDbeHKNrmFhqjvyugvfc1Zn8Ec3jecseVOh6XmHKdKTLHoC+Kj?= =?us-ascii?q?KSIMLzZVRK87mG0LJ2Sh+Rfjz2X7KatC24M/Vp+UI7yohmc+fI1Dwt66vU2MDu?= =?us-ascii?q?Z2FauiijsWSJO4VB41DQA+zRQQ5UQ+Kf8Gl5Ba0XcZf09OAWPNwmwdic5RRz7T?= =?us-ascii?q?tb3MuBIqihtVPM2llgeJLaNkTp3SE5VZMNIBSlPksmmXXZpWjFAXRAMsikLtFg?= =?us-ascii?q?gM2LARzp5klxn3wtZ2FGFmTnWdeROXYU29igaw2S7g1GFNUDkPCteU4+qKKyTf?= =?us-ascii?q?JnOohKmemws7UHi9lpITnVRMdGJyHQMKN2Pj1JA+XLpVgoeQIEvqM0W4csY5iB?= =?us-ascii?q?OlkLMEGexiPu1QHCy1H7d8Sw1KaVJyYb6nBHwKjZ3jhMpgm5v/GZj9b9ULDYap?= =?us-ascii?q?H5QvrSMCsjVjGHSjU+C0Gp+U2ru/AcpvqXPX8fokwIYiKVEAMTpLpgrdvXDmDI?= =?us-ascii?q?guBjYZsKhOyaWyD3VS14m6oyBjpRuUCKXfUDCRHcb2X9j2pEpAyiOvhM8Grqb7?= =?us-ascii?q?KC3aVVQe0WDZVIcvCCXdvYfepRJywpljUEIuq8ecPTr6oh2FLSUWQZC7XI9EGZ?= =?us-ascii?q?TEOOQPycwjXrXZ8Pv4g1oSol4dTQkTVyE6vWPraTvTmu8pS3jCyAo+3RSnEtY1?= =?us-ascii?q?ApgOIFGGSO3htAKGYEC9ETo0HtRaiAal1D1HIzlOJuxQEDeB5pXn1ozHJWgO63?= =?us-ascii?q?GtdFRl4MkGOuXPoGYUhsDDM++E+F/gz/bN8btMDNWWBe7LoMSIsaLPku8oXXPr?= =?us-ascii?q?UfwOox1jJ8vCM6qzmdD09ajg+d8arQG6R8xrlZ6Gk94f55Q0+PQzTFcmfb1IWq?= =?us-ascii?q?EcRPyjlyoSOs682Bpe1pNb1Ht6llEVwKBmRwPdmb8jdfAk/u3w7nmRewGzCXO3?= =?us-ascii?q?o45zEQPmRRcOd+yOtyq1DJcdHa8muV67Jnr1GkX1XYQoGo0YBGX5m6nT6zbjNG?= =?us-ascii?q?JHDyT50=3D?= X-IPAS-Result: =?us-ascii?q?A2HoBAByojxY/wHyM5BeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAR+BW7tXJId4UwEBAQEBAQEBAgECXyiCMxqCHAIEAQIkExQgDgMJAQEXK?= =?us-ascii?q?QgIAwEtFREOCwUYBIhMBAGvDj0qAoNoh16GPoh2EQGFfQEEmlSBdodihyGKK4Y?= =?us-ascii?q?UkX1VXhdAgzccgV5xhV+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:38:23 +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 uASLcKtG024957; Mon, 28 Nov 2016 16:38:21 -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 uASLZJUi089989 for ; Mon, 28 Nov 2016 16:35:19 -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 uASLZHPN024116 for ; Mon, 28 Nov 2016 16:35:18 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1BuAAC9oTxYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF6t0mELYd9UwECAQEBAQECEwEBAQoLCQkdhRkGJ2JRVxmIbQQBrw49hBSHXoY+jwUFmlSBdodihyGQP5F9gUqDJQxGHIFecYgNAQEB X-IPAS-Result: A1BuAAC9oTxYhyIeaIFeHAEBBAEBCgEBgzgBAQEBAYF6t0mELYd9UwECAQEBAQECEwEBAQoLCQkdhRkGJ2JRVxmIbQQBrw49hBSHXoY+jwUFmlSBdodihyGQP5F9gUqDJQxGHIFecYgNAQEB X-IronPort-AV: E=Sophos;i="5.31,565,1473134400"; d="scan'208";a="5848399" 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; 28 Nov 2016 16:35:18 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3ArXYozxbCK8pZ4FouX+Nm58j/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoMW5bnLW6fgltlLVR4KTs6sC0LuN9fu+EjVcvN6oizMrSNR0TRgLiM?= =?us-ascii?q?EbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ/iOgVr?= =?us-ascii?q?O+/7BpDdj9it1+C15pbffxhEiCCzbL52Ihi6twvcu8gZjYd/Jas8ygbCr2dVde?= =?us-ascii?q?hR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG87+MPktR/Y?= =?us-ascii?q?TQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD+/4apnVAPkhS?= =?us-ascii?q?EaPDM/7WrZiNF/jLhDrRyhuRJx3oDaboKSOvV8cKPQZs8WSXZbU8pNTSFNHp+w?= =?us-ascii?q?Yo0SBOQBJ+ZYqIz9qkMWoxu/GQasA+fvxSVThnTr3qM61OMhERrd3Ac9GN8Otn?= =?us-ascii?q?XUo8nyNKcWS++117PEzTTEb/NRwjf985PFchUurPCDR75wdtDRyUY2Gg7Dk16e?= =?us-ascii?q?qpTlMiuI2ugTt2WX9fdsWf6ghmI9pQx9viKjy8kjh4XRhY8Z10rI+CR4zYovON?= =?us-ascii?q?G0VlJ3bcS6HJdMtSyXMZZ9TNk4TGFyoik6z6ULuZ6lcygOz5Qq3xvfavOaf4SS?= =?us-ascii?q?+hLjU+KRIDdkhH17ZL2/hxCy8Um5yu3hSMa4ylFKrjBKktXUt3AN0QLc6tSfR/?= =?us-ascii?q?dg4Eus3SyD2x3P5uxLO0w5m7bXJ4Qvz7M/jpYTtF7MHi7ymEX4lq+WcUAk9/C1?= =?us-ascii?q?5er7f7vquoeRO5FvhAHjPKsjgs2wD/wgPwgLUGWa9v6w1Lr5/U32WLhKiPw2nb?= =?us-ascii?q?XesJDeP8sbvbS1Aw5S0oYk8Ba/FCyr388fnXkaKlJKZAyIj5PzN1HLL/35Au2z?= =?us-ascii?q?g1O2kDdk3/zGJKHuAo3RLnjfl7fsZa195FBYyAoyy9Bf+p1VB6odIPPzRkDxtN?= =?us-ascii?q?vYAgU/Mwyv2enrEtp91oQAWTHHPqjMK67WsFmV9sozMuKMY8kToz+7JP87tND0?= =?us-ascii?q?inpsv14Weq2gxtM2b3ejBbwyJUSSZn7lmZEAFmARpSI7EPysj0eNB20AL02uVr?= =?us-ascii?q?4xs2loQLmtCp3OE9ig?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0G3AAByojxYhyIeaIFeHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgw0BAQEBAYF6t0mELYd9UwEBAQEBAQEBAgECEAEBAQoLCQkdMII?= =?us-ascii?q?zGIIeBidiUVcZiG0EAa8OPYQUh16GPo8FBZpUgXaHYochkD+RfYFKgyUMRhyBX?= =?us-ascii?q?nGIDQEBAQ?= X-IPAS-Result: =?us-ascii?q?A0G3AAByojxYhyIeaIFeHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAYF6t0mELYd9UwEBAQEBAQEBAgECEAEBAQoLCQkdMIIzGIIeBidiUVcZi?= =?us-ascii?q?G0EAa8OPYQUh16GPo8FBZpUgXaHYochkD+RfYFKgyUMRhyBXnGIDQEBAQ?= X-IronPort-AV: E=Sophos;i="5.31,565,1473120000"; d="scan'208";a="1100274" Received: from mx1.polytechnique.org ([129.104.30.34]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Nov 2016 21:35:17 +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 350D8564909 for ; Mon, 28 Nov 2016 22:35:16 +0100 (CET) From: Nicolas Iooss To: selinux@tycho.nsa.gov Subject: [PATCH 2/2 v2] libsepol: detect duplicated symbol IDs Date: Mon, 28 Nov 2016 22:34:44 +0100 Message-Id: <20161128213444.6738-2-nicolas.iooss@m4x.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161128213444.6738-1-nicolas.iooss@m4x.org> References: <20161128213444.6738-1-nicolas.iooss@m4x.org> X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Mon Nov 28 22:35:16 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 | 3 +++ libsepol/src/policydb.c | 27 ++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/libsepol/src/conditional.c b/libsepol/src/conditional.c index e1bc961b2b52..2883aeb6fab0 100644 --- a/libsepol/src/conditional.c +++ b/libsepol/src/conditional.c @@ -551,6 +551,9 @@ 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) + 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 26cdd9b13516..ed4bdc8c821e 100644 --- a/libsepol/src/policydb.c +++ b/libsepol/src/policydb.c @@ -932,6 +932,8 @@ 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) + return -EINVAL; p->p_common_val_to_name[comdatum->s.value - 1] = (char *)key; return 0; @@ -946,6 +948,8 @@ 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) + return -EINVAL; p->p_class_val_to_name[cladatum->s.value - 1] = (char *)key; p->class_val_to_struct[cladatum->s.value - 1] = cladatum; @@ -961,6 +965,8 @@ 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) + return -EINVAL; p->p_role_val_to_name[role->s.value - 1] = (char *)key; p->role_val_to_struct[role->s.value - 1] = role; @@ -978,6 +984,8 @@ 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) + return -EINVAL; p->p_type_val_to_name[typdatum->s.value - 1] = (char *)key; p->type_val_to_struct[typdatum->s.value - 1] = typdatum; } @@ -995,7 +1003,8 @@ 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) + return -EINVAL; p->p_user_val_to_name[usrdatum->s.value - 1] = (char *)key; p->user_val_to_struct[usrdatum->s.value - 1] = usrdatum; @@ -1014,6 +1023,8 @@ 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) + return -EINVAL; p->p_sens_val_to_name[levdatum->level->sens - 1] = (char *)key; } @@ -1031,6 +1042,8 @@ 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) + return -EINVAL; p->p_cat_val_to_name[catdatum->s.value - 1] = (char *)key; } @@ -1051,7 +1064,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; @@ -1060,13 +1073,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; @@ -1082,7 +1095,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)) @@ -1118,6 +1131,10 @@ int policydb_index_decls(sepol_handle_t * handle, policydb_t * p) ERR(handle, "invalid decl ID %u", decl->decl_id); return -1; } + if (p->decl_val_to_struct[decl->decl_id - 1] != NULL) { + ERR(handle, "duplicated decl ID %u", decl->decl_id); + return -1; + } p->decl_val_to_struct[decl->decl_id - 1] = decl; } }