From patchwork Wed May 16 11:55:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Guy Briggs X-Patchwork-Id: 10403751 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 E540F6037D for ; Wed, 16 May 2018 12:21:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D486C288BD for ; Wed, 16 May 2018 12:21:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C90C9288F9; Wed, 16 May 2018 12:21:42 +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=unavailable version=3.3.1 Received: from ucol19pa12.eemsg.mail.mil (ucol19pa12.eemsg.mail.mil [214.24.24.85]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D3B4D288F7 for ; Wed, 16 May 2018 12:21:41 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.49,390,1520899200"; d="scan'208";a="561731549" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by ucol19pa12.eemsg.mail.mil with ESMTP; 16 May 2018 12:21:37 +0000 X-IronPort-AV: E=Sophos;i="5.49,404,1520899200"; d="scan'208";a="13364531" IronPort-PHdr: =?us-ascii?q?9a23=3AgRbhWx9Tm6yzRP9uRHKM819IXTAuvvDOBiVQ1K?= =?us-ascii?q?B50ukXIJqq85mqBkHD//Il1AaPAd2Araocw8Pt8InYEVQa5piAtH1QOLdtbD?= =?us-ascii?q?Qizfssogo7HcSeAlf6JvO5JwYzHcBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBB?= =?us-ascii?q?r/KRB1JuPoEYLOksi7ze+/94HdbglSmDaxfa55IQmrownWqsQYm5ZpJLwryh?= =?us-ascii?q?vOrHtIeuBWyn1tKFmOgRvy5dq+8YB6/ShItP0v68BPUaPhf6QlVrNYFygpM3?= =?us-ascii?q?o05MLwqxbOSxaE62YGXWUXlhpIBBXF7A3/U5zsvCb2qvZx1S+HNsDtU7s6RS?= =?us-ascii?q?qt4LtqSB/wiScIKTg58H3MisdtiK5XuQ+tqwBjz4LRZoyaOuB+fqfAdt0EQ2?= =?us-ascii?q?RPUNtaWyhYDo+hc4cDCuwMMuFEoYf9uVYCtAKyCwuxC+P10zNGm2L23bYi0+?= =?us-ascii?q?s/DQ7GwBUsH9YJsHXasd75MKcfXeWzwabP0TvNb+1b1S7k5IbKbx8hu+iAU6?= =?us-ascii?q?9tccrK0UkgCR/KjkmNooDhIT+ZyuEBvm6G5ORiSO2vkXYqpQFvrDahxckjiI?= =?us-ascii?q?fJiYAbyl7Z7SV0wps5KNOmR05getOoDIdcujuGO4dqXs8uX2dlszs6xL0cvp?= =?us-ascii?q?67eTAHxogmxxHDa/yIaZKI7Q/+X+iQPDd5hG9uda+lhxaz/kigxfb8XdSz3V?= =?us-ascii?q?ZQoSpKicLBtmoT2BPO6siIUOd98l291jaI0gDe8+dJKl06m6rcLp4u2L8wlp?= =?us-ascii?q?wLvETMHy/2hEX2jLKNeUk+5ueo7OHnb7P7rZGfL495khzyP6shl8ClAek0Lx?= =?us-ascii?q?ICU3aU9OiizrHv4FX1TbRLg/Esj6XUs5LXKd4FqqO3DQJZyIQu5hi5Ajy7yt?= =?us-ascii?q?oXh2MHI0hAeB+fiojpPEzBL+7gAPekhlSsjC9rx/fbPr39GpnNLmbMkLPmfb?= =?us-ascii?q?tl905T0hAzzdFC55JPEL0BPPLyVVPxtNzfFBM5NRC7w/37B9ln04MeWGaPDr?= =?us-ascii?q?eYMKPUr1CI+voiL/SDaYIaojrwK+Up6+TwgXI2h1MRZ7Sl0YMSaH+iH/RmJ0?= =?us-ascii?q?uZYWDrgtcECWoKpRQxTOjriF2ETD5SaG++ULk75jEmDoKpEZnMRpu2jbyd3C?= =?us-ascii?q?a0Ap1WZmdcBlCKCnfnbZ+IW/gLaCKMOsNhiCALVaC9S4890hGjrA36y71hLu?= =?us-ascii?q?XO5i0YtYjs1N5u6u3RkhEy8zl0AN6G02GRUW50hHgISyUx3KBlrkx30k2D3r?= =?us-ascii?q?Rgg/xECdxT4OtEUgU4NZHG0+N6CMvyWgXHfteIVlarWdumATUsTtM+2NAOfk?= =?us-ascii?q?B9G8m/jhzZ2CqqGbAVnaSRBJMo6qLcw2TxJ8FlxnfI1akhi1wmTdVVNWC9iK?= =?us-ascii?q?5w6RXcB4nTk0qDj6aqb6Mc3CzT+2if0WqCpkZYUBR/Ua/dR3AQelPWrcjl5k?= =?us-ascii?q?PFV7KhFKgoMg5Gyc6ENqtGd8bkjUtYS/f5OdTfYmWxm2GqCRaO2LyMcJLge3?= =?us-ascii?q?8B0yXFFEgEjwcT8G6bOggiHCihuXnTAyBpFVLqf0zj6/J+qG+hQk8y0Q6Kc1?= =?us-ascii?q?Vr16Cp9R4NmfycV/QT06oEuSYgrDV0Gk2w39fSC9aZpgpher9QYdUn71dd1m?= =?us-ascii?q?LZthJ9MYK6I6BkmFEebxx9v1ny2BVvFoVAjc8qoWs0wwpqM62YylJBdyiD0J?= =?us-ascii?q?DoILLXMGjy/Au3a67SwF7RzMiZ9r0I6PQipFXppBupGVY683V7z9lV1GOR5p?= =?us-ascii?q?vQDAUIV5L+Tkc39wNhqrHfeik95prY1WZiMKmvqDPC3MgpBOQ9wBa6Y9hfKL?= =?us-ascii?q?+EFBP1E8ACBMihMu8qm1+0bh8fP+Bd7q00P8S7d/ec366rJulgliq8jWtb+I?= =?us-ascii?q?B9zl6M9y1kR+HSwpkF2fCY0RWdVzrnlliursX3lZpDZTEIEWq10TLkC5JJZq?= =?us-ascii?q?1uYYYLDn+jI9eqydpjnJPtVHtY9VG5C1MAxsCpZQKYb0bh0g1IyUQXvXunlD?= =?us-ascii?q?Ojzzx6iTEpqbGf3DDVzuT5choHPWBKRGx4glfqO4S0ic4VXFSwZQgziBSl/V?= =?us-ascii?q?r6x7RcpKlnIWjcW0NIfzToIGF4Sau9raSCbNBV6JwzrCVXVf6wYVeASr7yux?= =?us-ascii?q?EayT/sH3NCxDAncDGnopP5nx1+iGKZMnlzt2HUdttuyhfF49zQX/lR3iAJRC?= =?us-ascii?q?NgkznYGkC8P8W1/dWTj5rDrOG+WH69Vp1Uaynn15+PtCu85W1sDh2yhPSzmt?= =?us-ascii?q?zhEQcgyy/70MNmVSLSrBbzeoPrzbi1Mfp7fkl0A1/x8856GoBlkossnZ0Qwm?= =?us-ascii?q?YVhpGU/XoBjGfyPs5W2bnmbHoMQz4LwsLa4BP/1E1lMH2J25rzVm+Bzct5e9?= =?us-ascii?q?m6fmQW1zon78BNDKeU6KJLnTFprVq/owPceuN9nioBxvs18nIahPsJuAU1xC?= =?us-ascii?q?WHHr8SBVVYPTDrlxmQ7NCxsqNXZH20fLizykV+m8uhDLecrQFAQnr5fY0iHS?= =?us-ascii?q?Bo5MVlLF3MyGHz6p3jeNTIddIcrACUkxPegOhNMp0xkOYKijR9OW/moH0l0P?= =?us-ascii?q?A0jQZ13Z2gp4iHLHht/LilDRFGOD31YNkT+j7zgqpEmMaZwZyvFI17GjoXRJ?= =?us-ascii?q?voUe6oEDUKuPT5MQaBDSYxqmmdGbXCHQ+T8kFmoGzTE5qzLXGYOGEZzcl+RB?= =?us-ascii?q?maPEFfmBobXCg+npMiCg+qxdDhcUdg6jAf/FH4rAFAyuVyNxnwSm3fvhunai?= =?us-ascii?q?8oSJiDKxpb9g9C6F3TMcyC6eJzGjpV/pO/owOQLWybfR5HDXkTWkyDBVDsIK?= =?us-ascii?q?Wh5cXa/+ifHOq+IOPEYa+SpuxGS/eI2ZWv35Nj/zmWMsWPOmdtD+En2kVZR3?= =?us-ascii?q?90AMLZlCsTSywMiy3Cddabqwmm9i1xsM+/7OzhWBjz6ouXF7tSLdJv9gi4ga?= =?us-ascii?q?eZKeGfmT15Jixe1pMQwn/I06MS00QOhCFrbTWtFq4AtSHVRqLKhqBXFwIbaz?= =?us-ascii?q?90NMZQ6aI8xBNCOdbDit7u2L54j+Q1C0xZVVzvm8GpY9YFI2ehO1PGHkmLMK?= =?us-ascii?q?6KJTrRw8H4eam8U6FfjP1Itx2svjaWC1fjMSqYmDb3URCvMP1MjCaAMRxfpo?= =?us-ascii?q?6ybAhiBXLkTNL8ZR2xKMV3giEuwb0omnPKMnYRPiNnfE9Kqr2Q7DhYgulkG2?= =?us-ascii?q?Bb9XpqM/WLlzyC7+bGLpYWsP1rAjl7lu9B/Hs7y6FV7DxfRPBvlirdtMJuo0?= =?us-ascii?q?qhkumJ0DZnVwBOqjlTjoKRoUpiIbnZ9oVHWXvc5x0N7GqQCxMMp9Z+F9Lgpb?= =?us-ascii?q?tfytnVm6L1MjtC9MjU/cQEDcjONM2HKGYhMQbuGDPMFgQFQiSkNX/BiEFGl/?= =?us-ascii?q?GS7mOarp4/qpf2mZoOTqRUVFs6F/8ADURlBtMCKo9tXjw4ib6bkNII5X2moR?= =?us-ascii?q?nNQ8Vau4rLVuiVAfTuNjmZi6JLZwEPwbzmLoQeLZH020tnalZmhovKAFbQUc?= =?us-ascii?q?pLoiJ/cg8+uF9N/2RmTm0vx0LlbRug4H0TFf+0hh42jQ9+YeUx9Djy+Fo3I1?= =?us-ascii?q?vKpDcqkEYvg9nlhiqRcDHpJqeqQY5WEzb0t1Q2Mp7jQAZ0bQmyklJ/OTfBQL?= =?us-ascii?q?JRgbVgen53iA/AuZtPHvtcQrNebB8W2/6Xe+0i0U5ApSW/2U9H+ezFBINklA?= =?us-ascii?q?Q0a5Gsq2lN2wFkbN4uOazfPqxJzkNThqKPpCOo0P4+wBMGLUYX7GySYDIIuF?= =?us-ascii?q?APNrQ+PSqn4Pds5hKYlDtZZGcMV+Enrelr9kMnJuuAyCzg06ZZKk+vN+2TNa?= =?us-ascii?q?WZtHbclcSQWFM/ylsIl1VZ/bhxycosbk2UV0YpzLSMCRsJMcvCJBpPYMVM7n?= =?us-ascii?q?jTejyCseLXwZJ6J4+9DPznTfeStKYIhUKpBBsmEJ4S7sQAA5asy1rVIt39LL?= =?us-ascii?q?4fzhUs6h/rK0uZA/RUYhKLkSsHosGlwJ9xw4ZdOikXAX9hPiWv+rbXuggqje?= =?us-ascii?q?KHXNcxeHcVQI0EN3MxWMChlC5ZuWlAACOw0uIDxwiI9yX8qTjIDDngc9pjY+?= =?us-ascii?q?+ZZQhyB9Gy+DU/9bW2iFHM/5rCIGH6MMhttcXU6eMGvZqHDe1bTaVluUfGh4?= =?us-ascii?q?ZYX2CqU3LIEdOtO5jwaowsbdvoCna6Ul2ykC86T8bxPdm3NaeEmwfoSphIsI?= =?us-ascii?q?ODxjAsKde9Fi0CGxd3v+wM/qZ8ZQwfbJUleRHosgQ/N6q4IAeeyNqjWH2iKT?= =?us-ascii?q?pMQPlZ1Om6aaFXwzAqbuCk1HsqVos6wPWv8U4RWJEKiQnTyu29aIlYSiX8AG?= =?us-ascii?q?FSexvRqiojjGhuLPwyw+clzBPPq1kcPCiBdPZ1Z2xco9E8GVSSLG15CmolRl?= =?us-ascii?q?+ciY7D7RCp370J4iRSgc1b0exfv3j4pJPfZyisWKOzo5XPryUgdcQmo7F2MY?= =?us-ascii?q?H7OMuGspLekSDfTJnXtg2FSza0GeNHlNZKPC9WR+JFln0iOcwDpYVO81ExVt?= =?us-ascii?q?skK7xJFqYsuqigaSB4Ai4K0S8ZS4SA0SQYguimwbvakQyffY8+MBweqppCnM?= =?us-ascii?q?USUyp3YiMYq6+jU4TWl2CESmgXLgcc9x5M5Acamo92YO/l/JLCTIVQxD5Ov/?= =?us-ascii?q?J0TizLG4Fm9lfhVm6WgVn4SPCgk+Oz3gJf1/Ps3ccFVxFhE0RdwPxWlkQwIr?= =?us-ascii?q?FtN6YQppLKsiOPdU7iuWLi0vGmJFpPxs3Idl34CoXFuHHyUyIG/30bWYtPyH?= =?us-ascii?q?bCFZsPiAp1cqArq0tQIIq+YEbx+yQkx5h1H7m/Tc2k3UwlrWsARyuwENpMEO?= =?us-ascii?q?BmsFPWWD15eJ+nspPlNItOQmVI4p2St09ZkFlxMy6+0ZdcKsdN4iISUzhLvz?= =?us-ascii?q?qducW9SNFZ2c52FJIMJc9/tGn7GKNBIpeRonk2tafoyn7W4Tw8t026xDqrEa?= =?us-ascii?q?+iU+1Z53EeGhkuJ2mGtkkvCO4s/3zO8lzRt1B75P1XBr6RgkVtuDx9BIxBBi?= =?us-ascii?q?5V1XC5KFR+VHlGvP9AKKvPd8xTXuI/agKxNBwmDf4pwUiJ8l9unXvjZCxyrA?= =?us-ascii?q?Ra8TjHXwYoTSkVnqvtmToGp8GlPj8VVYlFYig/YCfeNQ2bgzxXswhCZE1wXZ?= =?us-ascii?q?AWHMpF8akB3YRI5srCVVqsKSYdURx+Kw03zPtfmlRHsEiDZS/dCg+oeurVvR?= =?us-ascii?q?1sYcedtsipI+rl/A1fkIPorPg497kfR32hgQCiWt7eoJPgutCIq0eDerz1PP?= =?us-ascii?q?G7YX/EUDfDlwuwhas+A5nM4SfTLBJRK4Nmxno8fZjhFWnLMAxcJ60FOkVbVb?= =?us-ascii?q?p1acldr+BeYM9kZrgG9bFxCRKAWxzgBpajrP9YIVbPXT7eNTmO8vSjoYLP6r?= =?us-ascii?q?zQUfDgZteQx3ndXq13Iox36SL8G7f3y49R5lT52vFx9kNgU1fGNzqNrNP7Jg?= =?us-ascii?q?ME/MOibFftvoU1HTPKB5d9iGbtxlteeMUJXiKn64kYyJdF6HbqU+14zEnzsO?= =?us-ascii?q?pW97Z69Yk7+bdpyd27Ja3KM/RVrVdnAgSIBgVt7pgtAnJwR3pWYu8KLPfeZ7?= =?us-ascii?q?oZgNvrq+DqE6wX9ByV9PBYadTdIUHBgdOzCjaGSRxLhA0BsyIVLhOA1/6ZnK?= =?us-ascii?q?95UcSlqvL/2kIj+Vi+KQMJw6526IeY4KWIovTXbxzLwbgCRKfqWtv5rq4wtE?= =?us-ascii?q?OK+f0kiLkOd3RzYw2jC+UdV8gdxmL6waAryyIsHdnDEKj7+P5fTXI5gy7vm4?= =?us-ascii?q?xgH1UMBPwYB72L/Z5Rnm0ggezWKsUWcrxemmaIDROkFL4CxmKs6yuTOmZlmQ?= =?us-ascii?q?vC0xD3QWO091/2tjR1QS7DwtbsiEZVUaO3BUhKVSqzJUB4qC+PPBbvtNfvpa?= =?us-ascii?q?s69kU2PXL/tNKRlGqhP6haH9bjK9ydPyY0ok4XjJwrSdC134AUB8a9Ks8L8H?= =?us-ascii?q?5idvve93+rkyhZrqdDnIre58GY9+7ZHXa+kqKarK+NyypAyngiulE/6M6vOe?= =?us-ascii?q?3S59GQRPSozWkRRT9luwTdRx61tqDbr1cMNEyJ0UfLnZcHPtRH0ng4yE7m/u?= =?us-ascii?q?kjQNQ89AlEEIbPee8CryjpODTo2Vaff843Vi6G3jtWH1P6C0N3F7Qn1WLros?= =?us-ascii?q?3JiWnf9EEySol3bUznigR9D58kJkI19FgX3i0DHBAWZhCaF7GpC17qLYkFVU?= =?us-ascii?q?gfcRSIxqW6eqMs0EJvxbOg+fHcYvZhB6oXMfZdlBSBkEJcGpIMvq0UWKh8dE?= =?us-ascii?q?NF9K7LugjiDJDqX+D8mnosKfK1Qs5b8ccDt3sh+wq/XASv6ZNC77YdlZCJeb?= =?us-ascii?q?VJYYDWs8Bg80hn5TAOditXgBh8lR+5Uv4TpPrl4tfFtJqk8OGuVLwiR+8P7R?= =?us-ascii?q?g7G3x+j4fsgFAkudzX2P1TSpfLhoTj8ABAOHqKuIfG0xZiKeoBMZ+rfK16+3?= =?us-ascii?q?UBOSceO2oEPcCKZPkk/y9tLDLT6kRNAswSY9MYIM3NmQdThk3yRr5T8svbGl?= =?us-ascii?q?mFC4Z8bM0o63T4yCo18JQmSOrg7iG5JYzH5VFXI/xDlDlslM7FpOUN3fXSCj?= =?us-ascii?q?IY7mWCZhdpxSOCz52NC/fu8uWW1NHbSU8JHi4sX4daPjqC9hStRvCpm5XxTg?= =?us-ascii?q?OU9sjzjYo7dEKXQHyxgKsFvbhXHO5FiyX0xD5eGZ7ph/ObtNqs8mhXtkZdHI?= =?us-ascii?q?Z18xLFBL1VPo9nNhTgismrWk98CzPweM7IbRouo/OayPoD7et4Nkv+Y5IbIx?= =?us-ascii?q?0fxrL17HpaVA1uR6DsslaeR+IRa8NsSOnYoXBN9YJgN6gPMUCfpJztrjdIrk?= =?us-ascii?q?o6DxMpaL80szxVa0jPnAxTW6bvu74AixARUcB4uU9SA22wPH8x5zvdWaRTkq?= =?us-ascii?q?aRFOQf8i+PQawWT0VoLiR+Tgu02JVwYbSpm+tKsmdbnixgofgq1CdmSAG7uS?= =?us-ascii?q?32qKIHwSgg962gtDUdpXxFSf2TkyXWBlVNwvQKibwRCnj45ly6fnYDcJH+4L?= =?us-ascii?q?95KsT87YMh+WgwYQ0/fy0aWuStEy7wj6ePAo2Brt1cgBqNtd7Vbb+0KygSN6?= =?us-ascii?q?gyxQjlR3djzgjUhAxo/3cTQjW88N8kI52wOcMkxiqrGmjbc00B4qFTv8vysl?= =?us-ascii?q?4LSvU5aVV7zGVlzMeHWjUHRNbTFGYtkggkdWJEfYpY5hAEEakoni2FvrJC/g?= =?us-ascii?q?ETfDfUDpql9ZfNksvS3nk9V9hqzHrMpqKZnpMqzGFlm9Rs4y6Wv3QSc/bXU9?= =?us-ascii?q?ViA3j00odfx/fzZ/CqsuAAU4tp1qiuUOUFMsm44mu22ZNqWkC/yrQZBVq5P/?= =?us-ascii?q?cJxq3HXCe9VW2YReOLfnCCnzknNk7y5AGoIUMsZcZLrk89N+7CiYBGlw3lT7?= =?us-ascii?q?x4XCKQpUXUzGY7K+MVaxo2uJu7ewwNVOMQafCcJfIvwPIiFlQBdHrJHSpqC+?= =?us-ascii?q?+sr1Ghho97O29v4U/ie+Ti7hjmMMeOGhkDCYPaqZpx9uKhS2KZPX9v1gZyPF?= =?us-ascii?q?V19+jDC1QxrPFTfIiLkdjWmdt7zfYPd+1xPi0lpt4ThoVj5JGQ0MeLdxHR05?= =?us-ascii?q?nzKcjRoviZGP3f018qd3pbUrUDZwP14J82PtkjW73cBbFZpwgTBbAmQJw9MG?= =?us-ascii?q?f87KR0IxlvfQ7RZbS0hM7qq/mVZptVoX/Z8FYwLCbaux0exf24Vwt7b4qlh3?= =?us-ascii?q?/qOpA/WipBr8FxChthBIZPGdkPrwmgA5GPg6y7ltmx+196u+8NrKrwBfDK1M?= =?us-ascii?q?ij04V3QZda+VSBPCzNC6lznkRlkuOyj+/C0pn0DsPiY8kEVOlgQmPebL/JBI?= =?us-ascii?q?C/JSyPOs7mfE5G6bGc2qpjUhqNfCD5Q7aGtCq8OfV/70U7z5B3cevQwTE28b?= =?us-ascii?q?HUxsHyZ2Bapyekq36FLp1f40LWBb+WYxUBbfuD7XYgNLAbbJe80e4PNd0kz5?= =?us-ascii?q?C44hJvpGBG0c2YM+2os0PNxmpheJ7bJVev0CE8D81CBDeaFQN4hW7ft2SYAn?= =?us-ascii?q?lGKMWgAddijczTDRH34UR132Y3aTgFUk7pQ8qBcU4Wx+6zekW37BlXFdsKmq?= =?us-ascii?q?aScE88t6u9Ac1pIYkNzeOnqLkKj/53JCzVAstXJSfdKPlxJDUHSq3pqUQmYx?= =?us-ascii?q?oYvqJ9dooraJzGBEIcLA/Uzy7uwwrGzUDuMtChyquNCDgZ/28BzL/f1zVI4Q?= =?us-ascii?q?6jtqDdyuniVq3JJKr7V+PIMTY0HhSdSSk2HA6t+Ey4864AvfyFMSIEr1sJeC?= =?us-ascii?q?OOGUsWoaxyqdX4EGDeg6tgcYcMifTcXDr/HmkwtawuCylRtFydC98OHBLLdX?= =?us-ascii?q?LkjWxA8CW4Lf9N4X/uc6CCy+IBX+0QH5sJc/uFTtTCeOxPDyknmy9fO+umed?= =?us-ascii?q?DY6bEj3QSMBVA0F6jO6U3WSE+NXrTI3D/vXIMIr6AoqyEo/ZTWhSYxHKPWae?= =?us-ascii?q?WxvTmrp7S5hyaRo+GWeXQ8K2Yvge0NGyHV2hZKAHsJB9EcpAfmRavWNBUE72?= =?us-ascii?q?4gle87g0xEQw90SHA7ly0LxqzvE9BFSVMSkGKlSeEHa1YyFj4r4EuW+VKpM+?= =?us-ascii?q?E4leuIbFd3rupKRIcYN/Zu7YDWPO0VwfJ6uVAurC87tnCbCFVQxkKA/rHLFa?= =?us-ascii?q?1xjrtF+SEj/v5wU03OCzPSe2TK0MynXsRIwypj?= X-IPAS-Result: =?us-ascii?q?A2A6AgDfHvxa/wHyM5BcGQEBAQEBAQEBAQEBAQcBAQEBA?= =?us-ascii?q?YNAA0IffCiMVowXRQEBAQEBAQaBB4EwkzKBdA8YCwgBh2AhNhYBAgEBAQEBA?= =?us-ascii?q?QIBaxwMgjUkglADAwECJFIDAwkBAUgIAwFTBgESBYMggXINAwytFjODeQGET?= =?us-ascii?q?4IiBYgnEXuBB4EPL4VuAoc0Aoc7kQYJhWiGVIIXh0+FKIlcg3WDHYElIwQtg?= =?us-ascii?q?VIzGggbFYJ+giAXg0WKHAFRU3oBARSOMQEB?= Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 16 May 2018 12:21:36 +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 w4GCLXUK027213; Wed, 16 May 2018 08:21:34 -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 w4GBuqik150562 for ; Wed, 16 May 2018 07:56:52 -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 w4GBuqqq024804 for ; Wed, 16 May 2018 07:56:59 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1CuAADhG/xaly0bGNZcGwEBAQEDAQEBC?= =?us-ascii?q?QEBAYNAZHwoi3hejBdLBoEHgTCTMoF4CyMJhEACgx4hNBgBAgEBAQEBAQIUAQE?= =?us-ascii?q?BAQEGGAZLhTUDAydSEFFXBgESgyMCgXINAwytMDODeQGET4IiBYgnEXuBB4EPL?= =?us-ascii?q?4VuAoc0Aoc7kQYJhWiGVIIXh0+FKIlcg3WDHYElHIIKMxoIGxWCfoIgDgmDRYo?= =?us-ascii?q?cAVFTgRCOMQEB?= X-IPAS-Result: =?us-ascii?q?A1CuAADhG/xaly0bGNZcGwEBAQEDAQEBCQEBAYNAZHwoi3h?= =?us-ascii?q?ejBdLBoEHgTCTMoF4CyMJhEACgx4hNBgBAgEBAQEBAQIUAQEBAQEGGAZLhTUDA?= =?us-ascii?q?ydSEFFXBgESgyMCgXINAwytMDODeQGET4IiBYgnEXuBB4EPL4VuAoc0Aoc7kQY?= =?us-ascii?q?JhWiGVIIXh0+FKIlcg3WDHYElHIIKMxoIGxWCfoIgDgmDRYocAVFTgRCOMQEB?= X-IronPort-AV: E=Sophos;i="5.49,404,1520913600"; d="scan'208";a="278240" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.35]) by goalie.tycho.ncsc.mil with ESMTP; 16 May 2018 07:56:59 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3A7pjIGh9kU0vViP9uRHKM819IXTAuvvDOBiVQ1K?= =?us-ascii?q?B+0e4VIJqq85mqBkHD//Il1AaPAd2Araocw8Pt8InYEVQa5piAtH1QOLdtbD?= =?us-ascii?q?Qizfssogo7HcSeAlf6JvO5JwYzHcBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBB?= =?us-ascii?q?r/KRB1JuPoEYLOksi7ze+/94HdbglSmDaxfa55IQmrownWqsQYm5ZpJLwryh?= =?us-ascii?q?vOrHtIeuBWyn1tKFmOgRvy5dq+8YB6/ShItP0v68BPUaPhf6QlVrNYFygpM3?= =?us-ascii?q?o05MLwqxbOSxaE62YGXWUXlhpIBBXF7A3/U5zsvCb2qvZx1S+HNsDtU7s6RS?= =?us-ascii?q?qt4LtqSB/wiScIKTg58H3MisdtiK5XuQ+tqwBjz4LRZoyaM+ZwcKPDcN8DXG?= =?us-ascii?q?ZPXNteVzZYDo2hcosPFPIBMvhEoInhvlcOqRy+BAexD+/ryjJEg3n70qom3e?= =?us-ascii?q?ohDwzKxRUsEdATv3TOtdn7KboSUfutzKbW0TrDc+5d1TPj5ITUdxwsp+yHU7?= =?us-ascii?q?BtfsrL0UQhCgPLgEuep4LmPTyV2OYCs2aA4uZ8Se6ikXIrpx1trjSzwMonl4?= =?us-ascii?q?nHhpgSylDB7Sh33Ic1KsG4SEFhe96rDYZbuSCHN4p2X8gvXntouCc1yr0Jop?= =?us-ascii?q?6wYS8HyI4oxxHEcPGHaZaH7Q/jVOmLPTd0nm5qeLW6hxur90Wr1+PyVs6x0F?= =?us-ascii?q?lQrypFlMHBtn8M1xzP6siHV+By8l291jaI0gDe7PxPL0MslafDNZIt37E9mo?= =?us-ascii?q?ANvUnMBCP6hkf7gLWZe0gk4uSl6uXqbq/7qpKfNYJ4kB/yP6ogl8ClA+k1PA?= =?us-ascii?q?4DVHWB9+umzr3s50j5Ta1KjvIolqnZt4jXKsoBqKC3HQJY3Jgu5QyjAju60d?= =?us-ascii?q?kUh2cII0xAeBKcgIjlIVTOL+r5Dfe7mVislTZrx/TeMr3gBJXCMGTDna//cb?= =?us-ascii?q?pg5ENQ0hQ/wN9F655KCLwNOv3+V0/puNzdFBA5Mgi0w+j9CNV604MTQXiPAq?= =?us-ascii?q?CCP67Jq1+H+P8gI+mWa48JojryN/8l5/v2gX8jhVAdZbWp3YcQaH2gBfRpPU?= =?us-ascii?q?GZYXvqgtccHmYHpRY+Tez2h12CVj5ffXCyX7km6T0hB4KmCpnDFciRh+ml3S?= =?us-ascii?q?GmDth/e2xHFhipGHbsdoOLE9MNcz7adstglCEUELG8R449/QujuA/z1/xsKe?= =?us-ascii?q?+CvmU8lrfHnIxx5uvOhVQx+CZyAsC1zW6AVSd3k3kOSjtw27pw9wg17laFzL?= =?us-ascii?q?gwpfFEOdFNr85RSRsgOJfZh8lzCtTzXA2JWtaSVB7yRNi6DTwvZsw+zsVIYE?= =?us-ascii?q?tnHdimyBfZ0HzuS5kYi7KKAIA56Orw0mb8I45Zym3anP0ngkUoQ89TOHfjiq?= =?us-ascii?q?Nh+gz7GYHEiQOamryseKBa2zTCoiPL6WuIoVEQawN7TL/EQWFXQ0zasND0rk?= =?us-ascii?q?fDVKPmXbAmNBZRjNWPIbZQa8H4yFBBSOrnNfzAbG+r3WS9HxCFwvWLdoW8Py?= =?us-ascii?q?082jnQB1IFjxFb2HuPLhUkCyKspX6WJSZlFVPzbkjw7PNz4Ce/T0kp30SLaV?= =?us-ascii?q?Fs2KC05g89m/ORUbUQ06gCtSNnrC97ShL15P/SCtydt0Jlfb5AKYcm7VNG03?= =?us-ascii?q?/JnxBsNZynaaZ5jxgRdBoh7G300BAiMIRLkcEwoDsF0Rs6A7iZ31xaP2eC0p?= =?us-ascii?q?rYILDbKmDuuhuobviFiRnlzN+K9/JXu7wDoFL5sVTsSRd4qSduzsVV3n2A55?= =?us-ascii?q?7DEAsVV9frX10q8wRh+OiIXxERzNj/7VQ0YO+5vzrZ1JQsDeohjBOhe4QXPK?= =?us-ascii?q?CFEVr0FMsXT4irJfcxklekJhQDIKhJ9aEyMs/nP/uL0aKmJqBhyTShi2lK?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0ChAACRG/xaly0bGNZcGwEBAQEDAQE?= =?us-ascii?q?BCQEBAYNAZHwoi3hejBdLBoEHgTCTMoF4CyMJhEACgx4hNBgBAgEBAQEBAQI?= =?us-ascii?q?BEwEBAQEBBhgGSwyCNSSCUAMDJ1IQUVcGARKDIwKBcg0DDK02M4N5AYRPgiI?= =?us-ascii?q?FiCcRe4EHgQ8vhW4ChzQChzuRBgmFaIZUgheHT4UoiVyDdYMdgSUcggozGgg?= =?us-ascii?q?bFYJ+giAOCYNFihwBUVOBEI4xAQE?= X-IPAS-Result: =?us-ascii?q?A0ChAACRG/xaly0bGNZcGwEBAQEDAQEBCQEBAYNAZHwoi?= =?us-ascii?q?3hejBdLBoEHgTCTMoF4CyMJhEACgx4hNBgBAgEBAQEBAQIBEwEBAQEBBhgGS?= =?us-ascii?q?wyCNSSCUAMDJ1IQUVcGARKDIwKBcg0DDK02M4N5AYRPgiIFiCcRe4EHgQ8vh?= =?us-ascii?q?W4ChzQChzuRBgmFaIZUgheHT4UoiVyDdYMdgSUcggozGggbFYJ+giAOCYNFi?= =?us-ascii?q?hwBUVOBEI4xAQE?= X-IronPort-AV: E=Sophos;i="5.49,404,1520899200"; d="scan'208";a="13362620" 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; 16 May 2018 11:56:58 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;08bd9c1c-057b-4de2-95e2-09c5939bfaba Received: from localhost.localdomain (localhost [127.0.0.1]) by UPDCF3IC08.oob.disa.mil (Postfix) with SMTP id 40mCbG1LLjz34qRS for ; Wed, 16 May 2018 11:56:58 +0000 (UTC) Received: from UPDC3CPA09_EEMSG_MP25.eemsg.mil (unknown [192.168.18.20]) by UPDCF3IC08.oob.disa.mil (Postfix) with ESMTP id 40mCbF0Gxnz34qRY for ; Wed, 16 May 2018 11:56:57 +0000 (UTC) Authentication-Results: UPDC3CPA09.eemsg.mail.mil; dkim=none (message not signed) header.i=none X-EEMSG-check-008: 27064669|UPDC3CPA09_EEMSG_MP25.csd.disa.mil X-EEMSG-check-001: false X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 66.187.233.73 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0BZAABUGfxah0npu0JcGgEBAQEBAgEBAQEIAQEBAYQkfCiLeF6MYAEBBoEHgTCTMoF4CyMIAYRAAoM/NBgBAgEBAQEBAQIUAQEBCA0JCCgjDIUpAwMnUhBRVwYBEoMjAoFyDQ+tQDODeQGET4IiBYg4e4EHgQ8vhW4ChzQChzuRBgmFaIZUgheHT4UoiVyDdYMdgSUcggozGggbFYJ+giAOCYNFihwBUSMwgQ4BAY4xAQE X-IPAS-Result: A0BZAABUGfxah0npu0JcGgEBAQEBAgEBAQEIAQEBAYQkfCiLeF6MYAEBBoEHgTCTMoF4CyMIAYRAAoM/NBgBAgEBAQEBAQIUAQEBCA0JCCgjDIUpAwMnUhBRVwYBEoMjAoFyDQ+tQDODeQGET4IiBYg4e4EHgQ8vhW4ChzQChzuRBgmFaIZUgheHT4UoiVyDdYMdgSUcggozGggbFYJ+giAOCYNFihwBUSMwgQ4BAY4xAQE Received: from mx3-rdu2.redhat.com (HELO mx1.redhat.com) ([66.187.233.73]) by UPDC3CPA09.eemsg.mail.mil with ESMTP; 16 May 2018 11:56:56 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B97DF77060; Wed, 16 May 2018 11:56:55 +0000 (UTC) Received: from madcap2.tricolour.ca (ovpn-112-24.rdu2.redhat.com [10.10.112.24]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1AB8A10E51B5; Wed, 16 May 2018 11:56:52 +0000 (UTC) X-EEMSG-check-009: 444-444 From: Richard Guy Briggs To: Linux-Audit Mailing List , LKML , Linux NetDev Upstream Mailing List , Netfilter Devel List , Linux Security Module list , Integrity Measurement Architecture , SElinux list Date: Wed, 16 May 2018 07:55:47 -0400 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Wed, 16 May 2018 11:56:55 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Wed, 16 May 2018 11:56:55 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'rgb@redhat.com' RCPT:'' X-Mailman-Approved-At: Wed, 16 May 2018 08:18:47 -0400 Subject: [PATCH ghak81 V3 3/3] audit: collect audit task parameters 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: Cc: Eric Paris , David Howells , Ingo Molnar , Steve Grubb Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP The audit-related parameters in struct task_struct should ideally be collected together and accessed through a standard audit API. Collect the existing loginuid, sessionid and audit_context together in a new struct audit_task_info called "audit" in struct task_struct. Use kmem_cache to manage this pool of memory. Un-inline audit_free() to be able to always recover that memory. See: https://github.com/linux-audit/audit-kernel/issues/81 Signed-off-by: Richard Guy Briggs --- include/linux/audit.h | 34 ++++++++++++++++++++++++---------- include/linux/sched.h | 5 +---- init/init_task.c | 3 +-- init/main.c | 2 ++ kernel/auditsc.c | 51 ++++++++++++++++++++++++++++++++++++++++++--------- kernel/fork.c | 2 +- 6 files changed, 71 insertions(+), 26 deletions(-) diff --git a/include/linux/audit.h b/include/linux/audit.h index 69c7847..4f824c4 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h @@ -216,8 +216,15 @@ static inline void audit_log_task_info(struct audit_buffer *ab, /* These are defined in auditsc.c */ /* Public API */ +struct audit_task_info { + kuid_t loginuid; + unsigned int sessionid; + struct audit_context *ctx; +}; +extern struct audit_task_info init_struct_audit; +extern void __init audit_task_init(void); extern int audit_alloc(struct task_struct *task); -extern void __audit_free(struct task_struct *task); +extern void audit_free(struct task_struct *task); extern void __audit_syscall_entry(int major, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3); extern void __audit_syscall_exit(int ret_success, long ret_value); @@ -239,12 +246,15 @@ extern void audit_seccomp_actions_logged(const char *names, static inline void audit_set_context(struct task_struct *task, struct audit_context *ctx) { - task->audit_context = ctx; + task->audit->ctx = ctx; } static inline struct audit_context *audit_context(void) { - return current->audit_context; + if (current->audit) + return current->audit->ctx; + else + return NULL; } static inline bool audit_dummy_context(void) @@ -252,11 +262,7 @@ static inline bool audit_dummy_context(void) void *p = audit_context(); return !p || *(int *)p; } -static inline void audit_free(struct task_struct *task) -{ - if (unlikely(task->audit_context)) - __audit_free(task); -} + static inline void audit_syscall_entry(int major, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3) @@ -328,12 +334,18 @@ extern int auditsc_get_stamp(struct audit_context *ctx, static inline kuid_t audit_get_loginuid(struct task_struct *tsk) { - return tsk->loginuid; + if (tsk->audit) + return tsk->audit->loginuid; + else + return INVALID_UID; } static inline unsigned int audit_get_sessionid(struct task_struct *tsk) { - return tsk->sessionid; + if (tsk->audit) + return tsk->audit->sessionid; + else + return AUDIT_SID_UNSET; } extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp); @@ -458,6 +470,8 @@ static inline void audit_fanotify(unsigned int response) extern int audit_n_rules; extern int audit_signals; #else /* CONFIG_AUDITSYSCALL */ +static inline void __init audit_task_init(void) +{ } static inline int audit_alloc(struct task_struct *task) { return 0; diff --git a/include/linux/sched.h b/include/linux/sched.h index b3d697f..6a5db0e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -29,7 +29,6 @@ #include /* task_struct member predeclarations (sorted alphabetically): */ -struct audit_context; struct backing_dev_info; struct bio_list; struct blk_plug; @@ -832,10 +831,8 @@ struct task_struct { struct callback_head *task_works; - struct audit_context *audit_context; #ifdef CONFIG_AUDITSYSCALL - kuid_t loginuid; - unsigned int sessionid; + struct audit_task_info *audit; #endif struct seccomp seccomp; diff --git a/init/init_task.c b/init/init_task.c index 74f60ba..4058840 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -119,8 +119,7 @@ struct task_struct init_task .thread_group = LIST_HEAD_INIT(init_task.thread_group), .thread_node = LIST_HEAD_INIT(init_signals.thread_head), #ifdef CONFIG_AUDITSYSCALL - .loginuid = INVALID_UID, - .sessionid = AUDIT_SID_UNSET, + .audit = &init_struct_audit, #endif #ifdef CONFIG_PERF_EVENTS .perf_event_mutex = __MUTEX_INITIALIZER(init_task.perf_event_mutex), diff --git a/init/main.c b/init/main.c index b795aa3..7ca3dfb 100644 --- a/init/main.c +++ b/init/main.c @@ -91,6 +91,7 @@ #include #include #include +#include #include #include @@ -720,6 +721,7 @@ asmlinkage __visible void __init start_kernel(void) nsfs_init(); cpuset_init(); cgroup_init(); + audit_task_init(); taskstats_init_early(); delayacct_init(); diff --git a/kernel/auditsc.c b/kernel/auditsc.c index ef3e189..4b1138a 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -841,7 +841,7 @@ static inline struct audit_context *audit_take_context(struct task_struct *tsk, int return_valid, long return_code) { - struct audit_context *context = tsk->audit_context; + struct audit_context *context = tsk->audit->ctx; if (!context) return NULL; @@ -926,6 +926,15 @@ static inline struct audit_context *audit_alloc_context(enum audit_state state) return context; } +static struct kmem_cache *audit_task_cache; + +void __init audit_task_init(void) +{ + audit_task_cache = kmem_cache_create("audit_task", + sizeof(struct audit_task_info), + 0, SLAB_PANIC, NULL); +} + /** * audit_alloc - allocate an audit context block for a task * @tsk: task @@ -940,17 +949,28 @@ int audit_alloc(struct task_struct *tsk) struct audit_context *context; enum audit_state state; char *key = NULL; + struct audit_task_info *info; + + info = kmem_cache_zalloc(audit_task_cache, GFP_KERNEL); + if (!info) + return -ENOMEM; + info->loginuid = audit_get_loginuid(current); + info->sessionid = audit_get_sessionid(current); + tsk->audit = info; if (likely(!audit_ever_enabled)) return 0; /* Return if not auditing. */ state = audit_filter_task(tsk, &key); if (state == AUDIT_DISABLED) { + audit_set_context(tsk, NULL); clear_tsk_thread_flag(tsk, TIF_SYSCALL_AUDIT); return 0; } if (!(context = audit_alloc_context(state))) { + tsk->audit = NULL; + kmem_cache_free(audit_task_cache, info); kfree(key); audit_log_lost("out of memory in audit_alloc"); return -ENOMEM; @@ -962,6 +982,12 @@ int audit_alloc(struct task_struct *tsk) return 0; } +struct audit_task_info init_struct_audit = { + .loginuid = INVALID_UID, + .sessionid = AUDIT_SID_UNSET, + .ctx = NULL, +}; + static inline void audit_free_context(struct audit_context *context) { audit_free_names(context); @@ -1469,26 +1495,33 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts } /** - * __audit_free - free a per-task audit context + * audit_free - free a per-task audit context * @tsk: task whose audit context block to free * * Called from copy_process and do_exit */ -void __audit_free(struct task_struct *tsk) +void audit_free(struct task_struct *tsk) { struct audit_context *context; + struct audit_task_info *info; context = audit_take_context(tsk, 0, 0); - if (!context) - return; - /* Check for system calls that do not go through the exit * function (e.g., exit_group), then free context block. * We use GFP_ATOMIC here because we might be doing this * in the context of the idle thread */ /* that can happen only if we are called from do_exit() */ - if (context->in_syscall && context->current_state == AUDIT_RECORD_CONTEXT) + if (context && context->in_syscall && + context->current_state == AUDIT_RECORD_CONTEXT) audit_log_exit(context, tsk); + /* Freeing the audit_task_info struct must be performed after + * audit_log_exit() due to need for loginuid and sessionid. + */ + info = tsk->audit; + tsk->audit = NULL; + kmem_cache_free(audit_task_cache, info); + if (!context) + return; if (!list_empty(&context->killed_trees)) audit_kill_trees(&context->killed_trees); @@ -2071,8 +2104,8 @@ int audit_set_loginuid(kuid_t loginuid) sessionid = (unsigned int)atomic_inc_return(&session_id); } - task->sessionid = sessionid; - task->loginuid = loginuid; + task->audit->sessionid = sessionid; + task->audit->loginuid = loginuid; out: audit_log_set_loginuid(oldloginuid, loginuid, oldsessionid, sessionid, rc); return rc; diff --git a/kernel/fork.c b/kernel/fork.c index cd18448..92ab849 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1713,7 +1713,7 @@ static __latent_entropy struct task_struct *copy_process( p->start_time = ktime_get_ns(); p->real_start_time = ktime_get_boot_ns(); p->io_context = NULL; - audit_set_context(p, NULL); + p->audit = NULL; cgroup_fork(p); #ifdef CONFIG_NUMA p->mempolicy = mpol_dup(p->mempolicy);