From patchwork Thu Jun 22 09:45:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 9803869 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 26BE860329 for ; Thu, 22 Jun 2017 09:47:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16E8F285E3 for ; Thu, 22 Jun 2017 09:47:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0B831285EF; Thu, 22 Jun 2017 09:47: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=-1.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_NONE,T_DKIM_INVALID autolearn=no version=3.3.1 Received: from emsm-gh1-uea10.nsa.gov (emsm-gh1-uea10.nsa.gov [8.44.101.8]) (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 5C636285E3 for ; Thu, 22 Jun 2017 09:47:21 +0000 (UTC) IronPort-PHdr: =?us-ascii?q?9a23=3AgUnVOx0oXOWqTi+csmDT+DRfVm0co7zxezQtwd8Z?= =?us-ascii?q?sewUK/zxwZ3uMQTl6Ol3ixeRBMOAuq0C2rCd6vyocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbQhFgDiwbal2IRmoogndq8YbipZ+J6gszRfEvmFGcP?= =?us-ascii?q?lMy2NyIlKTkRf85sOu85Nm7i9dpfEv+dNeXKvjZ6g3QqBWAzogM2Au+c3krgLD?= =?us-ascii?q?QheV5nsdSWoZjBxFCBXY4R7gX5fxtiz6tvdh2CSfIMb7Q6w4VSik4qx2RhDoki?= =?us-ascii?q?MHPCMn/m/RhMJ7kaZXrAu8qxBjxoLZZoaaOuZ+cK7DZN8WXGhPUdtLVyBYH428?= =?us-ascii?q?cpAPD/IfMulEs4nxvl8OrRywBAKxAO/iyjpEi3nx0qMm0+osDxjK0BUiEd0Tqn?= =?us-ascii?q?TYtcj7NLoJUeCt0qbH0SnDZO5S1Tvj9ITEdxYsquyOU71ta8rc0UkhGR3YgFue?= =?us-ascii?q?qoLrODGa1uoPvGiV9+ptV/+jhmA5pAFquTWj2tsgh5PVio8P1lzI6SN0y5s1K9?= =?us-ascii?q?2iT057ZMapHoFKuCGGLYt2Q98tQ2J1sygn1r0Jp5+7fC4KyJs93R7QduCHeJWP?= =?us-ascii?q?7xL7T+acOi94hHF+eL6lhhay9FGtx+vhXce3yFZHtjdJn9bDu3wX1xHf99KLRu?= =?us-ascii?q?Vy80u/wzqDyhjf5+NHLEwulafXNYQtzqM+m5YOq0jOESD7lUPrh6GMbEok4PKn?= =?us-ascii?q?6+H/b7XjoZ+TKpF7hxnlMqQrhsy/GeM4MhUSX2SD+eSzyrnj/UrhTbVWlPI2iK?= =?us-ascii?q?jZsI3BJcgBuq64AxNa0oYk6xqlCTepzM8YkmUdIFJAeRKHi5DlO1DIIP/mEfey?= =?us-ascii?q?m0mgnThkyvzcPrDtH4/BImbMnbv/Z7px9lZQyA8pwtBe45JUBKsBIPX2WkLpr9?= =?us-ascii?q?zXEBs5Mw2yw+b6B9Rxz5gRWWWSAq+fLKzdr0SI6/kzI+iMeIAVuDH9J+Ij5/71?= =?us-ascii?q?l3A1g1Adfa633ZcPcnC3AuxmI1mFYXrrmtoBE2AKvgwkQ+z2iF2NSzhTam2wX6?= =?us-ascii?q?I74DE7DZipDZzfRo+zmryBxz23HppMZmBJElqMC2vnd52YW/cQbyKfOs1hkj4e?= =?us-ascii?q?Wre9SI8hzhautAn7y7p5NefU9CkYtY/s1ddu+u3Tkw0y9SFuA8SayWGNQHl+nn?= =?us-ascii?q?kUSD8uwKB/vUt9x0+b0admmPNXC9pT5/JVUgc9LpPczvJ1BM7sVQ7bedeJUlmm?= =?us-ascii?q?SM28AT4tVtIx38MOY0FlFtq/iRDD2SyqDKILmLyPBZw56bjT0GbrJ8Z60XrG07?= =?us-ascii?q?Mhj1Y+SMtVKWKmnrJ/9xTUB4PRjkqZi7yldb4H0SHR82eDyHaBs1tDUA5sS6nF?= =?us-ascii?q?W24QZlfOp9Tj+kzCV6OuCaggMgZZyM6CLLdKZcPtjVpYQffsJsjeY3ixmmqrAh?= =?us-ascii?q?aI3q2DbIzve2oH3SXdDFMLkwcc/HqcMgg+HCihqXrEDDNyDVLvf1/s8e5mpXK7?= =?us-ascii?q?T040yAeKYlZk17qx4xIVhPqcR+kV3r0eoichqDR0HEij0N7MDdqPuRZhdr1GYd?= =?us-ascii?q?wh+FdHyX7ZtwtlM5O+N6BtnEQecwVsv071zxV4EJ9AkckxrHMyyAp9M76X301b?= =?us-ascii?q?ezOfx5DwNaXdKnPu8xC3d67Wxlbe3c6Y+6cO7PQ4rkvsvBuyG0os7Xpozt5V02?= =?us-ascii?q?GG6ZXSFgoSVpDxXVgr+Bhmvb3aZTM954zM3312Laa0qiPC284uBOY9xBagZc1Q?= =?us-ascii?q?MKWYGw/zCM0XHM2uKPQrm1SwdRIFMvtS+LQzP8O8ePuMwLSrM/p4nDK6kWRH55?= =?us-ascii?q?hw0kGW+Cp/Te7Iwo0Iw/KC0QuEUDf8kU2tssftmYBLfTsSBHawyTD4BI5NYa1/?= =?us-ascii?q?ZZwEBnq0I8222Np+nYXgVGRE+16mHV8G39WpeRWKZVznwQJQzVgXoWCgmSag0z?= =?us-ascii?q?N7iTUpobSE3CzSw+XicwEKOnVXS2ljk1jsJ5S0j9EAU0SyaQgmigel717gx6dH?= =?us-ascii?q?vKR/M3XTQUBQcijsMm5tT7C9trWHY89A8p8otztYUPika1CAVrH9uwca0z/kH2?= =?us-ascii?q?ZG3zA7eSuqupLinxxmk2+dN3BzrH3XeMF13xjf4sbQRfhP0ToaXCN4kyXYBkCg?= =?us-ascii?q?P9m1+tWZj5nCvfq6V2K9SJJTazLrwJietCSl/21lGgC/n/Wplt3gCwg63jfx18?= =?us-ascii?q?N2WiXQsBb8fo7r2rymMe16Y0ZoBUXz685hF45ilYswgY0f1mIBhpWJ53YHl3n8?= =?us-ascii?q?MclD06LkcHUNXSILw8LS4AX9xk1jL26Gx57+VnWH2Mdue9m6YmQQ2iIy9M1KDK?= =?us-ascii?q?aU7LpekitvpVq0twXRYeJynj0F0/sh9GYag/0VuAoq1iidBrESHVJEPSD1jBSH?= =?us-ascii?q?8dS+rKRRZGayfrm9z1F+ncigDLGEowFTRG35do0kHSBu8sV1KEjM32Hr6oH4ZN?= =?us-ascii?q?nQasoetgeTkxfEi+haNogxmeYNhStpIm/9pmAlxPIgjRB02pG6poeHIX13/K2l?= =?us-ascii?q?Gh5YKiH1Z8QL9zH1l6leg8KW05q1EZl7AToLW5/oTe6vEDIUrvnnMhqCEDs7qn?= =?us-ascii?q?iHA7bfGxGQ6Ft+pXLVD5+rL22XJGUezdh6RxmSOkpfgBsPUTU5gJE5EBuqxMr/?= =?us-ascii?q?f0dl/DwR4UT4qhRUwOJyKxb/SnvfpBuvajosUJiQNgdW7gVc6EfNK8Oe6P5zED?= =?us-ascii?q?9C/pC6sQyNMXKUZx5TDW0TQUyEAE3jPqOy6tbe/eiYAfC+L/TQbrmUr+xRSeuI?= =?us-ascii?q?z4q10oR65zaMKtmPPn56Av0l3EpMQGt0G9rfmzoSSywbjSTNYNCHpB2k4C14st?= =?us-ascii?q?i/8Oj3WALo/YaPE6FdMchr+x2tnaiDNvKQhSZgJTZWzJwMw2XEyL8F3F4dkytu?= =?us-ascii?q?bSWiEawctS7RS6LdgqxXDh4fayxtL8ZI6qU83gdDOcHFltP1yr54jvkwC1hbT1?= =?us-ascii?q?DhnN+mZdASKWGnKFzHHFqLNKiBJTDTzcH4e6W8SaFXjOVRrBCwtyiUHFLkPjSZ?= =?us-ascii?q?jTbpTwqvMeZOjC6FIBNepJuxchF3CWjsVNjmcAG0MMdrjT0qxr05nmnKOXQSMD?= =?us-ascii?q?RmdkNCtLmQ7SRYg/hkAWNO8n9lIfODmyaD4OnSMowWvudzAiRoi+Ja52w3y7VP?= =?us-ascii?q?7C5aWfN1gzHdrthyo1GhiemC0SBoXwZLqjpRg4KLp0piM73D9pZcQXbE4A4N7W?= =?us-ascii?q?KIBhQMvdtqEMXvu7hLx9jBlaLzMixC887a/csdAcjbMsSHP2YgMRXzHD7YFgwF?= =?us-ascii?q?TSSkNWvHnUxSjOmS9mGJrpg9spXjhYEORaFBW1w6DPMVEFplEccZIJhtXTMkjK?= =?us-ascii?q?Sbg9QS6Xq6sRnRQt9VvoreWvKOBvXvKzaYjb5eaxsO37z4MZwZNpfn1Ex6dll6?= =?us-ascii?q?gIPKFlLWXdBMpi1hahE7oF5W/XdkUGIzwUXlZhmq4H8JGv6+hgQ2hRdmYeQx6D?= =?us-ascii?q?fs5E86KUHLpCs/l0kxn87oji2PfzHqLae/R4dWBzDzt0grPZPxWxx1YhGqnUx4?= =?us-ascii?q?KDfEQKpcgKFvdW9xlg/Tp4BCGflETaJaZh8QwOuYZ/Qs0VtHrSWmylVL5ezfCZ?= =?us-ascii?q?ttjAEqa4Kjr2pc2wJ/a944PbDQJK1MzlRKnKKOuS6p2f43wAAFPUYN932deC0T?= =?us-ascii?q?tUMUMbkmIjan8fZ36QyegTdDfnYDV+YyqPJw6kw9I/iAzz7n07NbLEC+KfaQL6?= =?us-ascii?q?eCtmjDks6IWU8w2VkOl0le/rh20N0vc0yKWEAz1LGRDQgGNdLeKQFJaMpf7GLT?= =?us-ascii?q?cjiVserT2511JZmyFuDzQOCVtaYUmF+rHAEnH4QU9MQOAJmt3FveLcj5ML4P0Q?= =?us-ascii?q?8t6xjzJFWZEPRJfwqGnyodrMGhzZ94wJJdKyoHDmVnKyW34bjWphQ0j/WfQdc2?= =?us-ascii?q?eHYaXpcEN34sXs21hTJZtWxaDDaryuIZ1BSC7zjkqyTUCzn8dcRsZPGVZBNrE9?= =?us-ascii?q?y29jM/87WshV7Q6JXeKHnwNc5+td/X9eMau5GHButPTbZjt0fcmo9YR2GlUmPU?= =?us-ascii?q?DdG1IJ3wZJU2YtzvFna2SFq/hCwpT83pJtaiMrCIgR30RYZTqISUwSwsNcq6Fj?= =?us-ascii?q?EYBxd8uvoO5Lxiag0ZYpo6YBnotwIkO6y5PgiYzs2kQ3yxJjtOU/lf0eK6aqRU?= =?us-ascii?q?zyo2bu610n0gTo06z+Ss/k4NQ4kKgQ3EyfaleYZeTTD5GmZBdAXXuSo5i29hO/?= =?us-ascii?q?4uwuc+xRPItkUcMzCLdeFydWNEvtE9CkmJLnlsDGo3WUOch5LZ4gGwx7AS4zdd?= =?us-ascii?q?n9FM3O1KqnjxpJnfYC63VayqrpXUvSwgbcQmo6JvMIzjJNeGu43EnjDFSpnfrB?= =?us-ascii?q?GFWjagF/VGgthQPD5YQP5QlG4/PcwGuJZO5lQpWcc7J71PDq4sprawZjd/FiES?= =?us-ascii?q?zDUWV4WZ0DwMn+ewwb3amQmMcJ46KhwLrI1CgscBUy5xei4Rv7GsV4PNmmCeV2?= =?us-ascii?q?cLPhkc7R5X5A0ajI9xfvrp4I3STJ9D0zRWue57UjPXFpl08Fv2UnuWgV75SPq9?= =?us-ascii?q?k+yp2gZSzOn03NcCRRBxE1RQyeFNm0Q0L7F3LrUfsZTRsj+Ub0/6unziyPe+Ll?= =?us-ascii?q?lL1cLUb0H4DJbCtWfkTiIc+2cbSpNUxX7DEpQSlw55aKc1q1VWPICpZFrx5zw+?= =?us-ascii?q?y4RuBbm4Wtihx0w5onYeWyeqD91BBvl8sF3NQj1lZIukpY75O5VIWGBQ5oOSq1?= =?us-ascii?q?NYkEVrPC65zZtcK85N4j4QUjhAuy+dvN6oRM1Fx8B2E4cGIs1jtHflBKNEJJ+R?= =?us-ascii?q?rmU4u7D11nDZ+zE8sFK7xDqpGK+1VONZ8HMAFQo3PWierVMvD+Q0+GfI7l/Nqk?= =?us-ascii?q?x0//tcBrWXlUVxpzJ9EYpUBjdH0nClK1pzQWJDs+VdL6TVaNJTTOUoZR+oIBw+?= =?us-ascii?q?Dv8m30qG/U1umnf5eSNyvBNA+y/BRwk0STUVgrD1lDIEsMGnJDkaR4hLbTg6bi?= =?us-ascii?q?fFKgObmTxMsxpFbUFlRYwZCM5f+74HxYtU4tbCSUG0JCEZWxxiMxk10eZDmU5G?= =?us-ascii?q?q0qUYybdAhS0dfzXqB14Yd+RrNK1LPT+5ApHipnosPoi+KUHWnKrghCiTs7Gr4?= =?us-ascii?q?/kqNKKslWBdL3iP+27e3/BQyDGjQqsirc8E5nK4y/TPRJZK5l913UpeoXuBnDQ?= =?us-ascii?q?PRtYPaIbO1RUWr1gZdVAvO9ae9dueLwV9q91GhKHWhTvFZS0o/lIMlnfWTbTIz?= =?us-ascii?q?iP/+GkvY3T6rndRvT6acyX23bLWaR3MYlm6TPjAbflzZde+lbq2vdq7k56U0bJ?= =?us-ascii?q?PD2BrNv7OgMG/82idkz8vpI3Az/ZHJBwn2fzyU1accoYXTGq+owCyJxF8HbwVf?= =?us-ascii?q?540k/rve1K7Llk9ZM47K11ycqvPqfSLulasVV7DReKAAVq6o8tD3J7R2xLZe8R?= =?us-ascii?q?MvjRd7wDjc/ys+D3C7AX6BqN9uxFc9vIOV/OldSkBzGBTRxEgB0BpiQELgud0P?= =?us-ascii?q?6Fn7F7Sdq/qej+wEIt7EC0LgQaw7B1+YeE5q2IqffSbxTLybgEXrblRt/vrrs2?= =?us-ascii?q?oUyf/vskm6ASemxufwKoCvAdWdAHymfm068q0TomE9nfELL45P5DS3U5kyrim5?= =?us-ascii?q?9nBVUWHegUHb6R8oRAhWo4nvHZNtkKcqBDhmmPFASrErkZyXKx7CuXOmZliAnU?= =?us-ascii?q?0x7sWWOz8EP2rShgTCvO1djjlERVVqOwBUhPQSWkIlN4vymJPArzs9r7o6I141?= =?us-ascii?q?8qMmb8rtKCiHOhOK9LH834PNGcLjQ0pFMTjJ01WNOv3JsWFsejL9gK8XFxdP3e?= =?us-ascii?q?53msky9brKdNn5De7d2N+vXLAXmgiLWXq7OJxD1Dy3g4u1Q/5sqhNvHI6d2KWe?= =?us-ascii?q?6n130NTydlpgvOQwK1qqHBr18KI0CL113LmIMSNNFDwXY4zl3m5PQkQN8r8QVe?= =?us-ascii?q?EYDAZ+8NpT/tIzb0xFefbMgxViaAzztWEFX1EUN7GKgnwm7wutzGlWvI8V0yWo?= =?us-ascii?q?Zwb1DnhQBwD4ggLUIt810XzyoYHAgDdx+UEbaoBV7/IoscT0gDbhaH06amdacr?= =?us-ascii?q?x0Fzxamv5ODLZ+xmG6UNLupdjhKJnFVDAZIZq7MeT6hze1BD767avRPiBJL5X/?= =?us-ascii?q?f8mno/K+a1Ttpc8c8Hq3so+hy/SAa46Zdf87Ybj4iFdqxFYZjJp8186llo5D4R?= =?us-ascii?q?eSxXgRh/iRy5XfoapO/9/tjRqICo5fq2VKYxW+UX8AA5B2V/jpTqml8svcra1/?= =?us-ascii?q?xCRY3Jl4vw7BpBI3mQuIbVyxN8M/YBK5q3fLZ88HUKPzMRJ3MVPduYcfY84S5t?= =?us-ascii?q?MCnL51NYH8MMYcgVM9bKmQ9JlELmQqxT9tDcGl+CEYh/bcco73D4yDot65szTv?= =?us-ascii?q?7g6COqJZDY91xNJ+lMjDlwm9LCqukVxuDSCCsO7XmCdRd1xiKCy5+QC/f/5uiM?= =?us-ascii?q?0MvbV08aES42XYZdIyCC+Q+9Suq2iprpSAWU5dH3gJ4kc0KQXHOxlrwfsqlQCe?= =?us-ascii?q?5Aljn73j9GG4DpnfKard6s53FRtlJZC4t88BzFGKpePpVnIxv4jdOkRlJhBifl?= =?us-ascii?q?fsHbaAYusvKMxugQ++V+K1f+ZYgDLxIL0b3682RaThduSLPtulaZXP4Ra8VmSP?= =?us-ascii?q?zes3BV8phsK6kRM1iBvJbqtCtHqEgqAA81b789tjNaeVfInA1JXKb0v7kMihAC?= =?us-ascii?q?Xt59uE9MH3+wOW0l6jrDS6tVlqmQB+YP/jWVUKMOT11iMjliTBOtxJVuZ7ypkO?= =?us-ascii?q?hBsmNHgix9p/wq3CZ9RBemuC3soKUN2Sk7+LyjsTUMtnNEQv+ZkyfSBlVJ1O4K?= =?us-ascii?q?grsEC3b+9Vy8Z2EObITu77l8PsTs7JQv7Xs5bxUieS0GQOuhBjr/j6ONGIOPts?= =?us-ascii?q?xTiASKuMXUYr+5NTISOaglyRL/W3h91RDTnBRv8GsLRDWs9sMrJIW5OcY42yWp?= =?us-ascii?q?GGnbdFAX4qNKscv8rkALTOooaVx7xGVsz8mHSjcLRMPRB2Y/lhIkZnlccJJf9R?= =?us-ascii?q?8aELElgjeWvqZc+AEZezPUEpm49YnRmsfIwmMxTdBwxmLZvqeFnI8l0GV5m9No?= =?us-ascii?q?6S6DoHYSePLWU89iBnj+zYlexvb4Z/qzruALUo1mx6q9UPUaKMms5XO22Il2Wk?= =?us-ascii?q?+i3rkeEF65MOgNx7jFVyelTXaVWf+Mc2iKnjY2LlT+5R+2IV0rcM1KtVMyMvPe?= =?us-ascii?q?hp5AkA3sSbF0RiWQpF/Dy2wjNeIadx4ot4q8fgwKTfIRZ/KCKuQ0x/0+ElQMZW?= =?us-ascii?q?fTHSRqE++2rUKtnI9jNnV84EX6ZP/g8hznMNSOGRkLD4raooR3+fOkWmKLIWVg?= =?us-ascii?q?wwFqPElo6+ffEEw8tupdc5aSntjQgM920ewfePduNi09vMAcmoR55YmSzsiKbQ?= =?us-ascii?q?nbzozuKtHNvviYH/rfwlwxdW5EVLoZfRj4554+Pt4+R73TAaVZsgoBCqQgR5wh?= =?us-ascii?q?LWjx/rluLAxvag7ReKi0gs7yq+KFeJRUo37W7kouIyrHuhwDy/m0TQllYJCwg3?= =?us-ascii?q?X9Poo8RjVbr91iEhFmBpdAG9scrwq7BJ6ZgK+6i8er+0N7p+AFr7H9CvXL1NSl?= =?us-ascii?q?xYV+QYJW5UuRPDbeHKNrmFhqjvyugvfc1Zn8EcTiedcaW+VgWm7FbqXJHp6jKj?= =?us-ascii?q?KPJs38Z1RG/KCC375jVBWeejz5VbKctCK4LPVk/Vk7yotgcerXzTwt6azb2dTr?= =?us-ascii?q?a2FfpyejtmKJNIBE4VzLH+PeWRVUReCC8GZ/Eq0ddZH0+/sWMdw+3Nic5BF+7C?= =?us-ascii?q?9c38uBIqihqFLM2018eZzUMEvp2zg2WZMULxSnK0QhmmzZpWrHAXRaMMekLdJi?= =?us-ascii?q?gMuaDhD34Elxg24tbHZbGmX0XdeRJXQb28WmaQ2P7g1EE9YDn++xeU4/raCyV+?= =?us-ascii?q?hoOpNbluWutbUHl8tpKi7VSMhdJSHQI6d8PiBNAeXXuFgofhkEvqA3WogvZpiO?= =?us-ascii?q?J1gIPVydySP00QvC0Ur0d8Gj1KaJPCYa6HNHwKzZ0TJUvQm2pe6ZgtH/ULDedJ?= =?us-ascii?q?z5R+XdPC0hVjGbXjQyDV2p9U2/u/UaoPWUO3wfrU4QYiKTDg4Tu69uoMPMAW7T?= =?us-ascii?q?g+1jYYYKiOqUWi/qVC14j60yBiBRuUCLWfoDGhHcb2X9j2pEpAyiOvhM8Grqb7?= =?us-ascii?q?KC3aVVQe0WDZVIcvCCXdvYfepRJywpljUEIuq8ecPTr6oh2FLSUWQZC7XI9EGZ?= =?us-ascii?q?TEOOQPycwjXrXZ8Pv4g1oSol4dTQkTVyE6vWPraTvTmu8pS3jCyAo+3RSnEtY1?= =?us-ascii?q?ApgOIFGGSB2xdAKGQYBNwUu0zgWbCAaFhW1HIoiONu3BkMdB51UnJwzn0F1Mq6?= =?us-ascii?q?T9ZUTV8SkXOGXOwNbFcxCig5u0CN/F7ce9sF7PjaW3Vf/bhEcpYQLf8o4ZPbJO?= =?us-ascii?q?NE2O0BxDF95i0/5XbOR2hBhx6IpvKDVJl3wadPsDBl8g=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2H8AgARkUtZ/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgwI?= =?us-ascii?q?rgW+OeJBJgRWXDyiJAVcBAQEBAQEBAQIBAmgogjMMgUMsCEgBARkGAQIkGQEBN?= =?us-ascii?q?wECAwkBARcxCAMBUxkFiFWBUgSrJYJXOiUCgmEBAQWIVQEKAQEBHAiGbYFgNoI?= =?us-ascii?q?6ixIBiVaVEZ5sDRyGXEiUTliBCoEJSYR+ghN0iV0BAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea10.nsa.gov with ESMTP; 22 Jun 2017 09:47:20 +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 v5M9kGbk018400; Thu, 22 Jun 2017 05:46:27 -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 v5M9kDEl204285 for ; Thu, 22 Jun 2017 05:46:13 -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 v5M9k9e4018374; Thu, 22 Jun 2017 05:46:13 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1D6AABDkUtZhxsEb0JdHQEFAQsBgy2CGo54kEmBFZcWhiQCgnxXAQIBAQEBAQITAQEBCA0JCCiFSAMDJxkBATcBD1FXGYhagVIEqymCVzqDCAEBBYhVAQEIAh4Ihm2BYDaCOosSiVeVEZ5sDYZ4SJROgWGBCUmEfh+BdHSJXQEBAQ X-IPAS-Result: A1D6AABDkUtZhxsEb0JdHQEFAQsBgy2CGo54kEmBFZcWhiQCgnxXAQIBAQEBAQITAQEBCA0JCCiFSAMDJxkBATcBD1FXGYhagVIEqymCVzqDCAEBBYhVAQEIAh4Ihm2BYDaCOosSiVeVEZ5sDYZ4SJROgWGBCUmEfh+BdHSJXQEBAQ X-IronPort-AV: E=Sophos;i="5.39,372,1493697600"; d="scan'208";a="6100681" 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; 22 Jun 2017 05:46:13 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3ABiL6txU7GU4lRLGXoe4upwkUs1LV8LGtZVwlr6E/?= =?us-ascii?q?grcLSJyIuqrYbByCt8tkgFKBZ4jH8fUM07OQ6PG/Hz1aqs/d+Fk5M7V0Hycfjs?= =?us-ascii?q?sXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFRrwLxd6?= =?us-ascii?q?KfroEYDOkcu3y/qy+5rOaAlUmTaxe71/IRG0oAnLssQan4RuJrs+xxDUvnZGZu?= =?us-ascii?q?NayH9yK1mOhRj8/MCw/JBi8yRUpf0s8tNLXLv5caolU7FWFSwqPG8p6sLlsxnD?= =?us-ascii?q?VhaP6WAHUmoKiBpIAhPK4w/8U5zsryb1rOt92C2dPc3rUbA5XCmp4ql3RBP0ji?= =?us-ascii?q?oMKiU0+3/LhMNukK1boQqhpx1hzI7SfIGVL+d1cqfEcd8HWWZNQsNdWipGDY2g?= =?us-ascii?q?b4UCEfMNMf9aoYbgvVsCtAawBRS3BOP31DBHmmP20bQ+0+QmHwDNwQgsEtILvH?= =?us-ascii?q?nSq9r7KKccXP6swKXRzzvMculW1S7g5ojVaRAhue+DUq5sccHMzUUjCR/JglCW?= =?us-ascii?q?pIf4PT2ay/4NvnCb4eR+SOyhhW0ppQZzrTihxMgshJLEip4Jxl3e6Sl02po5Kc?= =?us-ascii?q?G+RUVmYdCkCpxQtySCOoVsWMwiX3touCcmxb0FpJW1YTQKx4omxx7Za/yIaZKI?= =?us-ascii?q?7Q//VO2MJjp4nGlldamnhxax6kis0Oz8Vsyt3VtMsyFLkcHMu2gM2hHS8MSLV+?= =?us-ascii?q?Zx8lq71TuAzQzf9ONJLVg2mKfYMZIswqA8moAOvUnNAyP6gkr7gaCQe0454Oan?= =?us-ascii?q?8f7nba/jppKEN497lAX+MqM2l8y4HOQ4LgYDU3GA+eS5yL3j5Vf1QLBUgf0tia?= =?us-ascii?q?nWqp/aJcUdpq62HQBV1Ikj6xe5Dzi4ytgXgX4HLFdddBKGiYjmJU3OLej5APq+?= =?us-ascii?q?mVigjSpny+3cMrDuGJnBMHrOnK/kfbln6k5czAQzzcpY55JRErwBOOnzV1TptN?= =?us-ascii?q?zbFR81KQ20w+P/BNVnyoweQX6PArOeMK7Kql+H+/kvLvKQZI4VpDn9K/8l6+To?= =?us-ascii?q?jX8ig1ARZ6ap3ZwJaHqgBPRpP12ZYWbwgtcGCWoKpRQxTOjriF2ETD5SaG2/X7?= =?us-ascii?q?485z4nCIKmCp3PRoa2gLObxiu7EZpWZn4VQmyLRGzlc4SCRuckdDOZIsgnlCcN?= =?us-ascii?q?E7emVdwPzxar4Tfz16BmJemcwTEVtJTj3cJ5+6WHjQoa7T9vScWYhTLeB1pol3?= =?us-ascii?q?8FEmdllJt0plZwnxLcjKU=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GOAADfkEtZhxsEb0JdHQEFAQsBGAEFA?= =?us-ascii?q?QsBgwKCGo54kEmBFZcWhiQCgnxXAQEBAQEBAQECAQIQAQEBCA0JCCgvgjMkgSs?= =?us-ascii?q?sCEgBARkDAycZAQE3AQ9RVxmIWoFSBKslglc6gwgBAQWIVQEBCAIBHQiGbYFgN?= =?us-ascii?q?oI6ixKJV5URnmwNhnhIlE6BYoEJSYR+H4F0dIldAQEB?= X-IPAS-Result: =?us-ascii?q?A0GOAADfkEtZhxsEb0JdHQEFAQsBGAEFAQsBgwKCGo54kEm?= =?us-ascii?q?BFZcWhiQCgnxXAQEBAQEBAQECAQIQAQEBCA0JCCgvgjMkgSssCEgBARkDAycZA?= =?us-ascii?q?QE3AQ9RVxmIWoFSBKslglc6gwgBAQWIVQEBCAIBHQiGbYFgNoI6ixKJV5URnmw?= =?us-ascii?q?NhnhIlE6BYoEJSYR+H4F0dIldAQEB?= X-IronPort-AV: E=Sophos;i="5.39,372,1493683200"; d="scan'208";a="6953432" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jun 2017 09:46:12 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 5910F206CF; Thu, 22 Jun 2017 05:46:12 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Thu, 22 Jun 2017 05:46:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:in-reply-to :message-id:references:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc:x-sasl-enc; s=fm1; bh=G1tPGBsNYiyAU4Jlp4 6rSl1hJyH2Ki4WrJ+pSZhMJLQ=; b=ID/gWazOxri1gAIh/7vyUOUMhmsp58OcKH ojNtSVoVJrqo6YwJ5LIEfujDPdocZIBqrkzVMR3j8Q0z3fBTf7YBYVgnvbemp4Zb hgeQMInfmb5MuNijFAOFP5PZ7KtN4/bYgEYu8E0gxvZjAWgr/SODF0S1GCps+GrV r+P8ioENC6ppRHEJjeQBwpAOOZ13cYvIUTqAYilheKUBbzsbW/ce7Rot1UHiH5VQ SWzLlLNloo54PYghQhYmqY2KAWGbPlzeYnyI1KNI+3NAVmtLGOrxhc0lz4ojCvMG YhiF550LGeJ+xyrgY6j8IS36kuyv/mnTX3dq2hnhBOgK26vdoUjg== X-ME-Sender: X-Sasl-enc: 6g7GnwF5+sn5qOewtN9hbilOAoPH0hxMhGFAqp32B8M2 1498124771 Received: from localhost (x4e34832c.dyn.telefonica.de [78.52.131.44]) by mail.messagingengine.com (Postfix) with ESMTPA id ED8D7246D5; Thu, 22 Jun 2017 05:46:11 -0400 (EDT) From: Patrick Steinhardt To: selinux@tycho.nsa.gov Subject: [PATCH v2 2/2] genhomedircon: avoid use of non-standard `getpwent_r` Date: Thu, 22 Jun 2017 11:45:58 +0200 Message-Id: X-Mailer: git-send-email 2.13.1 In-Reply-To: References: In-Reply-To: References: 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: Cc: Stephen Smalley Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP The `getpwent_r` function is a non-standard but reentrant version of the POSIX-defined `getpwent` function. While it should provide the benefit of being safe to use in multi-threaded environments, it disallows us from compiling with libc implementations which stick to the POSIX standard more closely. As libsemanage may be used in a multi-threaded environment, being reentrant may in fact be quite important to us. As such, simply switching out `getpwent_r` against its non-reentrant function can prove quite dangerous. But interestingly enough, the glibc implementation of `getpwent_r` does not even guarantee being reentrant. Quoting from getpwent_r(7): NOTES The function getpwent_r() is not really reentrant since it shares the reading position in the stream with all other threads. As such, it is non-reentrant in the same sense as its simple `getpwent` brother and can simply be switched out without losing any guarantees here. Signed-off-by: Patrick Steinhardt --- libsemanage/src/genhomedircon.c | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c index e8c95ee4..b9a74b73 100644 --- a/libsemanage/src/genhomedircon.c +++ b/libsemanage/src/genhomedircon.c @@ -290,14 +290,11 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) semanage_list_t *homedir_list = NULL; semanage_list_t *shells = NULL; fc_match_handle_t hand; - char *rbuf = NULL; char *path = NULL; - long rbuflen; uid_t temp, minuid = 500, maxuid = 60000; int minuid_set = 0; - struct passwd pwstorage, *pwbuf; + struct passwd *pwbuf; struct stat buf; - int retval; path = semanage_findval(PATH_ETC_USERADD, "HOME", "="); if (path && *path) { @@ -362,14 +359,9 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) free(path); path = NULL; - rbuflen = sysconf(_SC_GETPW_R_SIZE_MAX); - if (rbuflen <= 0) - goto fail; - rbuf = malloc(rbuflen); - if (rbuf == NULL) - goto fail; + errno = 0; setpwent(); - while ((retval = getpwent_r(&pwstorage, rbuf, rbuflen, &pwbuf)) == 0) { + while ((pwbuf = getpwent()) != NULL) { if (pwbuf->pw_uid < minuid || pwbuf->pw_uid > maxuid) continue; if (!semanage_list_find(shells, pwbuf->pw_shell)) @@ -411,9 +403,10 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) } free(path); path = NULL; + errno = 0; } - if (retval && retval != ENOENT) { + if (errno) { WARN(s->h_semanage, "Error while fetching users. " "Returning list so far."); } @@ -422,14 +415,12 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) goto fail; endpwent(); - free(rbuf); semanage_list_destroy(&shells); return homedir_list; fail: endpwent(); - free(rbuf); free(path); semanage_list_destroy(&homedir_list); semanage_list_destroy(&shells); @@ -1064,10 +1055,7 @@ static int get_group_users(genhomedircon_settings_t * s, long grbuflen; char *grbuf = NULL; struct group grstorage, *group = NULL; - - long prbuflen; - char *pwbuf = NULL; - struct passwd pwstorage, *pw = NULL; + struct passwd *pw = NULL; grbuflen = sysconf(_SC_GETGR_R_SIZE_MAX); if (grbuflen <= 0) @@ -1104,15 +1092,8 @@ static int get_group_users(genhomedircon_settings_t * s, } } - prbuflen = sysconf(_SC_GETPW_R_SIZE_MAX); - if (prbuflen <= 0) - goto cleanup; - pwbuf = malloc(prbuflen); - if (pwbuf == NULL) - goto cleanup; - setpwent(); - while ((retval = getpwent_r(&pwstorage, pwbuf, prbuflen, &pw)) == 0) { + while ((pw = getpwent()) != NULL) { // skip users who also have this group as their // primary group if (lfind(pw->pw_name, group->gr_mem, &nmembers, @@ -1131,7 +1112,6 @@ static int get_group_users(genhomedircon_settings_t * s, retval = STATUS_SUCCESS; cleanup: endpwent(); - free(pwbuf); free(grbuf); return retval;