From patchwork Mon Jul 16 18:22:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10527541 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 BFFDF60348 for ; Mon, 16 Jul 2018 18:39:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B14FB28DC5 for ; Mon, 16 Jul 2018 18:39:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A425528DC9; Mon, 16 Jul 2018 18:39:17 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, NO_RDNS_DOTCOM_HELO, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from uhil19pa09.eemsg.mail.mil (uhil19pa09.eemsg.mail.mil [214.24.21.82]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A90D28DC5 for ; Mon, 16 Jul 2018 18:39:15 +0000 (UTC) Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by uhil19pa09.eemsg.mail.mil with ESMTP/TLS/AES256-SHA; 16 Jul 2018 18:39:14 +0000 X-IronPort-AV: E=Sophos;i="5.51,362,1526342400"; d="scan'208";a="15798469" IronPort-PHdr: =?us-ascii?q?9a23=3A4T1FBR+mWrOJgP9uRHKM819IXTAuvvDOBiVQ1K?= =?us-ascii?q?B62uoeIJqq85mqBkHD//Il1AaPAd2Fraocw8Pt8InYEVQa5piAtH1QOLdtbD?= =?us-ascii?q?Qizfssogo7HcSeAlf6JvO5JwYzHcBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBB?= =?us-ascii?q?r/KRB1JuPoEYLOksi7ze+/94HSbglSmDaxfa55IQmrownWqsQYm5ZpJLwryh?= =?us-ascii?q?vOrHtIeuBWyn1tKFmOgRvy5dq+8YB6/ShItP0v68BPUaPhf6QlVrNYFygpM3?= =?us-ascii?q?o05MLwqxbOSxaE62YGXWUXlhpIBBXF7A3/U5zsvCb2qvZx1S+HNsDtU7s6RS?= =?us-ascii?q?qt4LtqSB/wiScIKTg58H3MisdtiK5XuQ+tqwBjz4LRZoyaOuB+fqfAdt0EQ2?= =?us-ascii?q?RPUNtaWyhYDo+hc4cDCuwMMuFaoIbnp1sOqhy+CRC1CO7zxDJFh2L60bQm3+?= =?us-ascii?q?g8DArK2BIsE84LvHnSsd77NrodUfqtwafWwzXNb/BY1znz54fHcB8vvOmMUL?= =?us-ascii?q?Btfcff1UYhGB3Kjk6LpIz5PT6YzPgBv3SV4uZ+U++klm4pqxt2ojiq3sohlJ?= =?us-ascii?q?PGhpkLxVHE6C533Zo6Jd2iR05mb96kFIVftzuHPIZxXswtWXpotzg6y7Adop?= =?us-ascii?q?60YCgKx446xx7Rb/yIbZKI7gv/W+mLOzt3mHVleLemihu07EOuxOr8Vsyu31?= =?us-ascii?q?ZLqCpIit3MtnEO1xPN5MmHS+B98Vm71TaJ0ADS5OdJKl03m6rDM5Mt37E9m5?= =?us-ascii?q?UJvUnDAyP6glv6gaCIekk+5+Sk8+Xqb7f8qpOBNoJ5jhvyP6Uul8ClH+g0LA?= =?us-ascii?q?cDUm6G8uqmzrLj51f2QLBSg/0zlanWrY7VKNwApq68Hw9VyoEj6wujDzu+0N?= =?us-ascii?q?QXg30HLFVddRKblYfpIVDOIO3jDfulglSsljlrx/fdPrL/HprBNGTDkbf9cr?= =?us-ascii?q?Z97E5Q0gwzwsxE551IEL0BJfPzWkvpuNzZCB82LRC0zv76BNhy2Y4SQ2KCDr?= =?us-ascii?q?KDPK/MvlKE+PgjL/SUaI8Qojn9Kvwl5/D0jX8+nF8QZbKp0oUTaHC5GPRmPk?= =?us-ascii?q?qYbWP3jdcGDGcKuBYxQ/LxiFCZTT5SZ2q9X6I75j0hDoKmFp3MSpqigLyGwi?= =?us-ascii?q?e3BodWaXxeClCQDXfocJ2JW/ULaCKUOMBhjjwEWqKnS4I61xGuswn6y799Ie?= =?us-ascii?q?rP5i0Xq4jj1MNv6+3UjxEy+iR+D96B3GGVU2F0gmQISic03KB9u0Ny1lSD0b?= =?us-ascii?q?N/g/xeFNxT+ehEUgk+NZ7BwO11EM3yWgTdfteUUlqmRc+mAT4pRNIr39AOe1?= =?us-ascii?q?p9G8mljh3b3yuqHqUVmKCLBJwz6KLRxGXxJ8Vny3rc0qkukUUmSNNVNWK6nq?= =?us-ascii?q?5/6xTTB4nRnkWBiamlbroT3CjM9GefymqDp0BYXxBuXqrbR3wfYVHWrdvh7E?= =?us-ascii?q?PYU7CuEagnMhdGycOaN6RKbdvpjVNbS/j9PNTeYnm8lH2uChaSwbOAdo3qe3?= =?us-ascii?q?8S3C/FEkgLjxgT/WqaNQg5Hiquvn7eAyZ0FV/0f0zs9ux+p2+hQU8v0wGGdU?= =?us-ascii?q?th2KSp+hQNn/yTV+sT3q4YuCcmszh0HVC9387IBNqEuQVhebtTYc8n4FZHzm?= =?us-ascii?q?/ZsBR9MYKmL6BnnFEecgB3sFjp1xR4EIlAltIqrHwyxgpoNa2YyE9Bdy+f3Z?= =?us-ascii?q?3oNLzXK23y/BWxZK7MwVze3siZ9boI6PQisVrjpBupFk0g83p5z9ZVz2GQ5p?= =?us-ascii?q?LQDAodSZjxSFo49wBmp7HGZSkw/4DU2mdvMamzrz/PwNEpC/EmyhanYtdTKq?= =?us-ascii?q?SEFBX9E8cCHcihNPQqm0S1bhIDJO1d7rM7P9mnd/SYwq6mJ/xvky6jjWhd54?= =?us-ascii?q?B9yE2M/TJmSuHUx5YF3+2Y3gyfWjjgllihtt74mZtYZTASGWqy0jPkC5JQZq?= =?us-ascii?q?Jse4YLFWauLNetytV4mZHtR2ZS9ES/CFMexM+pZR2SYkTn3QJNyEsaunOnmS?= =?us-ascii?q?63zjBulTEmsLaf1jTUw+v+bBoHJnJLRG56gFf3L4i0ldcaXFO0bwUyjxul40?= =?us-ascii?q?H6xqZepKtlKWnfW0FIcDbqL2t6SKu/qqKCY9JT6JMvqShWXv6zYVSGSrHjuR?= =?us-ascii?q?sayDjuH3VAyzAhbD6qp5D5kwZ9iGKHI3Z5tGDZdt1oxRfD+NzcQuZc3jwHRC?= =?us-ascii?q?l8jTnYGEO8MsKz8tqKjZfDtfqyV2W7Vp1caSPr15+PtDOn5W12Bh2yh+6zmt?= =?us-ascii?q?z7Hggm1i/7zcNmWjnIrBb7ZInr2L+3MeZmfkluHlD88c16Fpt5kosqi5EawW?= =?us-ascii?q?IaiYmN/XobjWfzNs1W2ab/bHoWWT4H2sXV7xbh2E1iKHKJ2o34W26Gwst5Zt?= =?us-ascii?q?m6ZGIW1T4m78xQDqeb8qBElzNvolWktQLRfeR9njAFxPs0734ah+UJtxQ3zi?= =?us-ascii?q?qBBbATE1JVPTfxlxuU9NCytqJXZHygcbKozkpxgcihDK2eogFbQHv5eYktHS?= =?us-ascii?q?lr7shkM1LDznvz6prieNbOcdIfrBqUkw3Pj+JNMpI+iuIKhTZ7OWL6pXAl0/?= =?us-ascii?q?Q0jQFq3Z6kpIiIMWNt/L6nDR5CLTD1etgT9S/3jaZFhMqWxIevHoh7GjoXQp?= =?us-ascii?q?ToQ/WoECgdtfv5LQqOFiMzqmuDE7rFAQCf8Ftmr27IE52zKXGXImQWwM58RB?= =?us-ascii?q?mbOUNfgBoYXDMkkZ4lDgqq3tDucF9l5jAN4V71sgNMxfh1Nxn7SWrQuAaoai?= =?us-ascii?q?s0SZSGIhpZ9AdC613SMcyE4eJ5BztY8YG5rAyRNmybYBxFDWIJW0yAGV/uJb?= =?us-ascii?q?yu5d7O8+iWGOW+M+fOYbWJqexbSfiE35Sv3ZV6/zyULMWAImFiD+En2kpERX?= =?us-ascii?q?15Fd7WmzMTSywQkiLAdMCbqwmh9S1wtMCw6uzrWBjo5YuNFbRdLclv9wqxga?= =?us-ascii?q?eZOO6anDx5JipA1pMQ2X/Iz6AS3FAIiy5wajatCq4PtSjRTKLXga9aFAQUZD?= =?us-ascii?q?92NMdS6KI8xAZNM9bBitzpzr54kuI1C1BdWFP6gc6lYsgKI2CmNFPbH0aHLq?= =?us-ascii?q?+GKiPXzM3teqOzV7lQjORStx2ttjeWCFPsPzSZlzn0TBCjK+9NgzuHPBxFv4?= =?us-ascii?q?G9dAxhCW/5TNLpche7KsN4jSUqwb0ogXPHLXUTMTlzc0NKqL2d9j5XjetkFG?= =?us-ascii?q?xA9HVlK/OImyGD7+nXMpwWq+dkAjxol+JG53Q306Fa7C5eS/xrhiTftdluo0?= =?us-ascii?q?m4nemJzzpoShtOqjJQi4KMskRuI6LZ9oNPWXzc5hIC8X2QCwgWp9tiEtDvp6?= =?us-ascii?q?dQyt3VmKLpLzdD8szb/c0HCMjOL8KILnkhPAH1Fz7TCQsKUSSkNXrDh0BHlv?= =?us-ascii?q?Gd6GGVpIAgqpfwgJoOVqNbVFstG/MYCkRkHMQCIJBzXjMljb6UktUF5X+/rB?= =?us-ascii?q?nNXsVVoIrLVvWIAfXgMDyZl6VLZwMUwbPkKoQeLpP021R4ZVlgnYTKAFHdXc?= =?us-ascii?q?hXrS17bw80u11N8HxkQWIvxU3pcASt4GUcFfSshB45lhN+Yfgx9Dfr+1o3IE?= =?us-ascii?q?TFqzE0kEQqmtXlhiuRcCLrI6e2RoFWCCv0u1I3MpzlXwZ/dReyklB8NDfYW7?= =?us-ascii?q?JRiKNtdXp1hw/Hp5RAA+RcQrFEYBIL3v6XZu8o3klbqiWp3U9H//XKCJt4mA?= =?us-ascii?q?ssb5Gss2pK2xh/Y94tOazQOK1Jw0BNia2UoC+o1/0+wBQFKkkX6mOSYikIuU?= =?us-ascii?q?ITNrY4OyWo4/Zs6Q2emzpDYmQMUeQlou5y/EMnJ+uA1z7g06JEKk2pM+yfKL?= =?us-ascii?q?mZtHbGlc+JRVM9zUwIl09Y/bRs1scjaUWUXVg1zLSNDxQJKdbCKQZNYspJ6n?= =?us-ascii?q?fTeSeOsePQwZN6JIiyCufoTeqSu6kOmUKkABwlH4IS4cQdBpOsyl3XLd/7LL?= =?us-ascii?q?4ZzhUg/BnkK0mADPROfhKLjCoLrtqhzJBpx4ldJzAcAWJ7MSmt4LbYuBMqiu?= =?us-ascii?q?KZXNgqencaQpcENnUuVc2mmi5ZunNADCW30uMZ0wWN8j78pyTKAzbnddZjYu?= =?us-ascii?q?mbZQ90AtGs5To/67S2iULQ8pjGPW76MdVitcPR5uwCopaGC/VUTb57s0jGgI?= =?us-ascii?q?RXXH2qXHTJEdKsKZjwdpMgbdrqBXamSla/kS46T9/tPNaxKaiFmRrnSphSsI?= =?us-ascii?q?SAxj8sKNG9GS8EGxdrve4D/qJ9aRcEY5ohbh7irx4+OLCnIAeEztWuRH6gKS?= =?us-ascii?q?FQT/le0eq6Z7tXzy43buGi0XUuU4s0wvWw/0MWWJ4KiRTeyuq5aIlFTSj/AH?= =?us-ascii?q?pddBvTpSAhjWhuKv4ywvsjwBPPqVQTLzKLe/Z1Z2Ffo948AleSIXF3CmUmXV?= =?us-ascii?q?+ckZTM7RKs37wI+CtdhdlU2/VfsHfipp/ffC6sWKuzpJXPqSUgd98mrLZqPI?= =?us-ascii?q?z/OMuJro3ekSLbTJnRtA2FXyq6F/tVmthQPCJYTuNHmXsgOcAcv4pO91YxXN?= =?us-ascii?q?8kJ7NTEKksuqyqaT18AC8c1yMWS4OA3D0Hgue9wbTalQydcJU8PxMarppOmN?= =?us-ascii?q?wdUzR5YikGvq+sS53Wl3OYSmgMOAoT6B5D5BgDloBuYuDl4YzITJBXxj9Yuf?= =?us-ascii?q?10VDfEFp1v91vmV26WmkL0SPO/nOy1xQhS1u7j0sEHWB5jDkhQ3/5WlkwsKL?= =?us-ascii?q?5tMakRsInKsjuGdU7huWLtz+ymJEJPxsLIbV34C5HFtXH9Ui0a9n0YX4hPyG?= =?us-ascii?q?vQFZ4KiQp2dL4rpElQIIChYkvx/SYkx5lvH7WiVsCm3FclrXcHRye2CNVNEe?= =?us-ascii?q?dmv0zLWDd9eZCktI3lO4lOQm9X4JCdt1BZkEB2Pi6l1ZZcLtpC7iQKXDdRvT?= =?us-ascii?q?WXpMGyR9Fb2c9qE58MJc9yu3X6GKxaI5WevmM5uqfxxX/D5zAzrkq1yC+1G6?= =?us-ascii?q?CmU+JT53ceFRkxJ2SCtkkvCPMh8mnI8l/XtFB74+ZbBqOUgEV0uDZ9H4lCBi?= =?us-ascii?q?1H1HC+NVhzS2NGs+pCIqTPb8NcW+UyZQOoOxEmCf4pwlGG/UBuknf9eCF9qg?= =?us-ascii?q?xa+yXBUAYuTikVnq3hmTsApcG7ITUaUY5HbS09byfZLAKWgThXvA1Da05wRp?= =?us-ascii?q?8ZHs1I+6oc3YtJ5MrNVVijKScZXBx4LA041eBTlUlZsEWXYSrdFxande7Tsh?= =?us-ascii?q?1resectNWmLPrl8wtbiI7rre41+r4fSH2hnA2iXcrRr5TgttGQsEuBarv4Of?= =?us-ascii?q?WmYXDdVDjMkQywhbA8ApnQ4SfcLQpbJINmyXc/ZZjhDnDLMgpYK60HIEpUSL?= =?us-ascii?q?51Zc9Aou9Ee89uYLwJ9rN1BhKbWhPvH5SirOVcLlnNWzvRMj6M8vG7oYLP97?= =?us-ascii?q?zSU/bgZs2Lx3bDXa13Io126T7hG7flyYVe4Fb52u9x9kNmTljLKyWBo87lJg?= =?us-ascii?q?MP+saialfisYczEj7NBpd/jmbtxlpceMUNWy2l7o4UyJVH53bsUeh4yFT8sP?= =?us-ascii?q?VO97l47ok6+7Jpxt2uJafVMvRatVVoAgaPCwVv65UtBHR/R2FNbe8QMvjRe7?= =?us-ascii?q?8Zgdrpq+DtGKwd8AeV9PBBadvbO0HBndGyCjOGRhxCkgcBszkaIRaC2POeh6?= =?us-ascii?q?97U8ClpfP+2k435VixMAIGxqh35YiY4qqIuPPXbxzJwLgLR6jqR8fzrrAytE?= =?us-ascii?q?OX/vAriaABdXd0YwK9FugRTMkdxn3vzaoy1yIjD9vDH678+P5ET385nDPgm5?= =?us-ascii?q?VmElUTBPwVHaSE/Z5fnmc+lOzVLNsWfb5emmyXDx6rDqcCyWK36yuQOGRlhB?= =?us-ascii?q?XO3grxQWO16V/6ty54QS3Cz9f5iEVVTaW3BV1PXyW1JU94rSmPMxTyuNrwo6?= =?us-ascii?q?Q141k8Mnb4u9KViGuhJLRXEtX6JNybJyk0uF0Xg4MqS9yq2IAUA9y9L8kN8H?= =?us-ascii?q?Bwafve8WCrkzRbr6dBmYXe/tmf+u/LEnm4k62at7KNyShcyngjuFEy6sutNv?= =?us-ascii?q?/Q6NKXRPSozXweTz9luwvGXR66tKDUr0wONUyMykfLl5QAPstF0nkgykHm+O?= =?us-ascii?q?8jTcoy9ARfDInPfe8NqCvoODTq3VaQfc44WjOZ0ztNEVL/CUN4F7Qk2GLsoM?= =?us-ascii?q?LJkm/d9EYpRolreU3onx53D4QkKUI18lcX3y4DHBMRZhCcEb6nG17qLZYeVU?= =?us-ascii?q?gEcxSIxqK2eqAt3U182rmv/vPcbfRgB6oRMfZQlhaOk0JHGp0Ksa0fTrV8e0?= =?us-ascii?q?Ve9KLOvQjtFYznX/nglXotOvy4Wdha/toFt3Q+4ga+SR2g6Y1A77oBi5CHaL?= =?us-ascii?q?REYZ7Ss8B49Utn4iQPdiNVihhlkxy5SfwcpPzk4tXDv5qn9OCuVLoqR+UQ8B?= =?us-ascii?q?Q0HHpxj5/xgFAlvNHW2PxRSonLhoTl8AFCOWSGuIDE3BlgMeAOMZ6kfK5893?= =?us-ascii?q?UbICgTP3QOPduKZPk75y9iKi7T60ZDAsMLYtMYJ9HNlBtRikDmV7Bf7M3bGk?= =?us-ascii?q?WXC41rbcAn83L3yCwp8Zs7Suvg5yO5JYvE711UIv1NgyNilNPEpOgIzvvfEy?= =?us-ascii?q?cX4XyDZBhz3CyO0Z6NC+z//e+U0tHbS0sGHjIqU4daPDeC+wunRuqzlJnzTg?= =?us-ascii?q?yU6svzgI8je0ORR3yxmr8FsqVNEeNblCX73yZeGZrxh/2Istqg8m1XuUNbEI?= =?us-ascii?q?xr9x3KBL1fPolnORT/jsSrR1Z8CTH5eMzPchoupfeZxuYL4+VlLUf+YpUbIh?= =?us-ascii?q?0cwbLg9XVVVhduSKLxvluBX+IeetVmSP3Arn1O54NvMakPM0aBpJDwqDdHtk?= =?us-ascii?q?w2ChczaLAstjxaalXOnApNVqb7vL4AjQUdXsB9uU9IAm+wI2U+5zzGVatJlq?= =?us-ascii?q?WRDuIa8imLRKwUT0poKj9+Qw+y2Jh2frupnPNHsmBBni5movglyT9mRBy6uS?= =?us-ascii?q?LyoaIBwzQg96+ktD8Zo3xKUv2ekzvUCVVE1PkFlrkTC3D+6VGne3kDaIzy4K?= =?us-ascii?q?V7JcT+64Yu/m4zYRI5fy0JRe6gET3/j7uUAoyTt9JRnBCNt9vKbb+yNSgdKK?= =?us-ascii?q?8wyBPiR3h41wjRggxo8G8VTTm6698kPoq9M94/xiW0AWjbaEoM4qRRvcr/rV?= =?us-ascii?q?4LVuo2Zk9/z2h418iHRzENRNbRFGoviQgkc2pEeopZ6RAGD6koniqIvq5e8w?= =?us-ascii?q?ETZDfbDJ+o+pHUncjSwnk9UdZqyX7Kpq2fmJwlzmdpm9Vq4S6SoH4SbfDXU9?= =?us-ascii?q?dwAnjv0YdS0ej+Z/SrsuAaR4pq0bChUP4ZMsm/4mu7w5RqVVWjxrQZBVa5N/?= =?us-ascii?q?UDxrjDWSe/VWKYQfiLc3SLnzshN079/wWnLl02aMdMqE8wKfXChp9alwL/Vb?= =?us-ascii?q?N0RyOQpULUzWA5NuMabQ02sp+9ewMWVO4Re/ScJe82zf08ElQMbHjJEjBtBu?= =?us-ascii?q?+rt16tgIh7O3J94UX1YeTt7hrqMN2MFRkYCYTatIJ++eSmRmKdPn9t1AZyPE?= =?us-ascii?q?dx9+jDFlk8tfRRc4iPktjKhtR60OkFd/F3PS07pNEThtEr1Y7B9PyvOUXVz5?= =?us-ascii?q?DvNZTOr/OFGfzD3gEvfW1HVrcxfwz4/cM5M8Q/VrmVGqFW61BUIYseZdR1M2?= =?us-ascii?q?b36bExLw5pdAPVTKq7j9Ospe+RYJZQ4XjM4QR0ZB/VphlL7/uzVwEzO4ijmn?= =?us-ascii?q?HaOJktQndEqNp3B11tG44ZX4s7swe/A5OS0Jq+gtu19lIy7/QGqoLsG/vK05?= =?us-ascii?q?K/xIw3UJ9EswjDBxuZIKhtn1Qt2v+/hvbGz4nZFdLpedRCUvNyBGHCdOmCVs?= =?us-ascii?q?+EDxulGYfwelVN7qWH+LZ4SQmKInigGa2cu2fsYM5ByG4Yj4B5Z+HO1ycF67?= =?us-ascii?q?DAxMC0PzgdoT2s+zrBFpxf6hToAuzXWQlZT7LR8mFlG+sVaov98vwDN/Qpyd?= =?us-ascii?q?6b5Qh45TAE28yAdezpjULBwQpQcpXYZB/q1isiUo4NIzy0MVErhG7ErzLaG3?= =?us-ascii?q?sKaoCYJNV2ndHdLhXr60A5zXkgYGFcG2ytRtqLP2Uf88P7YAqU+URQBtUehe?= =?us-ascii?q?fxf0N+tLXkDaFKM5BIgq2Ps68dkM0hfyPKQ9JAPjr4KrZzMzsXCf/A8gsGeB?= =?us-ascii?q?kB5pM8QYokLaOFIEoaPkON02umxgLZ3FzcbNes3buHJCsMt35OibnC1G4f9E?= =?us-ascii?q?GCpf+Fj5i7A/jiZ5bsUauXYXJ/DGOTWCgyHEC1+Fytp/sDur+CLHwCpkwPOH?= =?us-ascii?q?7JWjMoiIo0huD5VjaVlOBmZ5JMgfmbX2b1SSkr8ch6HT5F4GaLRfdLDgzKdz?= =?us-ascii?q?n5mmMJswW5K+5k5nnlZqCWwqdPHucfRIBLd678IZPDYf4LATAum30CPfqkOd?= =?us-ascii?q?jVrrI3yFXNGGAQCKTZ3EaVTEeLTPiR3XfgVMMeuI1n30hg4creywlwFamAJL?= =?us-ascii?q?ODv3iu/4q/2T6fovHbX3IxblYdm+UEAWLamEcFcj9CANYTo0T3BKuJZkIK22?= =?us-ascii?q?twz/Nn2xgLPg90Vy4LsDVan/e4T9VQUkVczHivT/sPcE1tAXsu8FWL7Az/bZ?= =?us-ascii?q?1Iuc3aS2JEsLpZYZsULP4vroLQPaY=3D?= X-IPAS-Result: =?us-ascii?q?A2DiBQB25Uxb/wHyM5BcGgEBAQICAQEBCQEBAYMgJ4EJS?= =?us-ascii?q?hIojF+NPQiCeJJlFIFiJxSFBIJANhYBAgEBAQEBAQIBbBwMgjUkgl4DAwECJ?= =?us-ascii?q?BMGAQEMIAsBAgMJAQFACAgDAS0UAREGAQcFBgIBAQEYBIJ/gWgDFQOeRIobg?= =?us-ascii?q?WkzgnEBAQWBAgEBX4I1A4MnCBeHVIMtgREnDIcmARIBhXWIDIRNPS6MGgmFW?= =?us-ascii?q?IMWhjNqX4Z2CIUkjD+HHQsmYXFNIxU7gmmCJRd6AQ6CPIocAVVPfIpggjkBA?= =?us-ascii?q?Q?= Received: from tarius.tycho.ncsc.mil (HELO tarius.infosec.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 16 Jul 2018 18:39:12 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus.infosec.tycho.ncsc.mil [192.168.25.40]) by tarius.infosec.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w6GIcm4k023537; Mon, 16 Jul 2018 14:38:55 -0400 Received: from tarius.infosec.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 w6GIMFUI024319 for ; Mon, 16 Jul 2018 14:22:15 -0400 Received: from goalie.tycho.ncsc.mil (goalie.infosec.tycho.ncsc.mil [144.51.242.250]) by tarius.infosec.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w6GIMOIi020673 for ; Mon, 16 Jul 2018 14:22:24 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1CvBgCx4UxblywaGNZcHAEBAQQBAQoBA?= =?us-ascii?q?YMfJ4FTEiiDfIhji12BYAiCeJRfhHcCQoIfITcVAQIBAQEBAQECFAEBAQEBBhg?= =?us-ascii?q?GTIVDAwMjBBkBATcBDyUCJgICRRIGAQwGAgEBgxyBaAMVA549ihtuezOCcQEBB?= =?us-ascii?q?YECAQFfgjQDgycIF3SGYIEXghaBEScMilqCVYgMhE09LowaCYVYgxaGM2pfhnY?= =?us-ascii?q?IhSSMP4csgXRNIxU7gmmCGQwOCXoBDoI8ihwBVU+OFQEB?= X-IPAS-Result: =?us-ascii?q?A1CvBgCx4UxblywaGNZcHAEBAQQBAQoBAYMfJ4FTEiiDfIh?= =?us-ascii?q?ji12BYAiCeJRfhHcCQoIfITcVAQIBAQEBAQECFAEBAQEBBhgGTIVDAwMjBBkBA?= =?us-ascii?q?TcBDyUCJgICRRIGAQwGAgEBgxyBaAMVA549ihtuezOCcQEBBYECAQFfgjQDgyc?= =?us-ascii?q?IF3SGYIEXghaBEScMilqCVYgMhE09LowaCYVYgxaGM2pfhnYIhSSMP4csgXRNI?= =?us-ascii?q?xU7gmmCGQwOCXoBDoI8ihwBVU+OFQEB?= X-IronPort-AV: E=Sophos;i="5.51,362,1526356800"; d="scan'208";a="324690" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 16 Jul 2018 14:22:21 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AH6GHCRQdPrYilp9kAa4+c+oZ2dpsv+yvbD5Q0Y?= =?us-ascii?q?Iujvd0So/mwa67ZhGBt8tkgFKBZ4jH8fUM07OQ7/i+HzRYqb+681k6OKRWUB?= =?us-ascii?q?EEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAA?= =?us-ascii?q?jwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba9zIRmssQndqtQdjJd/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?e2cS4Xw5opwB7fbuaIc4mO4h/7UOaRIDR4i2xrebK+nBa971Ksyuv7Vsi61l?= =?us-ascii?q?tBsylLksHUu3wTyhDe5dKLRuVy80u7xzqC1hrf5+5LLEwslKfWKYQtzqMxm5?= =?us-ascii?q?cXq0jOHy/7lF/ogKOIeUgp/PWj5f79bbX8vJCcMpd5igHgPaQqncyyGeo3PB?= =?us-ascii?q?UOUWWG5Oix0Kft8FHkTLhOlPE5jLfWsJXBJcQUvKK5BhVa0ocn6xqlCjem0d?= =?us-ascii?q?AYkWEGLFJDZh2Hk5DkN0/TLP33F/uznVuhnC11y/3HJLHsDZrAImDGkLj7fL?= =?us-ascii?q?Z970BcyBA0zdBa/59bFqsOIOntVU7xr9HYFQM2MwyuzOb6BtV90p0RWXiWDq?= =?us-ascii?q?CFKqzeq0OH5uUqI+WUfo8apC79K+Q55/7plXI5gkESfa2o3ZsRdXC5Ee9rI1?= =?us-ascii?q?mZYHXwgtcBFn0GvgwlTOPwklGCXjlTZ2jhF547sxUALcryCYbFW5Dom7GKwT?= =?us-ascii?q?26AowTY2dKF1SBOWnnep/CWPoWbi+WZMh7nWpAHZyCb6ppgRWvshLqjrlqNO?= =?us-ascii?q?zZ/gUGup/5ktt4/evekVc17zMiS4yl2nyJB0RzmXkFD2su1b17iVR011PG1K?= =?us-ascii?q?9/mfEeHttWsbcBaRs3LZ7RyaRBDtn2Xg/QNoOSRE2OXsStATZ3SMk4hdAJfR?= =?us-ascii?q?A5U+6PxjTC2Te6S+sOmriKAoEk2r7N1Hj2YcBmwjDJ07d3yxFsee5mHk7jiq?= =?us-ascii?q?9k/BXIHKbNkl6FjODyLOIbxiGHvDO46EOlnwRUURV7TL7edXQefVfN64ygoE?= =?us-ascii?q?TYQOnqQZYgMg0J68mCI61RZ9uh2VdBRPGlOtPeamSqlmGYDh+OwbWNZ4PuPW?= =?us-ascii?q?4a2XOZQGsJnhtb1nGBNkBqBSqsuGnZCz9GHlL1ZEbt7Ow4r2m0GAt88wyWdF?= =?us-ascii?q?Bmn5q8/BIczaiERvUcw7MC/SQssTN5GH68mtbRFdfGvANiYb9VJ9UwplVfgy?= =?us-ascii?q?aRlQV4M4foCqd4nF8FO1B1ukT0zRRsIoNJlMUr6nQww1whB7if1QZqfiiVzN?= =?us-ascii?q?jLMb3eN2f28QrnP6XfwVzP+M2d+q4S5vA1sRDotUeiEU90oCYv6MVcz3bJvs?= =?us-ascii?q?aCNwEVS5+kFxZvrUIorqzGYiQ7+4Lf3GFtNq/xqDLZxtY1H7F+l0SdRPl1a4?= =?us-ascii?q?i8PVerVcAXAtOhbukjmlzvaxMAb6hJ7KBhGcSgerOd3bKzev56lWethH9K8a?= =?us-ascii?q?hm2UKF6iR4R/SN1J9DyPadjUOcTzmpqlCnv4jsnJxcIzQbH26x0y/hUYVYfa?= =?us-ascii?q?BjVZ0ACW6zLcm63JB1jtjmXHsLvEW7CQYg38mkMQGXc0S73QBU0hEPpme7nC?= =?us-ascii?q?Kj0zFuuyouqKuUh3SQhr68MhEAPHVOXi9nhFboZ4et1pYLVUivaE4ikx72rU?= =?us-ascii?q?r5xq0OvK1kNCGTWkZHeSHqMntvGrW9rLuMYsNDqdsovCxbXf76YAWyW7f9pB?= =?us-ascii?q?xc2CTmEg=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BlBABz4UxblywaGNZcHAEBAQQBAQo?= =?us-ascii?q?BAYMfJ4FTEiiDfIhjjT0IgniUX4R3AkKCQDcVAQIBAQEBAQECARMBAQEBAQY?= =?us-ascii?q?YBkwMgjUkgl4DAyMEGQEBNwEPJQImAgJFEgYBDAYCAQGDHIFoAxUDnj2KG25?= =?us-ascii?q?7M4JxAQEFgQIBAV+CNAODJwgXdIZggy2BEScMilqCVYgMhE09LowaCYVYgxa?= =?us-ascii?q?GM2pfhnYIhSSMP4csgXRNIxU7gmmCGQwOCXoBDoI8ihwBVU+OFQEB?= X-IPAS-Result: =?us-ascii?q?A0BlBABz4UxblywaGNZcHAEBAQQBAQoBAYMfJ4FTEiiDf?= =?us-ascii?q?IhjjT0IgniUX4R3AkKCQDcVAQIBAQEBAQECARMBAQEBAQYYBkwMgjUkgl4DA?= =?us-ascii?q?yMEGQEBNwEPJQImAgJFEgYBDAYCAQGDHIFoAxUDnj2KG257M4JxAQEFgQIBA?= =?us-ascii?q?V+CNAODJwgXdIZggy2BEScMilqCVYgMhE09LowaCYVYgxaGM2pfhnYIhSSMP?= =?us-ascii?q?4csgXRNIxU7gmmCGQwOCXoBDoI8ihwBVU+OFQEB?= X-IronPort-AV: E=Sophos;i="5.51,362,1526342400"; d="scan'208";a="13850814" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from uphb3cpa05.eemsg.mail.mil (HELO USFB19PA19.eemsg.mail.mil) ([214.24.26.44]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 16 Jul 2018 18:22:19 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;cd685c6a-ed0f-45cf-ad28-57e3bef70193 Received: from localhost.localdomain (localhost [127.0.0.1]) by USFBF3ID12.oob.disa.mil (Postfix) with SMTP id 41TsFk0G9Rz39Zy1 for ; Mon, 16 Jul 2018 18:22:18 +0000 (UTC) Received: from USFB3CPA01_EEMSG_MP23.eemsg.mil (unknown [192.168.16.18]) by USFBF3ID12.oob.disa.mil (Postfix) with ESMTP id 41TsFj1V8kz39Zxt for ; Mon, 16 Jul 2018 18:22:17 +0000 (UTC) Authentication-Results: USFB3CPA01.eemsg.mail.mil; spf=None smtp.pra=casey@schaufler-ca.com; spf=None smtp.mailfrom=casey@schaufler-ca.com; spf=None smtp.helo=postmaster@sonic306-26.consmr.mail.gq1.yahoo.com; dkim=pass (signature verified) header.i=@yahoo.com X-EEMSG-check-008: 22993776|USFB3CPA01_EEMSG_MP23.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 98.137.68.89 X-EEMSG-check-002: true IronPort-PHdr: =?us-ascii?q?9a23=3AnYxmORKf7KExpwwEpNmcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgXKPT7rarrMEGX3/hxlliBBdydt6oazbKO+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZLebxlJiTanfb9+MAi9oBnMuMURnYZsMLs6xAHTontPde?= =?us-ascii?q?RWxGdoKkyWkh3h+Mq+/4Nt/jpJtf45+MFOTav1f6IjTbxFFzsmKHw65NfqtRbY?= =?us-ascii?q?UwSC4GYXX3gMnRpJBwjF6wz6Xov0vyDnuOdxxDWWMMvrRr0vRz+s87lkRwPpiC?= =?us-ascii?q?cfNj427mfXitBrjKlGpB6tvgFzz5LIbI2QMvdxeaHScskaRWpGWcZdTjVND5+y?= =?us-ascii?q?YoYOEuYNJPpUo5TgrFcKsxeyGQygCeXywTFKm3D2x7U33fk/HwHI3AIuHNwAv3?= =?us-ascii?q?rbo9r3KKgcXvu4zLXKwDjZc/9axTnw5YrOfxs8of+MR7Vwcc/JxEQxDQzFlUuf?= =?us-ascii?q?qIz4ND2IyusNs3KU7/duVeKrlWEnsRx6rz+zycg2kYnGmIIUx0vf9SplwIY6P8?= =?us-ascii?q?C4SEB/YdG6Cptcrj2VOJFsTsw+RGFovT83x7sbspC1eygKzY4oxx/Za/Gfd4iI?= =?us-ascii?q?4xHjW/ifIDd5n3JqZqizhxC18UmuzOD3S8q60E5SoydBkdTArG0B2hLR58SdS/?= =?us-ascii?q?Zw/V2t1DWL2gzL6+xJI1o4mbfaJpMl2LI9l5oevV7dEiPol0j7irKdeF8+9eiy?= =?us-ascii?q?8evnZ63rpp+COI9wjQHzKr8umsu5AeQ5LgcDUXSX9OWl2LH9/ED1WqlFjvowkq?= =?us-ascii?q?nCtZDaP94XpqujDA9U1oYv8Rm/Dy673NgCnXgINlJFeBWAj4TzJ17OJ/X4Ae++?= =?us-ascii?q?g1Sqjjhr2+jLM7niD5nXM3TOnrXscax85kNf0gY+ztRS64pRCr4bIfLzXkHxtM?= =?us-ascii?q?bfDh88KwG73/zoCM5j2YIeQm+PGbOWMKPIvl+V6OIvJ/eDZJUMtDnhMfcp/eLh?= =?us-ascii?q?jXg8mVMFZ6mmwYMXaGykHvRhO0iZemTjgtMAEWcMowo/Q/fniEGCUDFPZ3ayWL?= =?us-ascii?q?gw5jcgCI28F4vDSYetgKLSlBu8S7ltQygSDlGKDGetbIiPRu0NdDPXJ8htjzgJ?= =?us-ascii?q?faauRpVn1hy0sgL+jb19IbyQsgk7kbergNx04fDD0BI/7zp5C+yD3GyXCWJ5hG?= =?us-ascii?q?UFQ3kxxq8p5QRFw0qHmY1/hOZVXYhL7u5Neh8zKJqZyut9Ed20UQXEKJPBc0qr?= =?us-ascii?q?WtWrB3kKS9s1x9IfKxJmF86KkgHI3y3sBaQc0bOMGspwupnxl1zwIdttgyLd2a?= =?us-ascii?q?0giUQ2atdePm2hwKhk/k7cAJCf1w3TrIODXodZ0C/W/3qY1kKKvVpES0goCOPC?= =?us-ascii?q?R39VLh/tiP3SxQbOTqSlFK88Gg9A0tKZbPMTLNrzggMCDNXkONKWQWWxkmGrCB?= =?us-ascii?q?DAkrGLbIyseWId1SPGBU4smAkV+nCHPgE6QCympjSaRB9jGEmnSETr8qEqq362?= =?us-ascii?q?VUQzyAKiZE170L+05xtTguaTHbdb4r8Yozom4xV9Glq0l4bOBtyPugtnOaZRe9?= =?us-ascii?q?Uw5H9GkGbeqQE7JZWjMrprwFgTNQZv6Qem9RxyB54ItM8wtnIxhF5wLKWCylJa?= =?us-ascii?q?XzWR2J3xfLrNJT+h0gqobvv900rTwZ6t8acG9fo8pk+r6AqgDUcz225s09BI3X?= =?us-ascii?q?+R/NDBBUwZVpenARV/zARzu7yPOnp13IjTz3A5dPns626Q65cSHOIgjy2YUZJa?= =?us-ascii?q?OaKAGhX1FpRKVdOlKOU3lVykdFcPNaZZ86tmZ5r6JcvD47aiOaNbpBzjlX5Oud?= =?us-ascii?q?AvyUmM/jdyTuPSmp0Mhfqf21nfDmquvBKaqsny3Lt8S3QSE264knm2H4lXZ6Yp?= =?us-ascii?q?JdhOUznoKMqx3dBkwZvkWnoe+0f6QUIP2MiuPxGVag6l0A=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0C9BACx4Uxbh1lEiWJcHAEBAQQBAQoBA?= =?us-ascii?q?YMfggwog3yIY409CIJ4kmWBeoR3AkKCHxkGBjIWAQIBAQEBAQEBAQETAQEBCA0?= =?us-ascii?q?JCCkjDII1JIJeAwMjBBkBATcBDyUCJgICRRIGAQwGAgEBgxyBaAMVnkCKG257M?= =?us-ascii?q?4JxAQEFgQIBAV+CNAODJwgXdIZggy2BEScMilqCVYgMhE09LowaCYhuhjNqX4Z?= =?us-ascii?q?2CIUkjD+HHQaBfU0jFTuCaYIZDA4JegEOgjyKHAFVHzCOFQEB?= X-IPAS-Result: =?us-ascii?q?A0C9BACx4Uxbh1lEiWJcHAEBAQQBAQoBAYMfggwog3yIY40?= =?us-ascii?q?9CIJ4kmWBeoR3AkKCHxkGBjIWAQIBAQEBAQEBAQETAQEBCA0JCCkjDII1JIJeA?= =?us-ascii?q?wMjBBkBATcBDyUCJgICRRIGAQwGAgEBgxyBaAMVnkCKG257M4JxAQEFgQIBAV+?= =?us-ascii?q?CNAODJwgXdIZggy2BEScMilqCVYgMhE09LowaCYhuhjNqX4Z2CIUkjD+HHQaBf?= =?us-ascii?q?U0jFTuCaYIZDA4JegEOgjyKHAFVHzCOFQEB?= Received: from sonic306-26.consmr.mail.gq1.yahoo.com ([98.137.68.89]) by USFB3CPA01.eemsg.mail.mil with ESMTP; 16 Jul 2018 18:22:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1531765334; bh=d/vmz6vSDSMIVJV6IXMNPvqucG4HukPC64vAOkv0fjM=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From:Subject; b=NaWOealQ/IJKdWn9WCRTOJvNK/gzvaipp1YVBfHuM2KifE2hhH/unrxOL2SqEaarQieZ4IrX5nIXEAuzDiEQ84sl9418bGbeDZd+/TS9O4aHXUFmKJCgxa185hZ1oeEMl5TzyNGPF++XsBK+FuelUzGUOIuRAkBJfbYJGdPm0dcTeT4KUbP+NIpwFirUvm8g0vwCoOzOHnSYp3b3wNS0XRyoELTQXAV5s4aPhsck5qPD8YuQ9gGGdnEldFerY7fru+I69gnP6U2P8yHJsK8/zBCo+wf1WKoF/rZQVBvWund0BWwhfOFug7P49an5JXc2lJ1UJMVvFbLDod/tMAjkhw== X-YMail-OSG: DF3HyoAVM1kpkA5fkPJNdJjMXxRbLi0_9gRHfbs.zuZRHLvAQxlEdfRalhBNUYK 8_O4cULXgEuGKL_I96atGSUBsF_uSOHvYFdrHYcBZU2pDPNQWvug7BRDV.zD8D89iG.hPm8_ACgU 1lRUF9sEkW8e2tKswy7RJ2HFUYsPELx5FQFvg1wfSdkT.j0_yYzJWPeMUWnR9a2lUaA39wnnU1xr aT_9iKhva5y7r.8cvxNygAQIx0p3W28gps7E_4OXiKSU_5bXpGGDTCTpELO1ZBigEi885BNz3DAW NJ_YsAaLe00U1T6usCOj_W.JPYLpkbjdkXnADuHrNG54uG2nQSTwcAOTRI.zp5.xVtoxW7QQeUmf TMNCTP36o6wCBh6Lmihg9jHAYsVUAaW6uqWVqgsWOJa4T4JOaC8L7QZHxK.2KmLIkKOLgObCvxkp TwhxWz7WKBaiCkSnlzu_0piHALgWMjjCtX8KFyRBNpOoMHhLbnEJqvZhkV_H.Mut5A1P0S9vZeWF qWSZeplpUovSRSJxYbfQ6DdoOZQi5KzyhwnLgHsqPX93PuU8LIWsXpunNs_PKgizS7lxVuS9R5sf 0GiL5RBfdXtbzwJdCGm.cdW1wFl36pMhsI8fha5DM97xVDaPO3h85D47Z6Ck8Y1VwVbiQB6fkJ2Z FK8Of2tpFpE4JnZV5_zMS77GPr34CgNGFU3nEydZHYbSSSJRO0pEhIGn2AKkDJgl5Cc_zKGI75DA GsuJeCiGLZpdJFGy6bSlkar7W8lVYihJGVw1hdshzIWDlqkbc8jstJjNpmwWjbgZUNFLuP1G2yCm KAPmvo0UBqAESs3TvS4qU_ioIv7iMMHuhzbswAlZvq241eDLBuLm0WrjYyyPyCnqsRQsXe3rYc0o wbfR8GOocdoUXoK0rfuuOjlHG1PHZDy53sFBk9jLFMeeY9kfwr6mRCDZpUZHCSCOSHRkZTyRq4CV P4kz5upYvxocQvp8ehMYBkna2GmpIlCr.7CMtOpAOLtu8kf9qron6gJQ.XrF2dwOeLss3T4mZpiw N36lr4g-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.gq1.yahoo.com with HTTP; Mon, 16 Jul 2018 18:22:14 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO [192.168.0.100]) ([67.169.65.224]) by smtp431.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 7f32793b97b28b63a55e1d3e9dc6902e; Mon, 16 Jul 2018 18:22:13 +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: <8a325db8-e7eb-9581-2b77-fc987a165df7@schaufler-ca.com> X-EEMSG-check-009: 444-444 From: Casey Schaufler Message-ID: <8d4f0b29-7510-7957-d64a-935518a87e77@schaufler-ca.com> Date: Mon, 16 Jul 2018 11:22:09 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <8a325db8-e7eb-9581-2b77-fc987a165df7@schaufler-ca.com> Content-Language: en-US X-Mailman-Approved-At: Mon, 16 Jul 2018 14:38:37 -0400 Subject: [PATCH v1 01/22] procfs: add smack subdir to attrs 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: "Schaufler, Casey" Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP procfs: add smack subdir to attrs Back in 2007 I made what turned out to be a rather serious mistake in the implementation of the Smack security module. The SELinux module used an interface in /proc to manipulate the security context on processes. Rather than use a similar interface, I used the same interface. The AppArmor team did likewise. Now /proc/.../attr/current will tell you the security "context" of the process, but it will be different depending on the security module you're using. This patch provides a subdirectory in /proc/.../attr for Smack. Smack user space can use the "current" file in this subdirectory and never have to worry about getting SELinux attributes by mistake. Programs that use the old interface will continue to work (or fail, as the case may be) as before. The original implementation is by Kees Cook. Signed-off-by: Casey Schaufler --- Documentation/admin-guide/LSM/index.rst | 13 +++-- fs/proc/base.c | 63 +++++++++++++++++++++---- fs/proc/internal.h | 1 + include/linux/security.h | 15 ++++-- security/security.c | 24 ++++++++-- 5 files changed, 95 insertions(+), 21 deletions(-) diff --git a/Documentation/admin-guide/LSM/index.rst b/Documentation/admin-guide/LSM/index.rst index c980dfe9abf1..9842e21afd4a 100644 --- a/Documentation/admin-guide/LSM/index.rst +++ b/Documentation/admin-guide/LSM/index.rst @@ -17,9 +17,8 @@ MAC extensions, other extensions can be built using the LSM to provide specific changes to system operation when these tweaks are not available in the core functionality of Linux itself. -Without a specific LSM built into the kernel, the default LSM will be the -Linux capabilities system. Most LSMs choose to extend the capabilities -system, building their checks on top of the defined capability hooks. +The Linux capabilities modules will always be included. This may be +followed by any number of "minor" modules and at most one "major" module. For more details on capabilities, see ``capabilities(7)`` in the Linux man-pages project. @@ -30,6 +29,14 @@ order in which checks are made. The capability module will always be first, followed by any "minor" modules (e.g. Yama) and then the one "major" module (e.g. SELinux) if there is one configured. +Process attributes associated with "major" security modules should +be accessed and maintained using the special files in ``/proc/.../attr``. +A security module may maintain a module specific subdirectory there, +named after the module. ``/proc/.../attr/smack`` is provided by the Smack +security module and contains all its special files. The files directly +in ``/proc/.../attr`` remain as legacy interfaces for modules that provide +subdirectories. + .. toctree:: :maxdepth: 1 diff --git a/fs/proc/base.c b/fs/proc/base.c index aaffc0c30216..53af928c13cc 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -140,9 +140,13 @@ struct pid_entry { #define REG(NAME, MODE, fops) \ NOD(NAME, (S_IFREG|(MODE)), NULL, &fops, {}) #define ONE(NAME, MODE, show) \ - NOD(NAME, (S_IFREG|(MODE)), \ + NOD(NAME, (S_IFREG|(MODE)), \ NULL, &proc_single_file_operations, \ { .proc_show = show } ) +#define ATTR(LSM, NAME, MODE) \ + NOD(NAME, (S_IFREG|(MODE)), \ + NULL, &proc_pid_attr_operations, \ + { .lsm = LSM }) /* * Count the number of hardlinks for the pid_entry table, excluding the . @@ -2505,7 +2509,7 @@ static ssize_t proc_pid_attr_read(struct file * file, char __user * buf, if (!task) return -ESRCH; - length = security_getprocattr(task, + length = security_getprocattr(task, PROC_I(inode)->op.lsm, (char*)file->f_path.dentry->d_name.name, &p); put_task_struct(task); @@ -2551,7 +2555,8 @@ static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf, if (length < 0) goto out_free; - length = security_setprocattr(file->f_path.dentry->d_name.name, + length = security_setprocattr(PROC_I(inode)->op.lsm, + file->f_path.dentry->d_name.name, page, count); mutex_unlock(¤t->signal->cred_guard_mutex); out_free: @@ -2568,13 +2573,53 @@ static const struct file_operations proc_pid_attr_operations = { .llseek = generic_file_llseek, }; +#define LSM_DIR_OPS(LSM) \ +static int proc_##LSM##_attr_dir_iterate(struct file *filp, \ + struct dir_context *ctx) \ +{ \ + return proc_pident_readdir(filp, ctx, \ + LSM##_attr_dir_stuff, \ + ARRAY_SIZE(LSM##_attr_dir_stuff)); \ +} \ +\ +static const struct file_operations proc_##LSM##_attr_dir_ops = { \ + .read = generic_read_dir, \ + .iterate = proc_##LSM##_attr_dir_iterate, \ + .llseek = default_llseek, \ +}; \ +\ +static struct dentry *proc_##LSM##_attr_dir_lookup(struct inode *dir, \ + struct dentry *dentry, unsigned int flags) \ +{ \ + return proc_pident_lookup(dir, dentry, \ + LSM##_attr_dir_stuff, \ + ARRAY_SIZE(LSM##_attr_dir_stuff)); \ +} \ +\ +static const struct inode_operations proc_##LSM##_attr_dir_inode_ops = { \ + .lookup = proc_##LSM##_attr_dir_lookup, \ + .getattr = pid_getattr, \ + .setattr = proc_setattr, \ +} + +#ifdef CONFIG_SECURITY_SMACK +static const struct pid_entry smack_attr_dir_stuff[] = { + ATTR("smack", "current", 0666), +}; +LSM_DIR_OPS(smack); +#endif + static const struct pid_entry attr_dir_stuff[] = { - REG("current", S_IRUGO|S_IWUGO, proc_pid_attr_operations), - REG("prev", S_IRUGO, proc_pid_attr_operations), - REG("exec", S_IRUGO|S_IWUGO, proc_pid_attr_operations), - REG("fscreate", S_IRUGO|S_IWUGO, proc_pid_attr_operations), - REG("keycreate", S_IRUGO|S_IWUGO, proc_pid_attr_operations), - REG("sockcreate", S_IRUGO|S_IWUGO, proc_pid_attr_operations), + ATTR(NULL, "current", 0666), + ATTR(NULL, "prev", 0444), + ATTR(NULL, "exec", 0666), + ATTR(NULL, "fscreate", 0666), + ATTR(NULL, "keycreate", 0666), + ATTR(NULL, "sockcreate", 0666), +#ifdef CONFIG_SECURITY_SMACK + DIR("smack", 0555, + proc_smack_attr_dir_inode_ops, proc_smack_attr_dir_ops), +#endif }; static int proc_attr_dir_readdir(struct file *file, struct dir_context *ctx) diff --git a/fs/proc/internal.h b/fs/proc/internal.h index da3dbfa09e79..acda9189d01e 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -84,6 +84,7 @@ union proc_op { int (*proc_show)(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task); + const char *lsm; }; struct proc_inode { diff --git a/include/linux/security.h b/include/linux/security.h index 63030c85ee19..9bdb23799b03 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -368,8 +368,10 @@ int security_sem_semctl(struct kern_ipc_perm *sma, int cmd); int security_sem_semop(struct kern_ipc_perm *sma, struct sembuf *sops, unsigned nsops, int alter); void security_d_instantiate(struct dentry *dentry, struct inode *inode); -int security_getprocattr(struct task_struct *p, char *name, char **value); -int security_setprocattr(const char *name, void *value, size_t size); +int security_getprocattr(struct task_struct *p, const char *lsm, char *name, + char **value); +int security_setprocattr(const char *lsm, const char *name, void *value, + size_t size); int security_netlink_send(struct sock *sk, struct sk_buff *skb); int security_ismaclabel(const char *name); int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); @@ -1113,15 +1115,18 @@ static inline int security_sem_semop(struct kern_ipc_perm *sma, return 0; } -static inline void security_d_instantiate(struct dentry *dentry, struct inode *inode) +static inline void security_d_instantiate(struct dentry *dentry, + struct inode *inode) { } -static inline int security_getprocattr(struct task_struct *p, char *name, char **value) +static inline int security_getprocattr(struct task_struct *p, const char *lsm, + char *name, char **value) { return -EINVAL; } -static inline int security_setprocattr(char *name, void *value, size_t size) +static inline int security_setprocattr(const char *lsm, char *name, + void *value, size_t size) { return -EINVAL; } diff --git a/security/security.c b/security/security.c index 68f46d849abe..2551c4778a09 100644 --- a/security/security.c +++ b/security/security.c @@ -1267,14 +1267,30 @@ void security_d_instantiate(struct dentry *dentry, struct inode *inode) } EXPORT_SYMBOL(security_d_instantiate); -int security_getprocattr(struct task_struct *p, char *name, char **value) +int security_getprocattr(struct task_struct *p, const char *lsm, char *name, + char **value) { - return call_int_hook(getprocattr, -EINVAL, p, name, value); + struct security_hook_list *hp; + + hlist_for_each_entry(hp, &security_hook_heads.getprocattr, list) { + if (lsm != NULL && strcmp(lsm, hp->lsm)) + continue; + return hp->hook.getprocattr(p, name, value); + } + return -EINVAL; } -int security_setprocattr(const char *name, void *value, size_t size) +int security_setprocattr(const char *lsm, const char *name, void *value, + size_t size) { - return call_int_hook(setprocattr, -EINVAL, name, value, size); + struct security_hook_list *hp; + + hlist_for_each_entry(hp, &security_hook_heads.setprocattr, list) { + if (lsm != NULL && strcmp(lsm, hp->lsm)) + continue; + return hp->hook.setprocattr(name, value, size); + } + return -EINVAL; } int security_netlink_send(struct sock *sk, struct sk_buff *skb)