From patchwork Thu Dec 29 18:45:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guido Trentalancia X-Patchwork-Id: 9491357 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 091EA60488 for ; Thu, 29 Dec 2016 18:47:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ECB851FF1D for ; Thu, 29 Dec 2016 18:47:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DE89E22BF1; Thu, 29 Dec 2016 18:47: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=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (emsm-gh1-uea10.nsa.gov [8.44.101.8]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E1901FF1D for ; Thu, 29 Dec 2016 18:47:11 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,428,1477958400"; d="scan'208";a="2353119" IronPort-PHdr: =?us-ascii?q?9a23=3AoqFRlRZLSDukzqEi9y5MuV7/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZocm8Yh7h7PlgxGXEQZ/co6odzbGH7+a4BSdZucbJmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBq7oR/NusQZjoduN7o9xxjUqXZUZu?= =?us-ascii?q?pawn9lK0iOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ7FGFToqK2866tHluhnF?= =?us-ascii?q?VguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8qlmRAP0hC?= =?us-ascii?q?oBKjU37XnXhdZ1jKxZvh2uvQFwzJDOYI+VNfpxYKfdcs4HTmRDQMleTTFODZ2m?= =?us-ascii?q?b4ASEuQOIeFYr5P8p1sIohu1GA2gCe3zxjNNgHL507c60+A8Gg/Y2gIuEc8FvH?= =?us-ascii?q?DNoNnoKKseVOa4x7TKwzredfNbwTTz5pXIfB4/r/+DX7xwf83exkk3FQ7Jk1ud?= =?us-ascii?q?ppDqMTyLzeQAqHSb4uh6WO6zkWMrtx99rz6yzckskInJgYcVx0jF+yVkwYY6ON?= =?us-ascii?q?q4Q1Nlb96+DpRQsT2aOJFyQsw4RWFnpCc6xacbspO8cygK1ZUnyAPYa/Gcb4iI?= =?us-ascii?q?+AzsVOCNIThigHJqYrS/iAqz8Ue60OH8UNe70EpToydDj9LCuHcN1xnJ5ciGTP?= =?us-ascii?q?tw5l2h1iiT2ADU8OFLPFo4mrbCJ5I427I/jIIfsUvdES/wmEX2i6qWeVs59eip?= =?us-ascii?q?8eTofrLmppmGO4Bokw3yK70ilda5DO8lMQYOR3CW9fmz2bDs50H0QKhGguconq?= =?us-ascii?q?TWrpzWP9kXqrakDwJVz4ov8RSyAja83NkXk3QLNlZIdRGBgoP0IV/BOur4Au26?= =?us-ascii?q?g1m0lTdrwO3JMaP5D5XWK3jDjK/hfbFg605A0AYzzc5Q55ZTCrwZPPL8QFXxtN?= =?us-ascii?q?3FDh8iKQC03+bmB8l91oMZQ26PBLOWMLjOvlOS4+IvIu2MaJcUuDb7Nfcl++bj?= =?us-ascii?q?gWI2lFISZ6Wk3YYbZGqmEvlpPUmVe2fgjs8EEWgQvwo+SOLqiEeFUT5Wf3uyRL?= =?us-ascii?q?wz5jU6CIKgEIfCSZmhj6eG3CemGJ1Zen5JCkuXHHf0d4SLR/cMaCWILs9niTwL?= =?us-ascii?q?T6KtS4Am1RGwrAP60aZoLvLI+i0EspLuzNp15+rVlR4o6Tx0D96S02eWQmF2mW?= =?us-ascii?q?MIQTo207pkoUxh1FiDy7N4j+ZfFdxJ6PNDSh06OoLEz+xmF9DyXRrMftWLSFm8?= =?us-ascii?q?XtqmAioxTtU3w98PfUZwANuijhTe3yulGLAVirqLBIAp8q7G2HjxPcl9wW7c1K?= =?us-ascii?q?Y9l1kmXtdPNWq+i65n6QfcHJDGk0OYl6a2cqQRxy/N+3mdwmWQpk1YVxRwUard?= =?us-ascii?q?V3AFekTWtcj55l/FT7K2FLsnNQ1BycifJaRUbt3pjE5LS+39N9TEZGK9gWCwBQ?= =?us-ascii?q?yHxrmUdorlZ30d3DnBCEgDiw0c4GqGOhIkBiq6v23eCzluGk71bEP37elysnW7?= =?us-ascii?q?QVEozwuSdU1uy6K1+gIJhfybU/4T37QEuDs/pDVwAlm92szZC8aapwthZ6hcZs?= =?us-ascii?q?s970lB1WLcrQN9P5igILtlhl8RaQh3uFnu1xpvAIVajccqtG8qzBZ1Ka+A0FJA?= =?us-ascii?q?djSY3ZbrN73SLmn+5RGva6jM1lHYytmW4KQP6PUmq1r9pg2pEFQt82l/2dlPz3?= =?us-ascii?q?Sc/onKDBYVUZ/pTEk37wJ1p6vbYikm/I7UzWdjMbO1sj/Zw9IpAPEqxQq+cNtF?= =?us-ascii?q?N6OEDgDyGdUAB8eyMOwqh0SpbhUcMeFc9a40O8ameOWc2KOwMuZvgi+pjWNd4I?= =?us-ascii?q?9nykKM7S18SuzW0JkZ3/GUxAyHVy3zjF25qMD4hZhEZS0OHmq40SXkCpRRabd0?= =?us-ascii?q?fYkXCGeuONa6xtBmh57sQnJY71CiB0gc1M+uYxqSYET33RdM2kQPvXynhSy4wi?= =?us-ascii?q?R3kz4zraqf2zHOzv/hdBUdOW5LQ3RigU3rIYiugNAQRFKoYBQxlBu5+Ub6wLBW?= =?us-ascii?q?q75iIGnJQEdHYTL2Inp4XaSss7qOeclP6IknsS9PSuSzfUiaSqLhoxsdyy7sA3?= =?us-ascii?q?FRxDQleDGxppX4nxt6hXmGLHlvrXrWZ8dwxQve5NPGX/JR2CQJRDVggznNGle8?= =?us-ascii?q?J8Wp/cmTl5rbsuCxSWahVplUcSTwyYOAqTe75WpvARKlhfyzncfnEQci2y/hy9?= =?us-ascii?q?ZqTTnIrAr7YoTzzKS6P/hnfk5zBF/g8Md6AYd+kow+hZEVw3cagI+Z/XwZnmfv?= =?us-ascii?q?Kd9bw77xbGIRRT4XxN7Y+Abk11dnLnKV2Y35TG6dz9B/Z9akeGMZwT8978VQBK?= =?us-ascii?q?eT9rxEkjN/okCkogLJffh9gjAdxOMy6HEHnu4JuRAiziGGD78OGklYODDjmA6T?= =?us-ascii?q?79CitqlXYnigcaSo3kpkgd+hFK2Coh1bWHvhfJciHCtw7sFhP1LXy3D88J/reM?= =?us-ascii?q?PXbd4JsR2UiRjAhfBPKJ0tjvoKmTZnOWXlsH07yu40kQBu3ZagvISdN2pt/KW5?= =?us-ascii?q?AhhXNjDuY8MT+zftgrxEnsaRxYyvGY9hGjoTVpvyUf2oCC4StejgNwuWFD08q2?= =?us-ascii?q?ybGabGEQ+E9khmq3PPE5a2N3CYP3QZ1s1iRBibJExenA8URy82npgnGQC23Mbh?= =?us-ascii?q?alt25igN5l7krRtB0vhoNx77UmfbugiocCs7SJ+RLRdN9QFC+lvaMdeE4uJ0BS?= =?us-ascii?q?FY8YWrrBaRJWyDewRIEWYJV1ScB1/5I7mu4cPM/PKCCuWlKPvOZamOqetYV/qT?= =?us-ascii?q?wJKjzo1m/zGQOcmVOHltEeE70FJZXX9lA8TZhykPSysPmiLOccGbogy89zZ0rs?= =?us-ascii?q?+h9vTrQwTv6pWTC7dINtVv4R+2i7+ZN+GMnCZ5NSpY1pQUyH/Q0rcfwVoShD92?= =?us-ascii?q?dza3F7QAqTDCTLjLl69KFB4UdTlzNNBS46In2QlNJNTbhc/r2b52if41EVhFWk?= =?us-ascii?q?L7lsGve8MKP3m3NEnbC0aTKLSGOTrLztnpYaO6VLJdl/tUtxuttjabCUPjOCqM?= =?us-ascii?q?lyXxXRC1Le5MlD2bPABZuIylahZiE3XjTNb9ZxKnMd93kT03zaQ6hnzQM24QKz?= =?us-ascii?q?98c1lCrreI9yNXnu1/G3Bd7npiNeSEmCaY7+3GJZsNtPtrBSp0l+xE73Qm17tV?= =?us-ascii?q?7CZERPlrlyfIqN5hvU2mmPGVyjV7SBpOtipLhIWTsEVsI6rZ8IVAWXHB/B8W42?= =?us-ascii?q?WfFQkFp9x/CtL1o6BQ0N/PlKDtJzhe79LY58wcB9LbKMifKnouLQLpGCLIDAsC?= =?us-ascii?q?VTOkKGffiFZGnf6P8H2atII2qp/2mJoBUrVbTkA6FusGCkR5G9wPOI13UikqkL?= =?us-ascii?q?KBic4H/36+rB7RRchBpJ/ISveSDe/oKDaDgrlOfwEIzq/gLYQPKo373FRval9g?= =?us-ascii?q?nIvQA0rQRctAoiNgbg8uu0VN7HZ+Tmw1203/bAOi/H4TGuSwnhIsjQt+e+st/i?= =?us-ascii?q?/241grPlrKuDcwkE4plNr4mjCebiT+LKiqXY5MFSr5rFMxPYn4QwZodw29h1Zo?= =?us-ascii?q?NDPZR7JXlbRgb3lniBPbuZtMGf9cSrdIYBkOyvGLf/8oy0hTqj27xU9b4uvIEY?= =?us-ascii?q?BtlAolcZ6rqXJNwB9sY8AuKqzRPqVJyEJchqWUvi+nzuox2hMRJ14R8GOOfy4F?= =?us-ascii?q?oFYHNrY8KCq24ONh8guCmyNdd2gKUvoluPNq9kcmNOSHwCPsyblDKlq+N+aHNa?= =?us-ascii?q?OWp3DAldKUQlM3zk4Ii05F/b1s3cc5dEqVVl4gzL2KGBQTMsrNNwJVYtFO+3jU?= =?us-ascii?q?eCaBrf/CwYlpP4mnEODnU/OOvr4Ogk24BAYpA5gM7sMZE5mszEHYLcDnLLsfxh?= =?us-ascii?q?U2/wnrIVSFDOhTeB2VijsHpNu/zJBv14lHOj4dGXl9MTmw5rvPoA8lnuCMXNMt?= =?us-ascii?q?b3cZWYsELW42V9e8my5CvHRADSO70uQHxwie9zX8vDjfDCHgb9p/Y/eZfQlsB8?= =?us-ascii?q?+t+Toh6ae2k0LY8pXFKm7hNNRioMLA6eQUp5afEfNbU7l8v13am4ZGW3ygS3TP?= =?us-ascii?q?HsKtJ5jsd4ksasT5BWugXVyhijI6UtzxMc23IaiSmwHoQohVsJKF0z8/KM+9DD?= =?us-ascii?q?AeGwtwpu0Z4qJzexEDaYIhYRH0rwQ+K7C/IACA39WgWWaiNyZZT+JFwuW8e7xX?= =?us-ascii?q?yDEsY/Sgx3Q8S5E21e638VQCRJsSlBHR2e6jZ5VCUSj0AnFdfwLPpTAnmGhnN+?= =?us-ascii?q?cyxfwywBzOsVkBKTyLc/ZpaGNctdEmGVySOWl2CnY/R1KElorM/Aqs37EU/ytA?= =?us-ascii?q?kNdZyvFKsH/7vpDDej2sQ7CrpY/TsyU+cdgsu7dxPpD7IsuaqJPemSTSQ4TMvQ?= =?us-ascii?q?2AVy66EeZalsVLLSJGXvZIg2AlOM0BuYpH80YxUNkxJ6BXAqk2ur+qcSZkDTIV?= =?us-ascii?q?zSIBVIOAxjwDjf2627vGlheda5siMBscsJpemNcdVTB5Yj8Grq+5S4rWj3OESn?= =?us-ascii?q?QMIAoL8QRM5QcAlohsfuDl4IvFV4JDyz9Wov1uSSTHDJ9o+EXnSmuOm1j3VO2h?= =?us-ascii?q?k/C13QJV1P/s3cMbVwR5CUhB3OtWl0woKb9xK6kMvo7FrD6IdUXmvG3z0uuqPl?= =?us-ascii?q?9RxtPId1fgForKqXL8UjEA+X0TXYJA0nXfFZUOnAVncKkroVVNIIahekb4/TMp?= =?us-ascii?q?3J9mH7iiWsCt3lolo2sGSz2sE9VfF+FsqEjXVyF9Y5C3tJXlPI1fTXRO952bsF?= =?us-ascii?q?pWilhiMzCnxppGMMFC+CQMXThVrTWaptuyR9VJ2dVqAJ8UPtd/p3D9FbteOJiX?= =?us-ascii?q?on05przvynjd+zAnqFm03Si9FbWkQuxe5GARBgIpJ2GCpUY1FOss7n3e8lbTvV?= =?us-ascii?q?Bo5+1bHKSAjV1toDZhGZBDHipG1XK/IFtvV3RJr+JaKKDRc8xdXfYyfwOvNAIi?= =?us-ascii?q?Gv4mxUCJ+lt0nXjhaSxoqgRa4zzdXxUzVSQNmLfigyceqsa8NjIBV5JIdy8ubz?= =?us-ascii?q?nbJAKfmCBXuhlfa0VrW5AWAtZF578b0pFO/srHU0qsLz8KXAB6PAIizfVfjVJD?= =?us-ascii?q?sFmfeS3FAwukb+rAsh12fceUrc6mNvf58RxGioz5ru836b8PR3q8mQ2iWdretZ?= =?us-ascii?q?PztsWWtkuSc6f1K/W8YXjFTDfWlxCxi7AkD53E/yXINQpbLJ56yWE6bpf9E27L?= =?us-ascii?q?Og9GJ7kaJ0pdWqB2c9JGovpVZ8V8YqYG5bdtBg6bRhPoAIGgtuNGLkvVRTjELC?= =?us-ascii?q?WM6e2/oYPS7bzBUufsfMqMyGjbQ6hvJJd19SH7G6v20Y9Z4kf2xvBt9kZhRFja?= =?us-ascii?q?LyyBqc/uKhkN5Ma8akvopocpEi/OAJdsjHrtwVlNd8oNTC2w6psYzI5W5W3tRu?= =?us-ascii?q?1mykjzqPNd97165okt+bxpzt20JajKI/RArUBnGgSUBhlt9pg1Amh/QH5eb/QM?= =?us-ascii?q?J/jPZqQWk9ruq/zpGKMK8hGV/fJWacffLUHbhsa/Ei2cSQBDnAoZsjEaIBeT2+?= =?us-ascii?q?KHlqNpR8uovvT22kUo41eiNBEG16xt6Z2C+qWWuO/ddwHRwqQcWqj2WsPzqawh?= =?us-ascii?q?u1mM6vI5lL4BYHB1bhajEOgaSM4S2HnswrwtzS0xDczPBbTg9+BfV3ghhDLvh4?= =?us-ascii?q?h9H0kKGvMTBbeL5Z9ennsilOPEKt0babtCmmGSFR6+DrAN13ir6zeNIGZ/hhHC?= =?us-ascii?q?yRbwQXm87FXuty93XTPMz8v/kkpSTrS3GV1SUDS3NkBlqz6PIQ7otMbtuasv8k?= =?us-ascii?q?E2M2vktNaTm2u9Ir9XGNf/JNOEKykuuF0XlIExRsCo2Y0DHNqyOtMR8HVgYfvC?= =?us-ascii?q?92OkiTVOrrxBh4XA/sGV4enYEmO4j6KEsbmNwi5XymQgt1El9t+gLu3O58GNQ/?= =?us-ascii?q?mw1WYeVT1/uwzaXx6xsLPbsUsZOUmW0EfPhIwKP81W3Xgi2UHg/+gvWtUz9B9R?= =?us-ascii?q?FozYffMNuSjzOCfowVaYe983VDOR0z1ZHlLvFll3BbYz1XnsvM3Tk3fQ4FooSp?= =?us-ascii?q?N2d0P5mRx9F584Jl416FgL3ioDFhAAaR+GDLGpAUTlKZULVU0YZBuawre1YaY3?= =?us-ascii?q?0ld1wr+14+/Td+N8DbIXNvlBlg6OgERbGpUOvK0YRLJxYF5d9KjSpgT4CojnWf?= =?us-ascii?q?bmlWAqOv2uXsBa690ZuGc+4gaiXRqv941P77EBiJCHbqREe4TDvNhg70d74j4C?= =?us-ascii?q?bilNgB95jxOlXuATuvvu4t3asJWy7OahSrotRusQ9xguBGR+lIH8gFY9rtHLz+?= =?us-ascii?q?1cUJHaiZzj8ABRJH6HoJza3ARhJucVJIKreblh+28BJycAO3IEJcCWZOUk4y9x?= =?us-ascii?q?LDXT4ERPAscXZdMdPMfAgg5UhVP0V7FU7MrUAEeYC510d8Aq8WX41Cw1/YE7Uu?= =?us-ascii?q?b65z+8PYrf4E1VP/NfkCVsk8rPpPMPzvrMEicX7meWawNuzyOZ0ZaNFez//eqS?= =?us-ascii?q?x9HPTV8GGDA5U5tFLjqY5QOnXva1lInuUg6M6M/zgZc+eVmVRnOvnKUKrLxMEe?= =?us-ascii?q?9GiiX0xDReEJ76h+6Nudq29GRXrkFHEJp07RDdGaVeP490Ng7kmcSwXUhzGDf/?= =?us-ascii?q?d9/IeRY0v+qW3OgM6f1kN0TifY8bPg4Ey7Xi5HVOTwtuU7D3sUybXeIQeNtmUO?= =?us-ascii?q?nLrm1R6Y97N6APO0WSq4LwoTdVslA2BxUpZ6UqojxdbEnOkxVfW7zot74Ylgsc?= =?us-ascii?q?Tdl5tFdUGW2qJGIx+zrHVKpSjKmLC/wZ6y6TQbIKU0VpNCN+Xhy01Y52e7Szgf?= =?us-ascii?q?BIrmNGny16oPgw0DxqXhi8tjP2p6ILxz0g/Ku0tDIbuXxKVu+eiTvHCU1fzPQW?= =?us-ascii?q?iqcRE2ri6Uaib3kHdoTy5qdoKN/9+okg7HQ/YAkjcDcdXeu6ESHwkrmEAoqRv9?= =?us-ascii?q?JAnBSNotnBbaevLSgOMbQw0R3jSGJn0gfAgBZo8HAGQjGh7N84Ooq9Odwqxjez?= =?us-ascii?q?GWTBclYD/L9JutPrtVEXVOs2dU9hwGJ738iIWCINQtDPG2EyjgQjcmVLbpZD6R?= =?us-ascii?q?4cF6k1jTeFpa1G8R8OYDbUCIup4I/QktnU2XMlV9dl2nrWprGZhpMtyHBlndJ0?= =?us-ascii?q?4TKJuHQWbePYSNVgAnn01odY0uz+fO6gsuUIRYpp0rihV+UCMsa782usxJpqQl?= =?us-ascii?q?OlxqgZH1ehP+8M2qzbUzy8RWOFVuqFdWmMnzAkMk/9/hSoIVg3Z91Mr0AjKOfC?= =?us-ascii?q?gYRclwL5W7NuWiqQvUPbzHAkMe4CdQI2v4enewoQQOENZ+icIfUuz+A/CVsNaX?= =?us-ascii?q?/JBih2C+6tvF6znYh7JW9v4UHnbuTs6AzmNsWdGgUcG47AspFx4eC6Rn6GOXJ4?= =?us-ascii?q?zR1yIlN79+HEGlQ1q+9TbpeRnd/Lh9hh1u4FbfhtOzUnutEPgoJj9ZWU0MCSfB?= =?us-ascii?q?HT0JnyK9/VovyDDvzR1UsqfH9VUqYDbQPz+Yo6IsYzW6fPErtBoRQcGa86TYQu?= =?us-ascii?q?N2f186F1Ih18cgrVZLmvmcnqoeSLZppIqHPM6FI/MjvcsQUZyvOoVQx7c4yqh3?= =?us-ascii?q?LqLZAyRjJAr8VtChxiHItOB8MPsRGqA5uVmKGnkd++5Vl2u+gQsar/EvrKzsi2?= =?us-ascii?q?351tX5hG4kyGJDnRBLRqgkt4ieS/mevA0oPvBsPkZdMLTux7TXTDarDaH4WwMC?= =?us-ascii?q?iCOsTidE5a67Scyq52Ug2NZCDlWKqLrDGkNPRh4Ugg1ox4ffbczD8z4LHfwtfy?= =?us-ascii?q?YX9Upju7p36TKJRf9EDKBfDZXx9MTPqF8WVlHa4QbYbv9ucBK98iwN+a4wZt6j?= =?us-ascii?q?ROys2FLLa9rkXUwEJ0aYrbLFf12yY+QYQFOwqwMU0wgWLCsXTdBXNcLtS4Kclz?= =?us-ascii?q?ntmaEwbh505rmWEifmRBAHbnRc+NOWgH3MKzfAOK+xxPD9YCh+64Z1U1t6yzSe?= =?us-ascii?q?ltP5VKh/+qtLEZntpzLCHPXsdaNTnKLLBqJjpREvnPpF8wbx8Kq7g1QIY1aoSQ?= =?us-ascii?q?L04cNUeAyD/yzRHc3kHucNyszqmJKj4M8npb17LFzSRMpw6htPaehs3sTqvUbI?= =?us-ascii?q?nyXPHIKyolSjCaSiguEUaz51irpeAIvPyGLmcDuloUeD6dCBYPpqBzqtjdFmvT?= =?us-ascii?q?mexlfJ0Xi/GWQiTwSCxjlKouHSZGrkGMTOAFFQnRdXPhh3BcuAO6LP9W4X3ld6?= =?us-ascii?q?GYxrZSW+EOGYtDbPmZQ9reefBDKDYkkToXOPq8f9LCtbY2zErIQnECHqnL6lKe?= =?us-ascii?q?VkiWTeKYxz3wQIUVsJI4ui0y+tLfhiV3CbjHP66Dpz6y9Y61lCOYtvfCWWktYk?= =?us-ascii?q?w1huUCDXKfwBlBLmELFdUVuEDrQq6daEdAznUpifhh2xUUYgR8TmVu0mFKnPa6?= =?us-ascii?q?AsBZS0QbjGCpQPIdd113ETUw/VOK4g31fNwAtsDTR3NE+rsKV4UdMOEi6JPLN6?= =?us-ascii?q?sI3PYpwDVmrTQhvCqGCF9digOF87HMHKJn3LFC/nc38O1sUkGUXTzfdmnHyoy7?= =?us-ascii?q?C8NA3iphvXDl19DJvuB2LrdbqZt2AEsRASJxINDR5zdBUXv72AGqpRa0ACyeIC?= =?us-ascii?q?4F4DYMPSEFefx6wPRhsBbJaNnB7Vidt7wlqESxEgaLC6e01IZNCs73yQWycTNL?= =?us-ascii?q?fimzF5BqtvZNk84fYaEiZYi5GVDBNAn+DhmDtiAK7hfqp6qkDctQzmUZiKUsJ8?= =?us-ascii?q?njX5MWAtnBwDF433FIyYIUzW2fB9PQepz05s9jCHEQKJa9U3jrYZPOPzX0rvwD?= =?us-ascii?q?1IkhF1qKYuUAIG1bq4I2lnvtb16w+4fw+SmNLqWjeDy8Js4BLZqoi25UgqndKI?= =?us-ascii?q?zi/fpCBmQb/ft0tcSVrn3aqzKBcZ7jZXL6wxM0JjWweM+T/td7KZdqYLR0R4hO?= =?us-ascii?q?QUUL5jIie/wwT/60pT330BPKW+l+sXtjdg7lEpSDzZleciJ64ZmiiFCas/fwXe?= =?us-ascii?q?LKXIzr/4T/NFUwjeNOb9iLpsnplo0=3D?= X-IPAS-Result: =?us-ascii?q?A2FxBwCvWGVY/wHyM5BUCR0BBQELARgBBQELAYMMAQEBAQE?= =?us-ascii?q?fgWuORqpsJodfUwEBAQEBAQEBAgECXyhCDgGBYgqCLAYBAiQTFCAOAwkBARcjB?= =?us-ascii?q?ggIAwEtFREGCAsFGASITwSwIDonAopTjHqCSgcKAWqFEwEEiGaGIIt3kiaJPhe?= =?us-ascii?q?GGo4vhA9YaEIugyF5gUdxg2KCcIIuAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 29 Dec 2016 18:47: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 uBTIl7lE014018; Thu, 29 Dec 2016 13:47:08 -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 uBTIjFdH196758 for ; Thu, 29 Dec 2016 13:45:15 -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 uBTIjFoI013539 for ; Thu, 29 Dec 2016 13:45:15 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1AqAABbWGVYh0c2WFFUCR4GDIM3AQEBAQGCCo5Gpl2EFoYiAoItAQIBAQEBAQITAQEBCA0JCR1yDgGEGAMDIwRiJQIUEgICVwYTiHSuNIFrOopKMoELi2+CUXWCNoJdBYhmhiCLd5ImiT6GMY4vhA+CAYQlI4FHcYNihR4BAQE X-IPAS-Result: A1AqAABbWGVYh0c2WFFUCR4GDIM3AQEBAQGCCo5Gpl2EFoYiAoItAQIBAQEBAQITAQEBCA0JCR1yDgGEGAMDIwRiJQIUEgICVwYTiHSuNIFrOopKMoELi2+CUXWCNoJdBYhmhiCLd5ImiT6GMY4vhA+CAYQlI4FHcYNihR4BAQE X-IronPort-AV: E=Sophos;i="5.33,428,1477972800"; d="scan'208";a="5892367" 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; 29 Dec 2016 13:45:11 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3Au/rzgRXZuMU5BsLOOJ7Dc6oVcaTV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYbRWFt8tkgFKBZ4jH8fUM07OQ6PG8HzRcqs/Z4DgrS99lb1c9k8?= =?us-ascii?q?IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBo?= =?us-ascii?q?KevrB4Xck9q41/yo+53Ufg5EmCexbal8IRiyogjdrNUajIRtJqos1hfEoWZDdv?= =?us-ascii?q?hLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfM?= =?us-ascii?q?TQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklD?= =?us-ascii?q?sLOjgk+2/Kksx/lqdbrhC/qBNl3oHbfpuVOvp/fqzDedMVWHdKUMRPWCNbH4yz?= =?us-ascii?q?cZEPBPccM+lEqIn9vVoOrR2xBQKxAO/ixCNEinrw0KYn0eouDBvG0RQjEdwTsH?= =?us-ascii?q?rastv7O6UcUe+py6fHwjrNYuhK2Tr/8oXEbgosre2OUL92bMHfyVMvFwTAjliI?= =?us-ascii?q?qILlIjKV2fkKs2OG8eRgT/ygi2g7qw5rpjig3MEshZXIho0P11vJ8ip5wJs0Jd?= =?us-ascii?q?KlT052esKkEIFOuCGcK4t5WMciTHtuuCkmy70Jo4S3fC4Ux5Q73hPSbeGMfYaP?= =?us-ascii?q?4hLmTumRIDF4iWp/eL2hmxmy9lKgxfDmWsaoyVpGtzNJncPUunACyRPT7MiHSv?= =?us-ascii?q?x4/ki/xDmP1hrT5f1DIUAyj6bUN4ctzqcpmpUJt0nIAyz4mF3ugaKVa0ko4Oul?= =?us-ascii?q?5uf9brjmqZKQLY15hhzmPqgzmsGzHP40PwoPUmSB9umx2qfv8En6TbhMk/Y4iL?= =?us-ascii?q?PWsIrAKsQevqO5AxFa0oIk6xunFTimzcgYnXkcLFJAZBKHl5LlO0vQL/D3DPe/?= =?us-ascii?q?mEisnylxx/zcP73hHo3BLnnFkLj/YbZw801RxBcpwd1c5J9YELEMLf3pVkLzqd?= =?us-ascii?q?DUFho5PBa1w+bjBtV9zIQeWWeXD6+WLaPSsEKH5uU0LumQfo8apjD9K+Q/6P7q?= =?us-ascii?q?l3A5n0MSfaiz0pcNbnC3AOhmL12DYXXwmtcBDXsKvg0mQezxllKCVT9TZ3CvX6?= =?us-ascii?q?Mz/Tw7FIKnApvDRoCqmrCB2jy7EYdMamBJDVCMDySgS4LRQPoIaSSPMoc1iTEA?= =?us-ascii?q?VL68W6c9xBqus0n80LMhIe3KrH42r5Xmgfdo5uHU3S0o+DpoBsCU1WqMRikgkX?= =?us-ascii?q?4JSzgewLpyp1B0zl6F2qlxxfpVCYoAtLtyTg4mOMuEnKRBANfoV1eaJto=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0FwAADpWGVYh0c2WFFUCR4GDBkGDIMMA?= =?us-ascii?q?QEBAQGCCo5Gpl2EFoYiAoItAQEBAQEBAQECAQIQAQEBCA0JCR0wQg4BgWIKgiw?= =?us-ascii?q?DAyMEYiUCFBICAlcGE4h0rjaBazqKSjKBC4tvglF1gjaCXQWIZoYgi3eSJok+h?= =?us-ascii?q?jGOL4QPggKEJSOBR3GDYoUeAQEB?= X-IPAS-Result: =?us-ascii?q?A0FwAADpWGVYh0c2WFFUCR4GDBkGDIMMAQEBAQGCCo5Gpl2?= =?us-ascii?q?EFoYiAoItAQEBAQEBAQECAQIQAQEBCA0JCR0wQg4BgWIKgiwDAyMEYiUCFBICA?= =?us-ascii?q?lcGE4h0rjaBazqKSjKBC4tvglF1gjaCXQWIZoYgi3eSJok+hjGOL4QPggKEJSO?= =?us-ascii?q?BR3GDYoUeAQEB?= X-IronPort-AV: E=Sophos;i="5.33,428,1477958400"; d="scan'208";a="1906482" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from authsmtp30.register.it (HELO authsmtp.register.it) ([81.88.54.71]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES128-SHA; 29 Dec 2016 18:45:10 +0000 Received: from [192.168.42.214] ([151.76.43.98]) by paganini32 with id Rul71u00X2751LP01ul7p6; Thu, 29 Dec 2016 19:45:08 +0100 X-Rid: guido@trentalancia.net@151.76.43.98 Message-ID: <1483037107.25804.5.camel@trentalancia.net> Subject: [PATCH v2] libsemanage: special handling of the identity reserved to system objects From: Guido Trentalancia To: selinux Date: Thu, 29 Dec 2016 19:45:07 +0100 In-Reply-To: <1482966318.30976.5.camel@trentalancia.net> References: <1482966318.30976.5.camel@trentalancia.net> X-Mailer: Evolution 3.20.5 Mime-Version: 1.0 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 The following patch makes sure that the SELinux identity reserved for system processes and objects is skipped when adding users. A warning is produced when a Unix identity is found to be equal to the SELinux user identity for system processes and objects. This patch also avoids creating an extra record for a user if there is no prefix. Signed-off-by: Guido Trentalancia --- include/semanage/user_record.h | 2 ++ src/genhomedircon.c | 23 +++++++++++++++++++---- src/user_extra_record.c | 39 ++++++++++++++++++++++++++++++++------- src/user_record.c | 40 +++++++++++++++++++++++++--------------- 4 files changed, 78 insertions(+), 26 deletions(-) diff -pru a/include/semanage/user_record.h b/include/semanage/user_record.h --- a/include/semanage/user_record.h 2016-10-14 17:31:26.000000000 +0200 +++ b/include/semanage/user_record.h 2016-12-28 23:22:50.848589870 +0100 @@ -6,6 +6,8 @@ #include #include +#define SYS_OBJECTS_USERID "system_u" + struct semanage_user; typedef struct semanage_user semanage_user_t; diff -pru a/src/genhomedircon.c b/src/genhomedircon.c --- a/src/genhomedircon.c 2016-10-14 17:31:26.000000000 +0200 +++ b/src/genhomedircon.c 2016-12-29 17:50:10.781727455 +0100 @@ -181,6 +181,9 @@ static int ignore(const char *homedir) { static int prefix_is_homedir_role(const semanage_user_t *user, const char *prefix) { + if (!prefix) + return 0; + return strcmp(OBJECT_R, prefix) == 0 || semanage_user_has_role(user, prefix); } @@ -998,14 +1001,26 @@ static int add_user(genhomedircon_settin homedir_role = prefix; } + /* There should be no Unix identity corresponding + * to SELinux user reserved for system processes + * and objects */ retval = getpwnam_r(name, &pwstorage, rbuf, rbuflen, &pwent); - if (retval != 0 || pwent == NULL) { - if (retval != 0 && retval != ENOENT) { + if (strcmp(name, SYS_OBJECTS_USERID)) { + if (retval != 0 || pwent == NULL) { + if (retval != 0 && retval != ENOENT) { + goto cleanup; + } + + WARN(s->h_semanage, + "user %s not in password file", name); + retval = STATUS_SUCCESS; goto cleanup; } + } else { + if (retval) + WARN(s->h_semanage, + "There should be no Unix identity \"%s\" !", SYS_OBJECTS_USERID); - WARN(s->h_semanage, - "user %s not in password file", name); retval = STATUS_SUCCESS; goto cleanup; } diff -pru a/src/user_extra_record.c b/src/user_extra_record.c --- a/src/user_extra_record.c 2016-10-14 17:31:26.000000000 +0200 +++ b/src/user_extra_record.c 2016-12-29 17:17:26.168737139 +0100 @@ -37,8 +37,9 @@ static int semanage_user_extra_key_extra semanage_user_key_t ** key_ptr) { - if (semanage_user_key_create(handle, user_extra->name, key_ptr) < 0) - goto err; + if (user_extra) + if (semanage_user_key_create(handle, user_extra->name, key_ptr) < 0) + goto err; return STATUS_SUCCESS; @@ -54,7 +55,10 @@ static int semanage_user_extra_compare(c const char *name; semanage_user_key_unpack(key, &name); - return strcmp(user_extra->name, name); + if (user_extra) + return strcmp(user_extra->name, name); + else + return 1; } static int semanage_user_extra_compare2(const semanage_user_extra_t * @@ -63,7 +67,10 @@ static int semanage_user_extra_compare2( user_extra2) { - return strcmp(user_extra->name, user_extra2->name); + if (user_extra && user_extra2) + return strcmp(user_extra->name, user_extra2->name); + else + return 1; } static int semanage_user_extra_compare2_qsort(const semanage_user_extra_t ** @@ -72,7 +79,10 @@ static int semanage_user_extra_compare2_ user_extra2) { - return strcmp((*user_extra)->name, (*user_extra2)->name); + if (*user_extra && *user_extra2) + return strcmp((*user_extra)->name, (*user_extra2)->name); + else + return 1; } /* Name */ @@ -80,7 +90,10 @@ hidden const char *semanage_user_extra_g user_extra) { - return user_extra->name; + if (user_extra) + return user_extra->name; + else + return NULL; } hidden int semanage_user_extra_set_name(semanage_handle_t * handle, @@ -88,6 +101,9 @@ hidden int semanage_user_extra_set_name( const char *name) { + if (!user_extra) + return STATUS_SUCCESS; + char *tmp_name = strdup(name); if (!tmp_name) { ERR(handle, "out of memory, could not set name %s " @@ -104,7 +120,10 @@ hidden const char *semanage_user_extra_g user_extra) { - return user_extra->prefix; + if (user_extra) + return user_extra->prefix; + else + return NULL; } hidden int semanage_user_extra_set_prefix(semanage_handle_t * handle, @@ -112,6 +131,9 @@ hidden int semanage_user_extra_set_prefi const char *prefix) { + if (!user_extra) + return STATUS_SUCCESS; + char *tmp_prefix = strdup(prefix); if (!tmp_prefix) { ERR(handle, "out of memory, could not set prefix %s " @@ -162,6 +184,9 @@ hidden int semanage_user_extra_clone(sem semanage_user_extra_t ** user_extra_ptr) { + if (!user_extra) + return STATUS_SUCCESS; + semanage_user_extra_t *new_user_extra = NULL; if (semanage_user_extra_create(handle, &new_user_extra) < 0) diff -pru a/src/user_record.c b/src/user_record.c --- a/src/user_record.c 2016-10-14 17:31:26.000000000 +0200 +++ b/src/user_record.c 2016-12-29 19:23:11.783720792 +0100 @@ -313,6 +313,7 @@ hidden int semanage_user_join(semanage_h { const char *name; + const char *prefix = NULL; semanage_user_t *tmp_user = calloc(1, sizeof(semanage_user_t)); if (!tmp_user) goto omem; @@ -324,6 +325,9 @@ hidden int semanage_user_join(semanage_h else name = semanage_user_base_get_name(record1); + if (record2) + prefix = semanage_user_extra_get_prefix(record2); + /* Join base record if it exists, create a blank one otherwise */ if (record1) { if (semanage_user_base_clone(handle, record1, &tmp_user->base) < @@ -337,21 +341,27 @@ hidden int semanage_user_join(semanage_h goto err; } - /* Join extra record if it exists, create a blank one otherwise */ - if (record2) { - if (semanage_user_extra_clone(handle, record2, &tmp_user->extra) - < 0) - goto err; - } else { - if (semanage_user_extra_create(handle, &tmp_user->extra) < 0) - goto err; - if (semanage_user_extra_set_name(handle, tmp_user->extra, name) - < 0) - goto err; - if (semanage_user_extra_set_prefix - (handle, tmp_user->extra, "user") < 0) - goto err; - } + /* SELinux identities without a prefix shall not have an extra record */ + if (prefix) { + /* Join extra record if it exists, create a blank one otherwise */ + if (record2) { + if (&tmp_user->extra) + if (semanage_user_extra_clone(handle, record2, &tmp_user->extra) + < 0) + goto err; + } else { + if (semanage_user_extra_create(handle, &tmp_user->extra) < 0) + goto err; + if (semanage_user_extra_set_name(handle, tmp_user->extra, name) + < 0) + goto err; + + if (semanage_user_extra_set_prefix + (handle, tmp_user->extra, "user") < 0) + goto err; + } + } else + tmp_user->extra = NULL; if (semanage_user_set_name(handle, tmp_user, name) < 0) goto err;