From patchwork Fri May 11 00:53:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10394419 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 37EAA60170 for ; Fri, 11 May 2018 14:40:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2677728EA6 for ; Fri, 11 May 2018 14:40:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1A33A28EB5; Fri, 11 May 2018 14:40:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.4 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,NO_RDNS_DOTCOM_HELO,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from ucol19pa09.eemsg.mail.mil (ucol19pa09.eemsg.mail.mil [214.24.24.82]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8C9FD28E93 for ; Fri, 11 May 2018 14:40:44 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.49,389,1520899200"; d="scan'208";a="695327659" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by ucol19pa09.eemsg.mail.mil with ESMTP; 11 May 2018 14:40:43 +0000 X-IronPort-AV: E=Sophos;i="5.49,389,1520899200"; d="scan'208";a="13190295" IronPort-PHdr: =?us-ascii?q?9a23=3ADvVrARW+Lh8+11FbRGk4URW25XfV8LGtZVwlr6?= =?us-ascii?q?E/grcLSJyIuqrYYhSEu6dThVPEFb/W9+hDw7KP9fy4AipYud6oizMrSNR0TR?= =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?= =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9uIhi6txndutULioZ+N6g9zQ?= =?us-ascii?q?fErGFVcOpM32NoIlyTnxf45siu+ZNo7jpdtfE8+cNeSKv2Z6s3Q6BWAzQgKG?= =?us-ascii?q?A1+dbktQLfQguV53sTSXsZnxxVCAXY9h76X5Pxsizntuph3SSRIMP7QawoVT?= =?us-ascii?q?mk8qxmUwHjhjsZODEl8WHXks1wg7xdoBK9vBx03orYbJiIOPZiYq/ReNUXSm?= =?us-ascii?q?RbXsZVSidPHIWyYYUSBOYFJOpUspXxq14IoBS5BwajHuPvyjhPhnPvxKE3z+?= =?us-ascii?q?osHADb0AA5A94CrWnfoNHrOKsOVOy4yrTDwzfeYPNMwTrz9obIfBAir/+CU7?= =?us-ascii?q?1/fsjexlUgGQ3YllWdq5HpMj2L2eQWqGWb8+htWPizh2I7pQx8oD6izdoshI?= =?us-ascii?q?nTgYIVz0jJ+Dtjz4YuO9K5SFNwb8O4H5tQrS6aKoV2Qsc8TGFypS03zaEJto?= =?us-ascii?q?SgfCcUyJUq3AXfZOCHc4eS/xLjWuKRLilihH58ZL2wnQy+/lSnyu35T8S51k?= =?us-ascii?q?tBoCldktTUq3wA2BPe5tKHR/dg5EutxzmC2x7J5u1ZOUw5lKjWJ4Q8zrMxkp?= =?us-ascii?q?cfq0XOEy/slEnokqObeUMp8fWy5ev9eLXpvJqcOpdxigH5L6shhNSyAf89Mg?= =?us-ascii?q?gSR2ib/vm81KH78U35XrpKivo2n7HFsJ/AP8Qbp7O5AxRP3oY/6xewEzem0N?= =?us-ascii?q?MCkXkBMF1FYw6Ig5LsO1HPJPD0Ffa/g1Kynzd33/3KI7LsD5rXInXDjbvtZ6?= =?us-ascii?q?hx5kFCxAYp0NxT/5dUBasAIPL3VE/xrtvYDhohPgyv3ennDNR91oUDWWOAG6?= =?us-ascii?q?OWK6TSsUKO5u0zPeaMf5QYuCr9Kvc55/7uimU1mVkGfaazx5cXZ3e4Hup+L0?= =?us-ascii?q?WDfXXsmssBEXsNvgcmTuzqj1uCXiRPZ3ayRa084Co2CIChDYfFQ4CimqeB3D?= =?us-ascii?q?ulEZ1MfWBKEFeMEW3nd4+cQfcDdDqSItN9kjwDTbWhSY0h2guyuw/50LpnKe?= =?us-ascii?q?zU+iwGtZ/42th14/DTlB4p+jxpCcSdz3yNQ3tznmMSSD88xLp/rlBlylefza?= =?us-ascii?q?h4hORVFcRN6PxSTAg6M5/cz/B9C93pWwLOYMmGR0i8TtWhGzExQco7w8USbE?= =?us-ascii?q?ZlB9WikhfD0jK3DL8SkbyLAoE7/bzY33jwPMty0WjJ1LMmj1U8RctPL2KmjL?= =?us-ascii?q?Zl9wfPH47Jj1mZl6GyeKsBwC7C7n2DwHGSs0FfVQ5/Tb/KXWsDZkfMq9T2+F?= =?us-ascii?q?/CRae0Cbs7KgtB1dKCKqxSZ9L3lVVJXu3jONXFY2+qg2e/HwyIxrKXbIryf2?= =?us-ascii?q?USxjnSB1YenwAU53aGOhA0Bj29rGLGEDxuCVXvblvt8el4tHO0UEs0wB+Pb0?= =?us-ascii?q?J/y7q14B4UiOebS/MLwL0EviIhpC91HFa5xN3WDNWBqxBmfKVGbtM3+E1H2n?= =?us-ascii?q?7BtwxhIpygKLhvh14fcgRwuUPjzBB3CoFZncgrqnMm1gxyJriC0FNCdjOYw4?= =?us-ascii?q?7/NqfRKmbs4BClc7TW1U3G0NaK5qcP7+w1qlvivAGtE0ot7W9n3sJb03SC+5?= =?us-ascii?q?rKCxASXojpUkYt8Bh6pa/VbTUh54/O0n1sK6a0uCfY2901HOsl1gqgf9BHPa?= =?us-ascii?q?OKDg/9CcsaCNSvKOwxgFWpawoEPOFL+K4vMcKmbOGK2KmxPOZvhDiml3hI4J?= =?us-ascii?q?hh0kKQ8CpxUu3I0IwGw/GfwwuKTDT8g02issDwhIBIfzYSHnCwySL8Ho5eer?= =?us-ascii?q?VyfZoXCWepO8C43Mhxh4TsW3FG7l6uHEkJ19OseRaIaFz9xwJQ31wNoXO7gS?= =?us-ascii?q?u40yB0kzYxo6WDxiPOx/rtdAEbOm9LQ2lvlkzsLpS1j98EWkiocwkpmwG/6U?= =?us-ascii?q?b82adbuLx1L3PPTkdQYyj2M2ZiX7OqtrWffsFC85wosSBYUeimZ1CVVKL9qQ?= =?us-ascii?q?MA0yz/B2te2Cw7dzayt5XikRx6kmWdLG1vrHfCYsFwwxDf5dLZRfFL2DoKXi?= =?us-ascii?q?94hifLBlKkJdmm4c2Ul4vfsuC5T2+gWIdccS33zYyeriu7/nZnAQOhkPCpgd?= =?us-ascii?q?LnDA063TX819lwWiXCtAz8bZXz16SmLeJneVFlBEH968VmBoF+lZEwiIsM1n?= =?us-ascii?q?gagZWV+3UHnHz3MdVa36LxdmANRTkRz97S+gjl11VpLmiVyILhSnWd3sxhas?= =?us-ascii?q?G+YmMXwSI989lGCLyK47xAnCt1pEe4rA3KbPhmhjcdyP0u6H8GjOESogYtyD?= =?us-ascii?q?uSAqwKF0lCISPsjwiI78y5rKhPfmavdryw1E5gktC7EL6CpQ9dVW3iepc/AS?= =?us-ascii?q?Bw9d9zMFXW0H388ovkYsXfbcoPth2IlBfNl+tVJ4w3lvoRnidnOnzyvXs+y+?= =?us-ascii?q?49kxNuwYu2vI+dK2Vi5Ki5GAJXNiXpZ8MP/THglb5ekdyL34CrAJphAi8EXJ?= =?us-ascii?q?30Tf22CjIfrunnNx2QHz0msXeXA6HfHQiC6Ed8s33ADZ6rN3aNJHkW09puXh?= =?us-ascii?q?+dK1JDgAoMRjU1goY5Fhy2xMzmaEp5+DYR6UPjpxtSzOJnKhn/Xn3ZpAi2dj?= =?us-ascii?q?c+UIKfIwZO7gFe+0fVNtST7vppECFF+p2stxCCKm2HZwVIFG0JVFaLB1b5Mr?= =?us-ascii?q?mp/9nA/PCSBvCiIPvWfbWOteteWu+LxZOv1otp4S2BNsCIPnlsAf00xFZDXW?= =?us-ascii?q?x5G8TenjUAVTYblyTTYM6HvB284DF4rtij8PT3XwLi/YWPBKFUMdVz/BC2hL?= =?us-ascii?q?yON+COiylkLjZYzIkDxWfSyLgY3l4dlT1hdyW3HbQHry7NQ7ramrVLAB4Ddy?= =?us-ascii?q?NzKMxI4roh0QZRPM7bjdX11qJlgvMuFVdKS0bhmsCoZMwNJWGxLlXHC1iXNL?= =?us-ascii?q?6ePz3E39n3Yb+gSb1XlOhUuQewtiiGHE/4JDuDkSXpVxe0MexXli6UIBletJ?= =?us-ascii?q?u6chZ3BmjpVMjmZQGjMN9rkT02xqU5hnXQNWEGKTh8a1hArrOR7SNCmfV/B2?= =?us-ascii?q?JB7ntjLeaenSaW8+jYJYwSsfdxBSR0je1a6mwgy7RJ9CFEWOB1mCzKo9F1uF?= =?us-ascii?q?6qle2Pyjt8UBpSsTZHnpmLslt+NqnD7ZlPR3LE/BML7WWNBBUHvMdqC931u6?= =?us-ascii?q?BN0djDjqzyJy1e89LP+sscAdLYKMWdMHouKRDpAiLbDBMZTT63MmHSn0pdkP?= =?us-ascii?q?CW9n2RsJc6sYPhl4AQRb9BU1w5DPQaCl5qHNYaOpd4QiskkaKHjM4P/Xextx?= =?us-ascii?q?jRRMpdvpDBTf+dHOvgJy2YjbZeYRsE27T4LZ4cNofjwUxtdkF6nJjWG0rXRd?= =?us-ascii?q?1CuCJhYRUqoEpT63V+SXUz1FzjagOo+nATFPq0kQUxigpxe+gt8y3s41gvLF?= =?us-ascii?q?rQuCQwiFUxmcnigT2JbD7xK6KwUZtMCyrztkk+LJX7TB1vbQ21g0NkNyzJSK?= =?us-ascii?q?5Wj7tlaW9kkhTcuYdVFf5aU6JEfAcaxeuLaPUwzVRctiKnyFdF5evFCZpijA?= =?us-ascii?q?wqcZqtr3JcxQ1ud9s1Ja3MJKpT0FdcnKWOvjWn1uop2g8RO14N8H+OeC4PoE?= =?us-ascii?q?EIMKcpKDCs/uF36gyCnCBDeHQWWPosufJq9UI9N/6Gzy3+z75JMlqxOPCHL6?= =?us-ascii?q?OFp2jAktaFQkku2UMTiUZK56J23tsjc0ePTE8vzaGRGAkONcrMMQFVddRd9X?= =?us-ascii?q?jJcSaIr+rN3Yp/P5+hGeDwUe+OqKEUj1q5EwkzAYQM79kOHoK33U7CN8fnNr?= =?us-ascii?q?kFyBs25Av1OFqFEe5JeBOXkDYHuc2/yoF43ZVFLDEHHWp9KTm35qrQpgIyhP?= =?us-ascii?q?qDW802bWkcXooFMXI7Q8K6myhEv3haCzm3yO0ZwhCY7zDgviTQECX8b917af?= =?us-ascii?q?ePexxsDNC2+TMi86m5klPY7pLeJ2TmOtt4od/P9fkWp5CZBPNIVbN9qVvTm5?= =?us-ascii?q?FER3y2VG7CCcK1J5n1a4krcdz0Cna7X0eihDI0T8b+Js2iIrKOgQ72WYZeqJ?= =?us-ascii?q?Ob0yw7Nc+hCjEeHA99qPsH5KJ9eQIMfYI0YRvotgQ4MKy/Jh2X3861TGasMz?= =?us-ascii?q?RWSeBTzeunZ7BNySojcPO6wmM6Tp4m1+m37VINRJYSgx7F2/mjYZJTXjLuFX?= =?us-ascii?q?xDZQrPvzE5mHJ7Nucy2Os/xwnIsVYEOTCRaONpcHBEv807BV6KO3V2DGs4SE?= =?us-ascii?q?OcjYrE5g6sxKgc8TJAkdhOzeBLt2PzsYPYYDKpRKOks47VszY6YdggvaJxLZ?= =?us-ascii?q?TpItGau5PGgjzfUJ7QvxWZXy64DfVVhsNdLz5fQPlMnWElONIJuZBd6UUvSs?= =?us-ascii?q?g+J6ZDCK42prClcTBkFzIdzTcFV4Oc2zwPmv281KHAlheXa5svKwAEsI9Yjd?= =?us-ascii?q?sDTSF2ZiIepKmsV4XSlm+ERWgLIBsd7QtW/gIAk5V8fub774rUVJVM0SJZo+?= =?us-ascii?q?poUivXEZll71X6RnuKjlj4SfWhlu2p0hhRzP/309kURgBwBlZHy+ZRjEsoJ6?= =?us-ascii?q?l9K7MMsY7Srj+IaUT6sXroyOS8PllRytPbd0H5DIrDumrxSSMd9mcSRYBTzH?= =?us-ascii?q?HfEokSnBdiaKoxolVDPpymcF7k5zM434RpA6W4VcezylY9qnYGQz2lE8BPCu?= =?us-ascii?q?FhtFLXViZoY5WsqJXiIJVdXHNf+Ieaq1dCi0VtMii5yZVGJ8FK+D4MUyBFoS?= =?us-ascii?q?+Bs9uqVM1Dxch2AocWLddlpnf9HrlIOJuKrn03u7zvy2PZ9CsmvFe82jqzB7?= =?us-ascii?q?eyT/hF8G0GBgUpO2Oep1EzD+sr92ff6UzNvkxx/+hAHLSPi1t+oCplFJBUGj?= =?us-ascii?q?lJzWylL0h0THRes+VVMr7VfNZYQ/YvfhKgJgIxFeY+30OX+UF7g235bzZ1tg?= =?us-ascii?q?tA9CDXRxM0WjUNgrfxhT0erdmqOT0dS51WdjgucjnKKxmFliBNoBZQdVxlV4?= =?us-ascii?q?ofAtlb57ERxZFU8dbaSUawNSEFWwRvNh4l3vVClE5MqkGYdDvBAgqvcPbArg?= =?us-ascii?q?d4fdyNrMKzKvT24htHgJv9sO8k76UDW2GmmQq1TN/FoY/zqsGGu0mTeKr2KO?= =?us-ascii?q?CzfXjBTD3Qgh+qnrckE4PG/y7NPwpHM5N602YrYYD9CW7XOhRLP7gbKFRGWq?= =?us-ascii?q?B6c9pGvvtXZ8tjeKYX56BhGA6IRhTyF4OxtvVGKEjcRSjGJSWb7uO/uZ7T7a?= =?us-ascii?q?DaSeX4fsyM3GrHTLhqMZdm8jT7ALDq0ZJE+kXqxPht8F96SULcPCCFttjhIR?= =?us-ascii?q?kL5Ma6fEv4opIpBS/WAIt3kHf12kFAbdQYTDO3/5kD1ZNZ7GrwSfhi3Ujtse?= =?us-ascii?q?1S8L1k5pcr47xzzse0P6jSI+xAsUB7GhiUGhlq9pI1DWh6XW9RZusRJ+nNfa?= =?us-ascii?q?QFl8/hsfv6F6oJ5x2J4OxWdcHIJ1nflcWlDDGTVwBElh8bqTEGNgucy+KFm6?= =?us-ascii?q?hsRManv+f5wEUt40O6LhEc0rBg/oKE+reMpO/Lbhve0bkEVbLsRsPotLgsvF?= =?us-ascii?q?mS5fI8nr4UZmN1exGnEPQaVsMFxGfv16YqzSw2E8PEAr3v5uVOV24jkTLmgJ?= =?us-ascii?q?B9GE8aGvUKErqX5Y5ehHs3m/TFNt0KdaBPgmmPFQOlEr8GzX6k9S6XLXJ4jR?= =?us-ascii?q?7QyB7wQHm87FnsoS9/WyvMwM/pklBJWbmvGUdSQy2pNFd6sDOOOQrlr9/3tr?= =?us-ascii?q?o17U4oKGzktdSNlGS7NLNRAcL/OMSWITMoq1IPkJ0xWtuv1JgdGdq5O9oR8X?= =?us-ascii?q?d+bv7E52OqlS9Brb1HiJDF4sGJ4PXXAGWvj7GHq7WX2j9U0H84vUsw6tq4LP?= =?us-ascii?q?HB+8WKQ+i012YWVyp/vgzBXxipqrzUsV8ZIkmL0EbRl4wMIN5ZwXc51kb85O?= =?us-ascii?q?ggW9I/7gNeGZjcZ/kavzD8JCP0wUqDY9IwTiSe1yBXHlf1HFRjFqgzxn//vM?= =?us-ascii?q?XTlXjK410oXI5wd075ihNrE4U0M0Ut6EIYwiAbCwgCdQibDK20BUTiNYYEVE?= =?us-ascii?q?kCZg6d07emYao3xlN8wq+x6+DPd+B8ALANNvlFhA6UgFdbAo4WsbEZQL9kYF?= =?us-ascii?q?Bd9bXXpwb4BIjlXvjmiWIwOueoQsBe6s0Wq3wi7RuhSBW69JdD9bEbiIqSea?= =?us-ascii?q?JeZpjMps985V995TETbixNnAR/jxShXOAEvu/j/sTUsJqm6+apTqYtRPwb9w?= =?us-ascii?q?MqCGR6jpvwhk0joN7M2udEUILVlZjw8ABDIn6Nooba0ANwKekQJIKxerZv6X?= =?us-ascii?q?EHKzIZJ3IUMtqcc+M87DN1MDXP+1xCBdsBZdwCM8rXhw9Ulk3pVapX9sraBl?= =?us-ascii?q?+XFYdzeNo172rs0jw194UzUvr44j+sOZ/f901NP+9EjCh0m9LNuu4VwebVCC?= =?us-ascii?q?gQ5nWZcAZ6wieDy5mLFvbx8v6ByNXKWFMcHi85SZ1RJDyc9gy7XuC1jonmUh?= =?us-ascii?q?uI6s/vh5IzbESQRn2tk6QCtqZDC/VAhj/63jhZEYD1nOmVvsGp6GZYuVxLCo?= =?us-ascii?q?Fz7QfKGK9HJJV0JQz4ltW3Rkh7Hib/d93bdgE1uOaP2+kC7ONwN0r4ZY8GLR?= =?us-ascii?q?MJ0L366X9PQQtoVrH6pFGZXfgeZNF+UvPLsmhV6Z58K68IJFWdppvqrjdOqF?= =?us-ascii?q?wsHAApaLswriFHeUjPnQ1VXb30uL0BigYHT955uFFMFni0OG0j5jrLT6JVg7?= =?us-ascii?q?eNCPYN6DWcUrQOU1l0MiN5Wx612YtudKGvnf1ctmNGgz5yoPkt0zx9Xhe8vj?= =?us-ascii?q?fsp60V0zI65L64rCkBuWBCTuiGkSfHF1tDzPoOjaoHBXft81q8b2cfbIfo5r?= =?us-ascii?q?loO9jg/5E743sjeRUjYzEGXeO4BiH/i6OIBYKOv8xYhB6Jo8jOdrizLS4TNr?= =?us-ascii?q?sh0x7jQWZy0hTGlhZy7GQLWimg7MMjJIilPMYlxymoGWvcdFsX4KNGqsjxtV?= =?us-ascii?q?kNTOQob1Nt2mNj3dabRicVXszAB341jhQ4aWVDaJ9M8gEVF680gjuTpalG+g?= =?us-ascii?q?YUYCvIEoS75IbfgN3E2X4nTddl3mjWvLGKhos20H15nNN59iCOt2oWd+zZS8?= =?us-ascii?q?9jHGP+14Zeyez7YvWirPoHSI94x7i7V/8CKMaj83Os2Jp2Qk+l2qgeH12hPe?= =?us-ascii?q?4N3rfbSSalRnGGVumQdmiMnio5MlTs6hWyKV03cshKpVcnMuTenp5cixHhUb?= =?us-ascii?q?RsSyWXoV/U0ncuMfsedw0so4enZw0KQ/INZ+iGO+ch3ucyCF0SYH/VBSF2Ef?= =?us-ascii?q?O5sUaxnIhnPHVt+UH6YeXr8gD7P9qeAx0EEY/Brp5t4vy3XWOBNmVmzB11Jk?= =?us-ascii?q?V08P3fF1spvO9Gb5mRhcTQh8h80eMdcvdiKzEyut4SmoJl7omZy9mKcRDXzp?= =?us-ascii?q?nsIdHVo/6YA+DQzkgwfWFaSLUZaxvv54omJt45R6HTHbxBsBQeH6c6Q5shOH?= =?us-ascii?q?zq+aFpKgNzbg7RZLOpgsnlpuKLeoFYp3nI4VIsNC3coQEMyuSoTQxnaJCnn2?= =?us-ascii?q?7yIJ41Rj1drtBgCQBrHJVRFMMargqmApmUmKehh9+35Ux6p7xCja2lLsvvnI?= =?us-ascii?q?C93oNsT91B6EeWJjfNFexuhUh4iumanPjNyN/yBNnkdNdCU/J0FCqNTpziO8?= =?us-ascii?q?3rLjOIJ9K5eENc9bOY+Kx2Xw/XZy3jWaeC8iq+O6MgqX0y14gwWe3U1jFlu6?= =?us-ascii?q?nSxd/af2hGomKmqnmTOd1U61mcQaTlQx9MSfeDuF1gFKkTYJq8oPwCKvQ+0d?= =?us-ascii?q?Oc5E919z0E38ybdezplWKE/kN9aIKTeFDk3yc/RJkiPAW0MUxqh3TQ7HvaHy?= =?us-ascii?q?IYZoKfDOBGo5OZDwfm+lJqsWUsfXJaXDKxA9CLNiJTj/mbTSapsQ5KFN0ehP?= =?us-ascii?q?WffU8jqrb0EbAuPY9Kz6HilrIHl55LLCHGQtNXOWmELrh2OHxTCeXGokMlZD?= =?us-ascii?q?YPur4yXIY+bJzIK0QCZgPI6i7/1kPp1kr3P4iv2auSKyER8V1Mz6jC1DlRok?= =?us-ascii?q?++o/nPxoXfXazCcZa+fPfUPCNtAimXQzsvEEDs+lq+vfcAlPvdJWABrxYPay?= =?us-ascii?q?GPEgdVoK0pr8CGSifxkOhuZ9Uvg+qAWju4HC99k7AoBz1js0mJTvtFEhPZOS?= =?us-ascii?q?zPmm1Z7SerPfJdtUnub7SFyK5YQaRCCYJXf+yxWNDYcO1QIzoy0z4Qfu27eo?= =?us-ascii?q?uP/P4CzlvUQD5BQOHz/1qEQRvTE6TGnWDiQJkVso4ouyEh5tPXmGptHr/VO6?= =?us-ascii?q?qE+G/8z6WfqH2zgcSHDi8gbkkuj6QHCWiFhhxBLDJhaZkZu0DoF7aJfF0ElG?= =?us-ascii?q?kohuRnxwIWdUxtX2dv3HxbkLf1GsBQRVMOymL7aOwPbFdwSjg3+EI=3D?= X-IPAS-Result: =?us-ascii?q?A2DICQDMqvVa/wHyM5BcGwEBAQEDAQEBCQEBAYNAA4FcK?= =?us-ascii?q?INyiGKMEYF5gQ+BQJNmKhMBhQeCQyE4FAECAQEBAQEBAgFrHAyCNSSCTwEDA?= =?us-ascii?q?wECIAQZAQE4AgMJAQEbAwECAwIiBAICAwFBCggGAQwGAgEBAYMegWkDFQOhR?= =?us-ascii?q?4oYbYFpM4JvAQEFgQIBAV6CNAOBNYJACBdyhHiCJIITgQ8jgjqIIYJUhzqFQ?= =?us-ascii?q?Ys4CY5LZIcThHiLNYZKMyGBUk0jFYJ+ghQMF4NFihwBVU96AQGQFQEB?= Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 11 May 2018 14:40:43 +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 w4BEeea8003437; Fri, 11 May 2018 10:40:42 -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 w4B0rSQk007135 for ; Thu, 10 May 2018 20:53:28 -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 w4B0rUlD001599 for ; Thu, 10 May 2018 20:53:35 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1AHBACA6PRalywYGNZcHQIFDINBgV8og?= =?us-ascii?q?3GIYIwQgXmBD4FAk2uEdwJFgjshOBQBAgEBAQEBAQIUAQEBAQEGGAZLhTQBAwM?= =?us-ascii?q?jBBkBATgPHAMBAgMCJgICRQoIBgEMBgIBAYMfgWkDFQOgaIoYbYFpM4JvAQEFg?= =?us-ascii?q?QIBAV6COgOBNYJACBdyhHiCJIITgQ8jgjqIIYJUhziFQYs2CY5JZIcShHWCK4k?= =?us-ascii?q?HhkkzgXNNIxWCfoIgDgmDRYocAVVPkDsBAQ?= X-IPAS-Result: =?us-ascii?q?A1AHBACA6PRalywYGNZcHQIFDINBgV8og3GIYIwQgXmBD4F?= =?us-ascii?q?Ak2uEdwJFgjshOBQBAgEBAQEBAQIUAQEBAQEGGAZLhTQBAwMjBBkBATgPHAMBA?= =?us-ascii?q?gMCJgICRQoIBgEMBgIBAYMfgWkDFQOgaIoYbYFpM4JvAQEFgQIBAV6COgOBNYJ?= =?us-ascii?q?ACBdyhHiCJIITgQ8jgjqIIYJUhziFQYs2CY5JZIcShHWCK4kHhkkzgXNNIxWCf?= =?us-ascii?q?oIgDgmDRYocAVVPkDsBAQ?= X-IronPort-AV: E=Sophos;i="5.49,387,1520913600"; d="scan'208";a="274391" Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.35]) by goalie.tycho.ncsc.mil with ESMTP; 10 May 2018 20:53:35 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3ADofaChRm8HWvUoksYE/i5v5Eddpsv+yvbD5Q0Y?= =?us-ascii?q?Iujvd0So/mwa67ZhWDt8tkgFKBZ4jH8fUM07OQ7/i7HzRYqb+681k6OKRWUB?= =?us-ascii?q?EEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAA?= =?us-ascii?q?jwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba98IRmssQndqtQdjJd/JKo21h?= =?us-ascii?q?bHuGZDdf5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2?= =?us-ascii?q?Ao/8LrrgXMTRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VD?= =?us-ascii?q?K/5KpwVhTmlDkIOCI48GHPi8x/kqRboA66pxdix4LYeZyZOOZicq/Ye94VQm?= =?us-ascii?q?hOUdxRVyxGBYOwdpIDAvYPMOtZsoXxvkcCoQajDgWoGu/j1jpEi3nr1qM4zu?= =?us-ascii?q?shCxnL0hE+EdIAsHrar9v7O6kdXu+30KbGwi7Ob+9U1Drn9ITEbh4srPOKUL?= =?us-ascii?q?ltccTR004vFwbdg1iOs4PlJC2a1+QQuGaG8+VgVfigi3MpqwF1vDev3Nonh4?= =?us-ascii?q?7ViY0P0VDL6yV4zZ0uJdKkSE50e8OkEJVUty6ELYt6W98tTHtytCkmzb0GvI?= =?us-ascii?q?e2cS4Xw5ok3x7Sc+KLf5WH7x75SuqcLi10iGxqdb6liBu//lCsx+z+W8WuzV?= =?us-ascii?q?pHry5InsPNu30NzRDf9NaLR/R780y8wziAzRrT5ftBIU0slarUNZohwrkom5?= =?us-ascii?q?Udr0nNByn4lUvogaGMakgo5uml5/75bbr4o5+cLIB0hhv7Mqs0m8y/Bf40Mg?= =?us-ascii?q?0PX2if4ei81bvj8lPlQLhSkPE6j6bUvIrEKckUvKK1HQBY3pws5huwFzum1c?= =?us-ascii?q?4XnXgDLFJLYhKHiI3pNknSL//iFvewnVStnSxwx//aPr3uGIjNLnbHkLj/Z7?= =?us-ascii?q?Zx8lJTxxApwd9D4JJUD6kNIOjvVU/pqNzYEhg5PhSvw+n5DNV914UeWX+AA6?= =?us-ascii?q?KCLKPTsUOH5uIoI+WWYo8VoyzyJ+Iq5/7pk39q0WMaKI2S+NNDbHG+A+QjOE?= =?us-ascii?q?iSfGDtnsZEFGAGow4zZPLlhUfEUjNJYXu2GaUm6Wd/QKaFKaKLEoSshqGRmS?= =?us-ascii?q?S2BJtbYkhYBV2WV3TlbYOJX7ELci3EZodZmyEAHZ2mTJUsnUW2vRL+46JuM+?= =?us-ascii?q?6R/yofr5+l399wsambrg0/7Tx5CYym1miJS2xl1jcTSyQewLF0oUs7zEyKl6?= =?us-ascii?q?d/naocXed+r9dIVBoqfcrHwuh7Dc3ich7QddeODlC9S5OpBi9nCpp7+PonSG?= =?us-ascii?q?U4F9S5hQ3YxAKuAqQJjPrTXdoz6K2WlyzKAu9W6DPK1bIqkkI9as9OLnG9wP?= =?us-ascii?q?YmsQ/JCNiN22eel6DiV6Mc1SjW+WHLmWiJvEceUglwWKPeUHY3bULQqtL47U?= =?us-ascii?q?rGCbSpDOJjeihMxNXKAaxNaZW9jlhLX/zkP9f2aGKrnGKxGBPOwamDOs6iR2?= =?us-ascii?q?gBxzjaQGgNlQwatSKeOA4xGyan5mHTFjpjEXruJkfr7+Q4s3q4U1U9iQeHKU?= =?us-ascii?q?95gf792BcQiOfUbvQJxLMf8HMjrjJuBlem99TfDteB4Q17c/MPT8k65QJs3H?= =?us-ascii?q?nUpkRGNZypMq5mi0RWJw9+pE7//w58Coxdn8wntjYhxUx5LqfOgwAJTC+RwZ?= =?us-ascii?q?2lYu6fEWL15h36Lv6OgAuM2cuK+qoJ9PUzokniuwfsDEc57nF7yIYKgUa3wb?= =?us-ascii?q?GRJzI7CMq3X0sy7Bc8orjbZm845oeHnXFvMKzhqjbZwJppH+oqzB+8Ys1SeL?= =?us-ascii?q?2JDg78EsAWRoCuJeUmlkLvb0csLelS86lyNMSjeg=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0C4AwC66PRalywYGNZcHQEBBQELAYN?= =?us-ascii?q?AgV8og3GIYIwQgXmBD4FAk2uEdwJFgjshOBQBAgEBAQEBAQIBEwEBAQEBBhg?= =?us-ascii?q?GSwyCNSSCTwEDAyMEGQEBOA8cAwECAwImAgJFCggGAQwGAgEBgx+BaQMVA6B?= =?us-ascii?q?oihhtgWkzgm8BAQWBAgEBXoI6A4E1gkAIF3KEeIIkghOBDyOCOoghglSHOIV?= =?us-ascii?q?BizYJjklkhxKEdYIriQeGSTOBc00jFYJ+ghQMDgmDRYocAVVPkDsBAQ?= X-IPAS-Result: =?us-ascii?q?A0C4AwC66PRalywYGNZcHQEBBQELAYNAgV8og3GIYIwQg?= =?us-ascii?q?XmBD4FAk2uEdwJFgjshOBQBAgEBAQEBAQIBEwEBAQEBBhgGSwyCNSSCTwEDA?= =?us-ascii?q?yMEGQEBOA8cAwECAwImAgJFCggGAQwGAgEBgx+BaQMVA6BoihhtgWkzgm8BA?= =?us-ascii?q?QWBAgEBXoI6A4E1gkAIF3KEeIIkghOBDyOCOoghglSHOIVBizYJjklkhxKEd?= =?us-ascii?q?YIriQeGSTOBc00jFYJ+ghQMDgmDRYocAVVPkDsBAQ?= X-IronPort-AV: E=Sophos;i="5.49,387,1520899200"; d="scan'208";a="13170970" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from ucol3cpa06.eemsg.mail.mil ([214.24.24.44]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 11 May 2018 00:53:34 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;7c557975-f265-446d-b015-e4a6f4d55e2d Authentication-Results: UCOL3CPA10.eemsg.mail.mil; dkim=pass (signature verified) header.i=@yahoo.com X-EEMSG-check-008: 30769189|UCOL3CPA10_EEMSG_MP25.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 66.163.189.90 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0CgAgAv5vRah1q9o0JcHQIFDIUgKINxiGCOCYEPgUCTa4R3AkWCOyE4FAECAQEBAQEBAhQBAQEKCwkIKCMMhSgBAwMjBBkBATgPHAMBAgMCJgICRQoIBgEMBgIBAYMfgWkDFaBvihhtgWkzgm8BAQWBAgEBXoI6A4E1gkAIF3KEeIQ3gQ8jgjqIIYJUhziFQYs2CY5JZIcShHWLMoZJM4FzTSMVgn6CIA4Jg0WKHAFVHzCQOwEB X-IPAS-Result: A0CgAgAv5vRah1q9o0JcHQIFDIUgKINxiGCOCYEPgUCTa4R3AkWCOyE4FAECAQEBAQEBAhQBAQEKCwkIKCMMhSgBAwMjBBkBATgPHAMBAgMCJgICRQoIBgEMBgIBAYMfgWkDFaBvihhtgWkzgm8BAQWBAgEBXoI6A4E1gkAIF3KEeIQ3gQ8jgjqIIYJUhziFQYs2CY5JZIcShHWLMoZJM4FzTSMVgn6CIA4Jg0WKHAFVHzCQOwEB Received: from sonic306-28.consmr.mail.ne1.yahoo.com ([66.163.189.90]) by UCOL3CPA10.eemsg.mail.mil with ESMTP; 11 May 2018 00:53:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1526000013; bh=OaEUtROfk2l9e9Sh/zMG3AGWiP2R1C9b6C80DGM1BKI=; h=Subject:To:References:From:Date:In-Reply-To:From:Subject; b=RfigDzRkCAnC8ONd6QAI+WOoFyS7IXP0xNhkloVGJg8Nv3h7xASBbfsD29vT6L/kxMOdwT2XDvpMaiI9QGj3RpAt/qa7r5hqxSp7kFmk7U5E5O8mQMK4/YNoTCxihBMBtv8opyeX93eYTfq7uyXAsm0L3x7WAoz5yabEM3c3ViIsNFdDuKq4jB+qRhEJcFIRkfTwuLX28XoYO2G4LPtSWngpaSU8poWsSowKgY1YZYjj0DYbLXXEtGZYX/wPcAnB8h7LquIEHgab0hBB4ioUgL1TKZ8EDx8vlBtlVba8xoxMOhanVZtkowrdJ3MJ4OZjCDFFzYp+hbOIAW23AeTNHA== X-YMail-OSG: QeuJQUEVM1mzqQNufi2.1GNPenDiOh9AFgGp2wBIsfIu7wv5t51i4ZfHUcOXshR cryDX45sQ09u56tBtpz.WXJfVRyf5krDFYmmY33s1Oi7jAfkW82QmNFMyVtA.OZ69.7LmbSFtJco pd.HgR9Znqt9pOv4jSm6C8uLx32ML6RDxEk7ez.VYZfxfjHdCUg4GNt3ejM3F2mwCy_7aLrSZoHf k5Th2NgoqUXByqZhkC3vrs7.KaiNA5vAQWr3br_u335c84V3DfSid0Li.9sti8hof.sL.X_NQUNd biHti4Vhtqw2qT0I3wwGjM8c7_vzf5RUI11ZNJaxGF._ZjAqDMWC_ZOKVIqGOvi6ePLVYiv9D6_D Boql1_P1Q1lIwfVRL3_rw4aiMn1gD1YuQJAF3y_gaSrGFRR4FJV5BgnpeH8oJ5E2TkqX2Ow7ITkb aAOYFuUNoMrr1VaNP8JACkGZTPh8qNhHWWuOC.bHOCUBCBEBZtMuOUA0xvvSrARsQNnwFrYZZ.73 ffa.hU..177JRIEil5JrvsCyFqjzrE8KPWGFG9LSalvjDjlgV8a9rBE3fRZp5pw1Ss_d3wFGoxjS qLIX3rE1ise1n5nyDk6KTotJoywEuBiNewIMmZqrrTa1DA5RO8LfRCc_9COqjn5HVwqsCEqDNs6S 4KXM- Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.ne1.yahoo.com with HTTP; Fri, 11 May 2018 00:53:33 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO [192.168.0.105]) ([67.169.65.224]) by smtp420.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b26aaa1feffe3b27575fe78dd4c50219; Fri, 11 May 2018 00:53:31 +0000 (UTC) To: LSM , LKLM , Paul Moore , Stephen Smalley , SE Linux , "SMACK-discuss@lists.01.org" , John Johansen , Kees Cook , Tetsuo Handa , James Morris References: <7e8702ce-2598-e0a3-31a2-bc29157fb73d@schaufler-ca.com> X-EEMSG-check-009: 444-444 From: Casey Schaufler Message-ID: <22bc0287-52b9-61c2-ab8d-f69f688d68fb@schaufler-ca.com> Date: Thu, 10 May 2018 17:53:28 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <7e8702ce-2598-e0a3-31a2-bc29157fb73d@schaufler-ca.com> Content-Language: en-US X-Mailman-Approved-At: Fri, 11 May 2018 10:37:08 -0400 Subject: [PATCH 08/23] SELinux: Abstract use of inode security blob 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 From: Casey Schaufler Date: Thu, 10 May 2018 14:16:55 -0700 Subject: [PATCH 08/23] SELinux: Abstract use of inode security blob Don't use the inode->i_security pointer directly. Provide a helper function that provides the security blob pointer. Signed-off-by: Casey Schaufler --- security/selinux/hooks.c | 26 +++++++++++++------------- security/selinux/include/objsec.h | 5 +++++ security/selinux/selinuxfs.c | 4 ++-- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 334f47305551..baefd36b44df 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -277,7 +277,7 @@ static int __inode_security_revalidate(struct inode *inode, struct dentry *opt_dentry, bool may_sleep) { - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); might_sleep_if(may_sleep); @@ -298,7 +298,7 @@ static int __inode_security_revalidate(struct inode *inode, static struct inode_security_struct *inode_security_novalidate(struct inode *inode) { - return inode->i_security; + return selinux_inode(inode); } static struct inode_security_struct *inode_security_rcu(struct inode *inode, bool rcu) @@ -308,7 +308,7 @@ static struct inode_security_struct *inode_security_rcu(struct inode *inode, boo error = __inode_security_revalidate(inode, NULL, !rcu); if (error) return ERR_PTR(error); - return inode->i_security; + return selinux_inode(inode); } /* @@ -317,14 +317,14 @@ static struct inode_security_struct *inode_security_rcu(struct inode *inode, boo static struct inode_security_struct *inode_security(struct inode *inode) { __inode_security_revalidate(inode, NULL, true); - return inode->i_security; + return selinux_inode(inode); } static struct inode_security_struct *backing_inode_security_novalidate(struct dentry *dentry) { struct inode *inode = d_backing_inode(dentry); - return inode->i_security; + return selinux_inode(inode); } /* @@ -335,7 +335,7 @@ static struct inode_security_struct *backing_inode_security(struct dentry *dentr struct inode *inode = d_backing_inode(dentry); __inode_security_revalidate(inode, dentry, true); - return inode->i_security; + return selinux_inode(inode); } static void inode_free_rcu(struct rcu_head *head) @@ -348,7 +348,7 @@ static void inode_free_rcu(struct rcu_head *head) static void inode_free_security(struct inode *inode) { - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); struct superblock_security_struct *sbsec = inode->i_sb->s_security; /* @@ -1501,7 +1501,7 @@ static int selinux_genfs_get_sid(struct dentry *dentry, static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry) { struct superblock_security_struct *sbsec = NULL; - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); u32 task_sid, sid = 0; u16 sclass; struct dentry *dentry; @@ -1790,7 +1790,7 @@ static int inode_has_perm(const struct cred *cred, return 0; sid = cred_sid(cred); - isec = inode->i_security; + isec = selinux_inode(inode); return avc_has_perm(&selinux_state, sid, isec->sid, isec->sclass, perms, adp); @@ -3018,7 +3018,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir, /* Possibly defer initialization to selinux_complete_init. */ if (sbsec->flags & SE_SBINITIALIZED) { - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); isec->sclass = inode_mode_to_security_class(inode->i_mode); isec->sid = newsid; isec->initialized = LABEL_INITIALIZED; @@ -3118,7 +3118,7 @@ static noinline int audit_inode_permission(struct inode *inode, unsigned flags) { struct common_audit_data ad; - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); int rc; ad.type = LSM_AUDIT_DATA_INODE; @@ -4124,7 +4124,7 @@ static int selinux_task_kill(struct task_struct *p, struct siginfo *info, static void selinux_task_to_inode(struct task_struct *p, struct inode *inode) { - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); u32 sid = task_sid(p); spin_lock(&isec->lock); @@ -6483,7 +6483,7 @@ static void selinux_release_secctx(char *secdata, u32 seclen) static void selinux_inode_invalidate_secctx(struct inode *inode) { - struct inode_security_struct *isec = inode->i_security; + struct inode_security_struct *isec = selinux_inode(inode); spin_lock(&isec->lock); isec->initialized = LABEL_INVALID; diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index 2586fbc7e38c..168a96104fa0 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -172,4 +172,9 @@ static inline struct file_security_struct *selinux_file(const struct file *file) return file->f_security; } +static inline struct inode_security_struct *selinux_inode(const struct inode *inode) +{ + return inode->i_security; +} + #endif /* _SELINUX_OBJSEC_H_ */ diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index a1a389c09857..cbb270c9a3c1 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -1380,7 +1380,7 @@ static int sel_make_bools(struct selinux_fs_info *fsi) if (len >= PAGE_SIZE) goto out; - isec = (struct inode_security_struct *)inode->i_security; + isec = selinux_inode(inode); ret = security_genfs_sid(fsi->state, "selinuxfs", page, SECCLASS_FILE, &sid); if (ret) { @@ -1943,7 +1943,7 @@ static int sel_fill_super(struct super_block *sb, void *data, int silent) goto err; inode->i_ino = ++fsi->last_ino; - isec = (struct inode_security_struct *)inode->i_security; + isec = selinux_inode(inode); isec->sid = SECINITSID_DEVNULL; isec->sclass = SECCLASS_CHR_FILE; isec->initialized = LABEL_INITIALIZED;