From patchwork Tue Jun 12 08:09:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Enderborg X-Patchwork-Id: 10460979 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 1FE62601A0 for ; Tue, 12 Jun 2018 19:23:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D1C2223B3 for ; Tue, 12 Jun 2018 19:23:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0151E2899F; Tue, 12 Jun 2018 19:23:50 +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=-5.2 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from USFB19PA14.eemsg.mail.mil (uphb19pa11.eemsg.mail.mil [214.24.26.85]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C245C223B3 for ; Tue, 12 Jun 2018 19:23:49 +0000 (UTC) Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by USFB19PA14.eemsg.mail.mil with ESMTP/TLS/AES256-SHA; 12 Jun 2018 19:23:47 +0000 X-IronPort-AV: E=Sophos;i="5.51,215,1526342400"; d="scan'208";a="14489899" IronPort-PHdr: =?us-ascii?q?9a23=3AoHGU7xIWXibwzoKpodmcpTZWNBhigK39O0sv0r?= =?us-ascii?q?FitYgTLfXyrarrMEGX3/hxlliBBdydt6oZzbKO+4nbGkU4qa6bt34DdJEeHz?= =?us-ascii?q?Qksu4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPER?= =?us-ascii?q?vjKwV1Ov71GonPhMiryuy+4ZLebxlIiTanfb9+MAi9oBnMuMURnYZsMLs6xA?= =?us-ascii?q?HTontPdeRWxGdoKkyWkh3h+Mq+/4Nt/jpJtf45+MFOTav1f6IjTbxFFzsmKH?= =?us-ascii?q?w65NfqtRbYUwSC4GYXX3gMnRpJBwjF6wz6Xov0vyDnuOdxxDWWMMvrRr0vRz?= =?us-ascii?q?+s87lkRwPpiCcfNj427mfXitBrjKlGpB6tvgFzz5LIbI2QMvdxcLndfdcHTm?= =?us-ascii?q?RfWMhfWTFKDoelY4cSE+YNOOBVpJT/qVQTtxuzHQmiCv3hxDFLgXH536M63O?= =?us-ascii?q?s8HwHe3gEsAtwDv2jbotrrL6cfSvy1wavSwDnfdf5axSnx5Y7VeR4hu/GMWr?= =?us-ascii?q?dwfNLLx0YxCwPKkE+QopHqMTOTy+sCrXKb4PFnVeK1hG4stgZ8oiCxyccwlI?= =?us-ascii?q?bJnJgZxU7C9Spk3ok1P8a3SElhYd6rC5ZQrCaaN412Q884X25ovyM6x6QAtJ?= =?us-ascii?q?WmfyYK0IwqywPQZvGIaYSF4g/vWPyPLTp3mn5pYq+ziw68/EWi0OHwS8e53V?= =?us-ascii?q?JQoiZYktTBt2oB2wLX58WBV/Bz5F2u2SyV2ADW8uxEJEc0mrfFJJM52b4wk4?= =?us-ascii?q?YTsVzEHi/rhEX6lK+WeVsg+uiv8+nnfq/ppoWdN49pkQHyKLgum8yjDuQ4NQ?= =?us-ascii?q?gCRW6b9vin1LL/50H5RbRKjvkunqnYtpDVO9gbq7akDwJa3Ysv8RayAyq83N?= =?us-ascii?q?gGknQLMkhJdA+fg4jsIV7OIfT4Dfmlg1SrlTdm3+vGMaPlApXMKHjDjbjgca?= =?us-ascii?q?9m5E5b1Qozy8xQ6IxPCrwaPPLyWlP+tNzfDhMjNQy02PzoBM9y1oMZR2KDGr?= =?us-ascii?q?WZP7/KsV+U+uIvJPGBZI0SuDb7Mfcl+/7ugmU/mVIGf6mp2p0XaHWiEfR9P0?= =?us-ascii?q?WWf2DsgswbHWcNpAo+Q/TgiEeeXj5Le3ayQ6U86yk9CIK8F4jDXpitjaeP3C?= =?us-ascii?q?e6BJ1WfXxGCl6NEXfubYqEXesDaCOILc9liDAEUqKhS4A53xG0qAD606ZnLv?= =?us-ascii?q?bT+iAAt5Lj1sJ66PHQlREp8jx0CcWd03+WQmF6mmMIWjA307tioUx71leDzL?= =?us-ascii?q?J0g/tCFdxc//lJSBs1NYbAz+xmDND/QgzAftaNSFajXNqmGyo8TtwvzNATZE?= =?us-ascii?q?Z9Ac+tjgjZ3yqtAb8aiaCEBIAu/qLbxXjxKN53y2za26k5k1kmXsxPOHW7ia?= =?us-ascii?q?Fj8gjTAIjJk1mEm6uxa6QTwjTN9GaCzGqJukFUSghwXrvZXXoHfEvZscz55l?= =?us-ascii?q?/eT7+pEbkoLxdBxtSYKqZRdtLpilBGS+v5N9TFf2K9gWGwCgiUxrmUdorlZ3?= =?us-ascii?q?0d3DnBCEgDiw0T/myJNQs5Bie8uG/eDyZhFVHoY0Px6+V+r2m7TkAsxQGQc0?= =?us-ascii?q?Jhz6a1+gIShfGEUfwcw6gEuCY/pDVuB1uyxc7ZC9+aqwpmZqVcbss34E1b2m?= =?us-ascii?q?LBqwx9IpugIrh4hlEDbgt6pEzu1xB4C4lal8glsm8qxhJoKa2EyFNBay+Y3Z?= =?us-ascii?q?foN73MJGny5heva7XK2lzFy9aW/KAP6fo9q1r5ugGlDEwi/Gt709NNyXuT+o?= =?us-ascii?q?3KDBYOUZL2Sks2+QJ1p7XGYiYj/YPUzmZhMbeqvT/YwN0pGe4lxgynf9dFP6?= =?us-ascii?q?OODBXyHNECB8iyNOwqnECkbhQFPOBW8K47IdimeuCc16G1JuZgmyiqjWNd4I?= =?us-ascii?q?ByykiM7TZzSvbU35YZxPGVxhWHVzbgg1e9tcD3g5pIai0SHmq4zyjkC5VcZq?= =?us-ascii?q?lzfYYNE2iuOcq3ys95h573VH5S7ESjCE8e2M+1ZRqSaETw3QlR1UQMvXyrgD?= =?us-ascii?q?C4wCJwkzEoqKqfwSPPzv/5dBofO25LQmhigkv3IYSuidAVQlSoZRAzlBS5/U?= =?us-ascii?q?b627RbpKNnImnJRkdIeyz2IH94UqSssbqDbdVC6Ig1sSpLS+Swe1eaSqTyox?= =?us-ascii?q?ECySPsA3NexCwndzGtopj5nAJ1iGSGLHtor3rWZ8dwxQzZ5NPCWf5dxD0GRD?= =?us-ascii?q?N3iTPPHFizI8Gp/cmIl5fEqu2+T3iuVoBXcSb11YOPri275XF0Dh2lhP2zh8?= =?us-ascii?q?bnHhYg0S/gzdVqTiLIrAvmYob3yau6P+VnflNnBFDi8cZ6HJ9xkpcojpEKxX?= =?us-ascii?q?canomV/WYAkWrrL9Vb37/xYWETRT4N3tHV4BLp2Et9IXKV34j5TGmSwtN9Z9?= =?us-ascii?q?mmZWMbwjo94NpXCKeQ97FLgSp1oka4rA7Ib/hyhDEdxeEp6H4AjOEDoBAtwT?= =?us-ascii?q?mFArAOAUlYOjThlxqS4NC4sKVXY2OvfKO+1EVggN+hC6uCrRtEWHbjfZciHz?= =?us-ascii?q?F/4dljMF7W133z8I7kcsHKbd0Prh2UjwvAj+9NJZI0jPUKgS5nNnzhvX050e?= =?us-ascii?q?E0lwdj3Zeks4ibMGVi4Li2AgZGOTHvYcMc5C3th75EnsmKx4CvAolhGjITUZ?= =?us-ascii?q?vmV/KnDi8dte/9OAaIDD08rWybFKHFEgCD7UdqtXXPE4qkN3uPPnkW0c1iRA?= =?us-ascii?q?WBJExYmA0URCs1kYUnGQCsxczhbEB56ysQ5lHmtBRD1PhkNx7lUmfQvA2ocC?= =?us-ascii?q?s7SICDLBpK6QFP/1zaPteZ4uJ3HiFY5YGhrBeXJmyAeQtHEXsFWleaCFDnP7?= =?us-ascii?q?mu48TA8ueDC+WiL/rOe6iOqfdEW/aG352vzpBm/zGKNsmVOXliFfI70FJZXX?= =?us-ascii?q?9lA8TZhykPSysPmi3Wbs6bqxC8+itso8+i7vvkQwPv6pGJC7dINtVv4R+2i7?= =?us-ascii?q?+ZN+GMnCZ5NSpY1pQUyHDSx7gQxkAShD91ejmqCbQPqyjNTKfKla9WCx4UcC?= =?us-ascii?q?RzNcRS46I7xAlNNtbRisnp2b5gkv41F1BFWET9msGuYMwGOXu9NFTGBUmVMr?= =?us-ascii?q?SJPifLw8bpbqO/UrBfkOJUtxistjmBCE/jIi6Plz/3WBCzKetMlj2UPARCuI?= =?us-ascii?q?GhdRZgEWrjTNLmax2jN993iTw2waEqiX7RMG4cMCR8c1lTobGK6iNYmPp/EX?= =?us-ascii?q?Rb7nV5NemEhzqZ7+7AJ5YVsfprBjp7mvlf4HQ9xbtV4j9LROBpmCvSqd5upk?= =?us-ascii?q?+pnvOJyjV5TBpEsixLi56TvUV+JaXZ8YFNWXDa8x0X6WWdEBcKp9x+Ct3zoa?= =?us-ascii?q?9QzMPPlKHyKDtY9dLb49ccDdDOKM2bKHohLQbpGDnMAQsfUzGrLn/QiFZHkP?= =?us-ascii?q?6O9n2YtYM1qpn2mJUTTb9bWkQ1FukEBUVlBtACJol4Xi88m76BkMEI/Wa+rA?= =?us-ascii?q?XWRMhCo5/HUfSSAfPyJzmHiblEZgAFzqnmIoQJMY33wUtiakN1nI7SAUrfQc?= =?us-ascii?q?hNojF9bg8zuEhC7WJxTnMy2034cQOg+2UcFeSunh4xhAp+evoi+yvx41ctJ1?= =?us-ascii?q?rKuCsxnFM3mdr7nTCbaCTxI7uoXYFKFyr0sFA8Mpf8QwZvcwKym01lNDDfSr?= =?us-ascii?q?JeibtgaHpniAjGuZtAAfRcV7FLYAcMxfGLYPUlyU9cpTujxU9G4+vFFJRjmR?= =?us-ascii?q?A2fp6rqnJPxxhsbMUpJaDKIqpG0ERQjLqUviC0zuAx3BMeJ0EV/WOOeS4IvU?= =?us-ascii?q?sINqUmJyuo5eFj9A2CmjtZd2cXTfYqpOxl9l8lMeSa0y3gy6JDKly2N+GHNa?= =?us-ascii?q?yZv2nAmtKWTVwo00MJl09F/b9w0cg5aEebTEEvw6GXFxgQO8rCNBtZb8xM+3?= =?us-ascii?q?jPZSyOq/nCwYppP4WhEeDlVfSBu7gSgk+/BgkmApoM4dobHpm3yk7YN8fmIK?= =?us-ascii?q?QCyRU36wThPE+FA+hReBKXjDcHpNmyzJBq3YlcIjEdBXtyMSCs67nKuAAlm/?= =?us-ascii?q?uDU80wYnsAWYsELH02UtWgmyFFp3RAECW30uUBxQiY6T/8pzjfDDn7b9pnf/?= =?us-ascii?q?eafQpiBsys9zgj9Ka7kkLY8pLbJ27mL9tiocPP5fkcp5mZF/NeVaN9vFvEm4?= =?us-ascii?q?lEW3yqVHbCEdCvJ5fqbYkjcd30Cm2hX1y6kzI1Tt79PM2jL6iTmw3oQpxUsI?= =?us-ascii?q?aD1jA5KcC9Di0eGwt3p+wb/qJzfxcDY50gbhPzqwQ+LbawIBmG3dWqQmatLz?= =?us-ascii?q?RWT/1ezeW1Z7xX0yQsYfWgyHslVJ06yfe48VIVTpEQkh7e3eqjZ5VZUSXrFH?= =?us-ascii?q?1RYRnApSo4l2hkN+Y92OQ/zQjJsVYCLT+EavZlaGtev9EzHVmSO2l5CnIkR1?= =?us-ascii?q?+AiorO+gus0KoI/ytegdlUzexFsH7xvpLEbjOjQqqrponRsyoncNgpvrZxPZ?= =?us-ascii?q?blIsSYqJPUhibfQ4XIsg2ZTC66EOJXlcJKICJFRvlEg2IlNNcHuYpA6EoxSt?= =?us-ascii?q?wxK6ZJCKYyurCgcSBkAjIKzS8FS4OA2yQPgua627vGiBiQdIotMBkav5VemN?= =?us-ascii?q?scUzV7YiQGpKC9UYXWknWLSmkPIAgI6gRN6xgMlohqfuDq+IDIVoNDyyZKo/?= =?us-ascii?q?JoVSvGDoVo91z+SmyNnVj0VPChnPez0QJU0v3szsERWARjBkhF2+ZWikwoJa?= =?us-ascii?q?l1K6kXoIHHqSKHel3hvG3z0uumOEdextDOe13+EoXFqXL2UjcA9n0MWY9P1H?= =?us-ascii?q?bfGIwOkwVkdakrpU9DIIS9d0ni4DwkwphmEKOjVcC33Volq2gJRzuyGdpbF+?= =?us-ascii?q?5mqE7XWCFiY52zs5rlNYldTnNS9ZGApVpUi1liMym8yZVAMc5N+SIMUCJJoT?= =?us-ascii?q?qDoNu4UNdD1tNuD58QPtd/vG/wGLlaN5eMo305oKDvx2Td+zA7rle12iu/FL?= =?us-ascii?q?O/T+1E4WISAAMpKHqCqkM3Fesj7n/S8kzRslBz5+pbHqOPjVlrrzlgApBDHS?= =?us-ascii?q?1J1Xe4L1RpUHZJreNaKLjPc8NGR/k+fxivOwYxFfQ+xUyG4Vl0nWvlYyx1rg?= =?us-ascii?q?Za5zrdUBcqWiYImbrthDkeqt29OTAAVZJIbDIhbyPbJAKHgyxXuwxfa05yUZ?= =?us-ascii?q?ADHtlF460b3ZdT/sfaS0ajMzsFXBt5NgI8y/Vfi1VOsECFeSDZEQqodOrAsh?= =?us-ascii?q?xtcseXt86lNvP5/B1Iion/quA3670DR2G6mQ2qWd3erZXzttuEtkuUc6f3Lv?= =?us-ascii?q?OzbGTdTDfWixCwnrAkA4PM/yfNLApRM4N6xmY8YZj9FW7LOgxLJ6QfJ0dAVK?= =?us-ascii?q?B6b9BGrvpbZ89idqYJ47ViBgmbRhP1BYygsOVGLkvJRTvANSmB9fa/oY3L57?= =?us-ascii?q?zHVefgftCMx2rAQ69vOJd66CX0G7Du0YBE4Ur6wPZt9kR9SVjdKCCMt9HhKw?= =?us-ascii?q?wE5cW4cUvipJIpFyvMAJhsiHrt2l1Ad80PTiK26psYzI1W6G3sSeN41Uj+q/?= =?us-ascii?q?ZS+KVl6YYp5bBp1ca0Kr3IJfRcr0BnHgCeBh92+ZU1HGh/W2dRb/cVKPfKeK?= =?us-ascii?q?QUjdvjq+7pGKMK7x2V4fZWacPdJ0HGmMmwFC2TSQBekAcGsz4aIROW1+SZlK?= =?us-ascii?q?9sVcalue/511ov41i/Kx4L17Vt6pmE+6WWvu/Xbh3RzbceVqjsWMzzsqwmu1?= =?us-ascii?q?mO6v08iL4OZmt1bhWmEOkcTMES3HvvwLsxzS0yD8PMAa7v9OREV3IjkTLqg4?= =?us-ascii?q?p9EEkOGvMIAbqL+pxTkXw5m+zCONwZaKJCmmeTFR68CLAC1Hqr5jCLL2linx?= =?us-ascii?q?7BzQv/QX6p7F/xty93WzHAz9D5kkpaTrO3H1tdXzK1OU9ktzOCJBLou8Drua?= =?us-ascii?q?sp7EE3PGvktMiOlGe4I7NYAcn/JN2aISkpq1Mal4UxScaz2Y8HGdq8LtAR8G?= =?us-ascii?q?t9bvfE6GOkjTVBo6FZiIra+M2V/e/XHXa4ha2At7qN3CxYymQ/vVwn5dCvLO?= =?us-ascii?q?vO6MOWQ/SozGsRSyZ/uxffUB61sLPbsksUNVaN0EjVhIwAJstZ0mUg1kH6+O?= =?us-ascii?q?gjR8o+9ApAGYbGe/MCojfzNDzvwVmBZ9I3Vy+e0yZYH1/uFVl3BrI82WLqs8?= =?us-ascii?q?7Tk3ff5UEoTJFqd0P7nRx3E5k4KUU15VcLwCoMCxQCZAuHA7GvAUTlKYoEWl?= =?us-ascii?q?YZaRSbwre1Zqc30Vd0wrO16+/ZdfZ8CLYVNvZBkg6Om0BWGpcRsa0YXLJ8dE?= =?us-ascii?q?FS+bXSpgjjEYfnWebplWY+NP2yWMBa8tsZu2Ek4gmhWxqq8Y1D4KoDiJCUaq?= =?us-ascii?q?5EZoDBvM9g4Ed8/j4DbzFDjhd5gRO4V+Acue/i78PUsJqt8OmuUrgiS/8Q9x?= =?us-ascii?q?guCGR0l4Hwj0w7odHLy+dcTZXYiYb48ABNJX6GoprV0xl4KeoTNo2qfbdg93?= =?us-ascii?q?McJygdJnIDJsSWa/gi4yB3NDXc+l1CDtkKZdwGIMrHgRpUhVHxWLFP6srbHU?= =?us-ascii?q?eVC4Ztd88y6Wr60zQ18YYhXebh7z+2PorT71ZXP/NMlC9sjs7NpPAJwfrODy?= =?us-ascii?q?ga+XuZZAZ7wiOMz5mAEPjx8v+KyN7KS1MKBCg2XJlBJDCa4wyoWvK1lIn1Ug?= =?us-ascii?q?OT8sLzj5Y+dEWeR3OvmKQFtr1BEfVHiiX93zhRCpr5h/SLvNqw8GFXrEFIEJ?= =?us-ascii?q?5v7R3ZH6VSJpB7ORX7lsmoQUhxHSn/d9vXdhopvuqZ2OEM7/94N0TgeY8ROg?= =?us-ascii?q?gExK7i6XpJUgtuT6b7sU2HUuIXeNtrU+jErnRS6YJ8N68PIkaSq4HwojdPsl?= =?us-ascii?q?A2DxcjaKUsoTxCaknOgApVVr7suL4HjgsTS8R5uEFLGWK0NmIz/D/HVaNSjK?= =?us-ascii?q?mKFvMa7i+TTqsVU0VzMyN+RRy11I9pe7uzkvBNqnlGkT9loPg2zzxmQwOxuS?= =?us-ascii?q?PyqKIJ2DIg4K+3uS4AuHxES+WeljnHCU9HzPsUl6scDGzi6VOkankZcITy+K?= =?us-ascii?q?VnJdjn9YQ57XU/eQ8jfywaUuu+ECzwiqKIApCVsN1CnhKNv9/ObbCrJygIKr?= =?us-ascii?q?s90Q7jR2R60gXGmxZo9HUETy647N8gPoq9Itolxiu0FmjHblYD/L1GvNH3tV?= =?us-ascii?q?EVUOs8cUlhz3l70sibWi0NQ9TCG2I0jggidGVFf4tP6RsbF6kznjaIpbJL/g?= =?us-ascii?q?AObzfSFYSp4I7Qnd3H2XMlV9dl2nrWprGZhpMtyHBlnsl74TKOuHQTcezYVN?= =?us-ascii?q?RhAmby1odZ1+P+Y/StsuYaSIpp0rihV+UCMsa782usxJpqQlOlxqgZH1ehMu?= =?us-ascii?q?8M3LTbUyC+RmCDROSLdXSMnzY+Mk7v6hmoLkE3ZN1Mr0AjLuvInoRcmBH5Ub?= =?us-ascii?q?NoWiWQokfWzHctMeMfaw07uYSqdhcUTOEPfeicJOkvwPo4CFcWaX/GAzd2WK?= =?us-ascii?q?eKtgv5hIVnNm8m7EP2bP7n9RrpGMCVHAhCGonf+No5wfWnQiqkPnh6wVUmJE?= =?us-ascii?q?Bp88/HHkk18+pbdIyc29PXgoI/mdUZeu9tPCt1gdsanoZu+MHAy8uRWQ3AxZ?= =?us-ascii?q?b1Y9fOq76XBOOJiwwHYGBRGoIQewLur9E3JtcjWqb7BbJDvA8EAaExTdomLW?= =?us-ascii?q?insOlWJQZ+aUb0Y66ug9Ki8uCOYYFOpmT+6Fs1ISaavAcMnLj8YQV9bp2uz1?= =?us-ascii?q?fvOp89QCkJ+9FkDBprGIlnHs4EqwOhBI7Sk6a+3Zv510RntKcuvKb+DerGnI?= =?us-ascii?q?C124h9UZ9A6WSRMTrRDbUtiUNg2KD61uzN1pj3FNPKZcIPVO89RHXMLLDBAN?= =?us-ascii?q?P7YmaKO8Thawtd/rWByrNlQ1CUYyzkW6euqiKpLrNn7F89x4g+e/Dcmnhlu7?= =?us-ascii?q?Xa3sbiImJWvCGuqVaXO5ZFql/HH+rTW1RTU/XTtC4vJqANYoa82a9IefwrxN?= =?us-ascii?q?yN5UM7uC9PysSIC6ioqkvd3ARwcpeNf2Xz3CNsYYQWLQ73HE0gjHXTrW7SSS?= =?us-ascii?q?BEI9SpM49ghtqYFBbq/UZZgmYrdyhKHW++FoTZAnQSx8/rPF7CzwlMFdtW2r?= =?us-ascii?q?fuIRRi5KSvVellPIlEkuy2tbIB1MxkMDzLWNMFZHPtFJNdZRFpJ72V4lUlZw?= =?us-ascii?q?UL9b08W4NzYJmKcyZleEuDyCanywzE3AW0ctG3z6+GLW4Q9WkP1LPK1zVA5k?= =?us-ascii?q?G5tP+Vj9elUeXfa5f7UQ=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2DBAADFHCBb/wHyM5BcGgEBAQEBAgEBAQEIAQEBAYNAA?= =?us-ascii?q?4EFXBYSi3xfjAqWWhSBYCcTAYZ0ITQYAQIBAQEBAQECAWwogjUkAYJPAwMBA?= =?us-ascii?q?iQTFCAOAwkBAT4CCAgDAS0VEQYBBwsFGASDAYIBAwGtJDODeQEBhE6BaIhIg?= =?us-ascii?q?VQ/iFsBEgGFdQKHLQ8ShGiBI4stBwKBZ4NaiS0LjTKSeThhcU0jUIJDgiEXj?= =?us-ascii?q?WEBN216AQGMXII5AQE?= Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 12 Jun 2018 19:23:45 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus.infosec.tycho.ncsc.mil [192.168.25.40]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w5CJNdUb031539; Tue, 12 Jun 2018 15:23:44 -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 w5C8AUId003279 for ; Tue, 12 Jun 2018 04:10:30 -0400 Received: from goalie.tycho.ncsc.mil (goalie.infosec.tycho.ncsc.mil [144.51.242.250]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w5C8AZBu009976; Tue, 12 Jun 2018 04:10:35 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1C5AABwfx9bly0bGNZcHAEBAQQBAQoBA?= =?us-ascii?q?YNAgWQWEot7jGeWWoF4hHcCgkwhNBgBAgEBAQEBAQIUAQEBAQEGGAaGAQMDJ2I?= =?us-ascii?q?/ElcGARKDIoIEAawrM4N5AQGETIFoiEiBVD+OYwKHLA8ShGiBI4srBwKBZ4Nai?= =?us-ascii?q?SkLjS+SdoIKTSNQgkOCIQ4JjWEBN22QMQEB?= X-IPAS-Result: =?us-ascii?q?A1C5AABwfx9bly0bGNZcHAEBAQQBAQoBAYNAgWQWEot7jGe?= =?us-ascii?q?WWoF4hHcCgkwhNBgBAgEBAQEBAQIUAQEBAQEGGAaGAQMDJ2I/ElcGARKDIoIEA?= =?us-ascii?q?awrM4N5AQGETIFoiEiBVD+OYwKHLA8ShGiBI4srBwKBZ4NaiSkLjS+SdoIKTSN?= =?us-ascii?q?QgkOCIQ4JjWEBN22QMQEB?= X-IronPort-AV: E=Sophos;i="5.51,213,1526356800"; d="scan'208";a="298879" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.35]) by goalie.tycho.ncsc.mil with ESMTP; 12 Jun 2018 04:10:35 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AQYYcRhaPI+IcPjdnqusZjSP/LSx+4OfEezUN45?= =?us-ascii?q?9isYplN5qZps66ZR7h7PlgxGXEQZ/co6odzbaO7ua4ASQp2tWoiDg6aptCVh?= =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?= =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTahYb5+Ngm6oRnMvcQKnIVuLbo8xA?= =?us-ascii?q?HUqXVSYeRWwm1oJVOXnxni48q74YBu/SdNtf8/7sBMSar1cbg2QrxeFzQmLn?= =?us-ascii?q?s65Nb3uhnZTAuA/WUTX2MLmRdVGQfF7RX6XpDssivms+d2xSeXMdHqQb0yRD?= =?us-ascii?q?+v9LlgRgP2hygbNj456GDXhdJ2jKJHuxKquhhzz5fJbI2JKPZye6XQds4YS2?= =?us-ascii?q?VcRMZcTzFPDIOiYYUBDOQPOuRXr4fyqFQStha+GRWgCfnzxjJSmnP6was32P?= =?us-ascii?q?khHwHc2wwgGsoDvm7Ko9XpKqgSS/2+wqbOzTrecfxWwyzy6I/SchAuvPqBWq?= =?us-ascii?q?pwftTNyUYxDQPJlEufqYr4MDyLzOQCqG+b7/BvVe+0kG4nrAdxozi1ysgwjY?= =?us-ascii?q?nJg5sYx1bZ/it62IY4PcO0RFN0bNK+DpdduDuWO5V0T884TGxluD42x7MEtJ?= =?us-ascii?q?KhYSQHxpAqywTCZ/GHcoWE+AzvWeKXLDxlnnxqYqi/iAy38UW4yu3zSM200F?= =?us-ascii?q?FSoyVLiNfCuG4A2hLN58adVvZx4kas1SyR2A/N7+FEOk80mbDeK5E7w74wko?= =?us-ascii?q?AfsUHCHi/ygEn2jamWeVs4+uWw9ejrf7rrqoWCO4J7kA3yLKYjltawDOk4Kg?= =?us-ascii?q?QOWnKU+eW41L3t5035R7BKg+UsnKbHrJDVO94bqrS2DQ9Tz4ks9Qy/ACyh0N?= =?us-ascii?q?QCknkKN0lFeBWBj4npIV3BPPf4DfKnj1S2jDhr3+zGPqHmApjVNXjMjazhcK?= =?us-ascii?q?1h609c1AUzzddf64hSCrEaOv3/QEDxtNvGDhUhKQy73/7nCMlh1oMZQW+PGb?= =?us-ascii?q?GWMKfTsV+O++IuLPKBZJMVuTnhK/gl4OTijXkimVAHZ6Wp0pwXaG7rVshhdh?= =?us-ascii?q?GBbGbhmJEMF2sHpAA5VuPCk1qEQHhYYHPkG+oE7yw/QKehCp3ODtS1iaGF9D?= =?us-ascii?q?+yA5kTY2dBEF3KGnDtIcHMYOsBcCKfJIdalzUAUbWwA9s62QqGqB7xy70hKP?= =?us-ascii?q?HdvCIfq8SnnPVv5uabrRgo9Cc8W8mF2nuMVElsl3kJXCcy1aty50tnxQHHmY?= =?us-ascii?q?pxhvFDXflU/elISU9uN5vb1fZ7EPj0UwfMf5GOUlnwBp2KCDcwQ9Z54cIUbE?= =?us-ascii?q?t7AJ32ghnF3ieuAZcQmriPDZoz4uTX2H2nY45RzGvJnI0sg1chWMcHYWGii6?= =?us-ascii?q?Jx8BLfL5TEn0WQi+ChcqFKmGaZ72qHzGyTrGlEQQVwVuPDRnlZaUzI+5Cxsk?= =?us-ascii?q?fDSaK+TK8qORZbyNKTb65NZsDtgH1YS/r5ftfTeWS8nyG3HxnegvvYaIvsZn?= =?us-ascii?q?VY3yjHDkUAux4c8GzANgUkACql5WXEA2oqXRjUblnj/KFT4DXzbkYwyxCMJQ?= =?us-ascii?q?U1zLev9RM9hfWYT+IVmLkDvXFyhS9zGQOF0s7bEZKtoQZsZq9be9x1tE9KyW?= =?us-ascii?q?/D8QF7MpG6Jad4iXYFdAJm+Ujp0kMkWc17jcE2oSZyn0JJIqWC3QYELmvAh8?= =?us-ascii?q?qiM6DLKmT04BGkYrLX3VebytuN56MT86th+WjbkCryPXILqy8h3tRQyHTa45?= =?us-ascii?q?zLCEwXUJaiGko09h0vobbcb2F94o7PznRjPOGytSOKwNMmAuYpi16gct5TPb?= =?us-ascii?q?nCFVr0FMsXCg=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CSAACUfx9bly0bGNZcHAEBAQQBAQo?= =?us-ascii?q?BAYNAgWQWEot7jGeWWoF4hHcCgkohNBgBAgEBAQEBAQIBEwEBAQEBBhgGWII?= =?us-ascii?q?1JAGCTwMDJ2I/ElcGARKDIoIEAawrM4N5AQGETIFoiEiBVD+OYwKHLA8ShGi?= =?us-ascii?q?BI4srBwKBZ4NaiSkLjS+SdoIKTSNQgkOCIQ4JjWEBN22QMQEB?= X-IPAS-Result: =?us-ascii?q?A0CSAACUfx9bly0bGNZcHAEBAQQBAQoBAYNAgWQWEot7j?= =?us-ascii?q?GeWWoF4hHcCgkohNBgBAgEBAQEBAQIBEwEBAQEBBhgGWII1JAGCTwMDJ2I/E?= =?us-ascii?q?lcGARKDIoIEAawrM4N5AQGETIFoiEiBVD+OYwKHLA8ShGiBI4srBwKBZ4Nai?= =?us-ascii?q?SkLjS+SdoIKTSNQgkOCIQ4JjWEBN22QMQEB?= X-IronPort-AV: E=Sophos;i="5.51,213,1526342400"; d="scan'208";a="14449668" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from updc3cpa06.eemsg.mail.mil ([214.24.27.45]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 12 Jun 2018 08:10:34 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;5a1e8181-21fa-4ce4-9cc1-48295c67a7b1 Received: from localhost.localdomain (localhost [127.0.0.1]) by UPDCF3IC02.oob.disa.mil (Postfix) with SMTP id 414jHY2YW1z2Sj4B; Tue, 12 Jun 2018 08:10:33 +0000 (UTC) Received: from UPDC3CPA02.eemsg.mil (unknown [192.168.18.9]) by UPDCF3IC02.oob.disa.mil (Postfix) with ESMTP id 414jHX220yz2Sj45; Tue, 12 Jun 2018 08:10:32 +0000 (UTC) Authentication-Results: UPDC3CPA02.eemsg.mail.mil; dkim=none (message not signed) header.i=none X-EEMSG-check-008: 229233084|UPDC3CPA02_EEMSG_MP18.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 37.139.156.29 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0C4AABEfR9bhx2ciyVcHAEBAQQBAQoBAYU6Eot7jGeWWoF4hHcCCIJOITQYAQIBAQEBAQECFAEBAQgNCQgpL4UpAwMnYj8SVwYBEoMiggWsKjODeQEBhEyBaAkBiD6BVD+OYwKHLA8ShGiBI4srBwKBZ40DC40vknaCCk0jUIJDgiEOCY1hATc9MJAxAQE X-IPAS-Result: A0C4AABEfR9bhx2ciyVcHAEBAQQBAQoBAYU6Eot7jGeWWoF4hHcCCIJOITQYAQIBAQEBAQECFAEBAQgNCQgpL4UpAwMnYj8SVwYBEoMiggWsKjODeQEBhEyBaAkBiD6BVD+OYwKHLA8ShGiBI4srBwKBZ40DC40vknaCCk0jUIJDgiEOCY1hATc9MJAxAQE Received: from seldsegrel01.sonyericsson.com ([37.139.156.29]) by UPDC3CPA02.eemsg.mail.mil with ESMTP; 12 Jun 2018 08:10:31 +0000 X-EEMSG-check-009: 444-444 From: Peter Enderborg To: , Paul Moore , Stephen Smalley , Eric Paris , James Morris , Daniel Jurgens , Doug Ledford , , , , "Serge E . Hallyn" Date: Tue, 12 Jun 2018 10:09:05 +0200 Message-ID: <20180612080912.7827-7-peter.enderborg@sony.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180612080912.7827-1-peter.enderborg@sony.com> References: <20180612080912.7827-1-peter.enderborg@sony.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 12 Jun 2018 15:18:27 -0400 Subject: [PATCH 06/13] selinux: Cleanup printk logging in services X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.21 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 Replace printk with pr_* to avoid checkpatch warnings. Signed-off-by: Peter Enderborg --- security/selinux/ss/services.c | 71 +++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 8057e19dc15f..9ad9b6c2f0a7 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -136,8 +136,7 @@ static int selinux_set_mapping(struct policydb *pol, p_out->value = string_to_security_class(pol, p_in->name); if (!p_out->value) { - printk(KERN_INFO - "SELinux: Class %s not defined in policy.\n", + pr_info("SELinux: Class %s not defined in policy.\n", p_in->name); if (pol->reject_unknown) goto err; @@ -156,8 +155,7 @@ static int selinux_set_mapping(struct policydb *pol, p_out->perms[k] = string_to_av_perm(pol, p_out->value, p_in->perms[k]); if (!p_out->perms[k]) { - printk(KERN_INFO - "SELinux: Permission %s in class %s not defined in policy.\n", + pr_info("SELinux: Permission %s in class %s not defined in policy.\n", p_in->perms[k], p_in->name); if (pol->reject_unknown) goto err; @@ -170,7 +168,7 @@ static int selinux_set_mapping(struct policydb *pol, } if (print_unknown_handle) - printk(KERN_INFO "SELinux: the above unknown classes and permissions will be %s\n", + pr_info("SELinux: the above unknown classes and permissions will be %s\n", pol->allow_unknown ? "allowed" : "denied"); out_map->size = i; @@ -644,7 +642,7 @@ static void context_struct_compute_av(struct policydb *policydb, if (unlikely(!tclass || tclass > policydb->p_classes.nprim)) { if (printk_ratelimit()) - printk(KERN_WARNING "SELinux: Invalid class %hu\n", tclass); + pr_warn("SELinux: Invalid class %hu\n", tclass); return; } @@ -793,7 +791,7 @@ static int security_compute_validatetrans(struct selinux_state *state, ocontext = sidtab_search(sidtab, oldsid); if (!ocontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, oldsid); rc = -EINVAL; goto out; @@ -801,7 +799,7 @@ static int security_compute_validatetrans(struct selinux_state *state, ncontext = sidtab_search(sidtab, newsid); if (!ncontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, newsid); rc = -EINVAL; goto out; @@ -809,7 +807,7 @@ static int security_compute_validatetrans(struct selinux_state *state, tcontext = sidtab_search(sidtab, tasksid); if (!tcontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, tasksid); rc = -EINVAL; goto out; @@ -883,7 +881,7 @@ int security_bounded_transition(struct selinux_state *state, rc = -EINVAL; old_context = sidtab_search(sidtab, old_sid); if (!old_context) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %u\n", + pr_err("SELinux: %s: unrecognized SID %u\n", __func__, old_sid); goto out; } @@ -891,7 +889,7 @@ int security_bounded_transition(struct selinux_state *state, rc = -EINVAL; new_context = sidtab_search(sidtab, new_sid); if (!new_context) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %u\n", + pr_err("SELinux: %s: unrecognized SID %u\n", __func__, new_sid); goto out; } @@ -1040,14 +1038,14 @@ void security_compute_xperms_decision(struct selinux_state *state, scontext = sidtab_search(sidtab, ssid); if (!scontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, ssid); goto out; } tcontext = sidtab_search(sidtab, tsid); if (!tcontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, tsid); goto out; } @@ -1129,7 +1127,7 @@ void security_compute_av(struct selinux_state *state, scontext = sidtab_search(sidtab, ssid); if (!scontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, ssid); goto out; } @@ -1140,7 +1138,7 @@ void security_compute_av(struct selinux_state *state, tcontext = sidtab_search(sidtab, tsid); if (!tcontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, tsid); goto out; } @@ -1183,7 +1181,7 @@ void security_compute_av_user(struct selinux_state *state, scontext = sidtab_search(sidtab, ssid); if (!scontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, ssid); goto out; } @@ -1194,7 +1192,7 @@ void security_compute_av_user(struct selinux_state *state, tcontext = sidtab_search(sidtab, tsid); if (!tcontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, tsid); goto out; } @@ -1310,7 +1308,7 @@ static int security_sid_to_context_core(struct selinux_state *state, *scontext = scontextp; goto out; } - printk(KERN_ERR "SELinux: %s: called before initial " + pr_err("SELinux: %s: called before initial " "load_policy on unknown SID %d\n", __func__, sid); rc = -EINVAL; goto out; @@ -1323,7 +1321,7 @@ static int security_sid_to_context_core(struct selinux_state *state, else context = sidtab_search(sidtab, sid); if (!context) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, sid); rc = -EINVAL; goto out_unlock; @@ -1678,14 +1676,14 @@ static int security_compute_sid(struct selinux_state *state, scontext = sidtab_search(sidtab, ssid); if (!scontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, ssid); rc = -EINVAL; goto out_unlock; } tcontext = sidtab_search(sidtab, tsid); if (!tcontext) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, tsid); rc = -EINVAL; goto out_unlock; @@ -1911,7 +1909,8 @@ static inline int convert_context_handle_invalid_context( return -EINVAL; if (!context_struct_to_string(policydb, context, &s, &len)) { - printk(KERN_WARNING "SELinux: Context %s would be invalid if enforcing\n", s); + pr_warn("SELinux: Context %s would be invalid if enforcing\n", + s); kfree(s); } return 0; @@ -1962,7 +1961,7 @@ static int convert_context(u32 key, c->len, &ctx, SECSID_NULL); kfree(s); if (!rc) { - printk(KERN_INFO "SELinux: Context %s became valid (mapped).\n", + pr_info("SELinux: Context %s became valid (mapped).\n", c->str); /* Replace string with mapped representation. */ kfree(c->str); @@ -1974,7 +1973,7 @@ static int convert_context(u32 key, goto out; } else { /* Other error condition, e.g. ENOMEM. */ - printk(KERN_ERR "SELinux: Unable to map context %s, rc = %d.\n", + pr_err("SELinux: Unable to map context %s, rc = %d.\n", c->str, -rc); goto out; } @@ -2033,7 +2032,7 @@ static int convert_context(u32 key, oc = oc->next; rc = -EINVAL; if (!oc) { - printk(KERN_ERR "SELinux: unable to look up" + pr_err("SELinux: unable to look up" " the initial SIDs list\n"); goto bad; } @@ -2065,7 +2064,7 @@ static int convert_context(u32 key, context_destroy(c); c->str = s; c->len = len; - printk(KERN_INFO "SELinux: Context %s became invalid (unmapped).\n", + pr_info("SELinux: Context %s became invalid (unmapped).\n", c->str); rc = 0; goto out; @@ -2170,13 +2169,13 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) newpolicydb->len = len; /* If switching between different policy types, log MLS status */ if (policydb->mls_enabled && !newpolicydb->mls_enabled) - printk(KERN_INFO "SELinux: Disabling MLS support...\n"); + pr_info("SELinux: Disabling MLS support...\n"); else if (!policydb->mls_enabled && newpolicydb->mls_enabled) - printk(KERN_INFO "SELinux: Enabling MLS support...\n"); + pr_info("SELinux: Enabling MLS support...\n"); rc = policydb_load_isids(newpolicydb, &newsidtab); if (rc) { - printk(KERN_ERR "SELinux: unable to load the initial SIDs\n"); + pr_err("SELinux: unable to load the initial SIDs\n"); policydb_destroy(newpolicydb); goto out; } @@ -2187,7 +2186,7 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) rc = security_preserve_bools(state, newpolicydb); if (rc) { - printk(KERN_ERR "SELinux: unable to preserve booleans\n"); + pr_err("SELinux: unable to preserve booleans\n"); goto err; } @@ -2207,7 +2206,7 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) args.newp = newpolicydb; rc = sidtab_map(&newsidtab, convert_context, &args); if (rc) { - printk(KERN_ERR "SELinux: unable to convert the internal" + pr_err("SELinux: unable to convert the internal" " representation of contexts in the new SID" " table\n"); goto err; @@ -2999,7 +2998,7 @@ int security_sid_mls_copy(struct selinux_state *state, rc = -EINVAL; context1 = sidtab_search(sidtab, sid); if (!context1) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, sid); goto out_unlock; } @@ -3007,7 +3006,7 @@ int security_sid_mls_copy(struct selinux_state *state, rc = -EINVAL; context2 = sidtab_search(sidtab, mls_sid); if (!context2) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, mls_sid); goto out_unlock; } @@ -3104,14 +3103,14 @@ int security_net_peersid_resolve(struct selinux_state *state, rc = -EINVAL; nlbl_ctx = sidtab_search(sidtab, nlbl_sid); if (!nlbl_ctx) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, nlbl_sid); goto out; } rc = -EINVAL; xfrm_ctx = sidtab_search(sidtab, xfrm_sid); if (!xfrm_ctx) { - printk(KERN_ERR "SELinux: %s: unrecognized SID %d\n", + pr_err("SELinux: %s: unrecognized SID %d\n", __func__, xfrm_sid); goto out; } @@ -3202,7 +3201,7 @@ int security_get_permissions(struct selinux_state *state, rc = -EINVAL; match = hashtab_search(policydb->p_classes.table, class); if (!match) { - printk(KERN_ERR "SELinux: %s: unrecognized class %s\n", + pr_err("SELinux: %s: unrecognized class %s\n", __func__, class); goto out; }