From patchwork Tue Oct 17 13:58:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Haines X-Patchwork-Id: 10012225 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 B826260235 for ; Tue, 17 Oct 2017 14:47:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B95E228936 for ; Tue, 17 Oct 2017 14:47:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC75128939; Tue, 17 Oct 2017 14:47: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=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID 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 8DDF028936 for ; Tue, 17 Oct 2017 14:47:41 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.43,391,1503360000"; d="scan'208";a="412339800" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.2]) by ucol19pa12.eemsg.mail.mil with ESMTP/TLS/AES256-SHA; 17 Oct 2017 14:47:00 +0000 X-IronPort-AV: E=Sophos;i="5.43,391,1503360000"; d="scan'208";a="4819220" IronPort-PHdr: =?us-ascii?q?9a23=3A8USSzx9Z+3BB/P9uRHKM819IXTAuvvDOBiVQ1KB6?= =?us-ascii?q?2u4WIJqq85mqBkHD//Il1AaPAd2DrasYwLqO+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZLebxlUiDanfL9/Ixq6oAbNusILnYZsN6E9xwfTrHBVYe?= =?us-ascii?q?pW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbf?= =?us-ascii?q?VwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8qlkSAXsiC?= =?us-ascii?q?waKTA39m/ZgdF0gK5CvR6tuxlzzojJa4+XKfV+ZLvQc9MES2RPXchfUDFPApu+?= =?us-ascii?q?YocSAecOI/1YopLhq1cStxayGROhCP/zxjJOm3T43bc60+MkEQzewAIgHs4BsH?= =?us-ascii?q?TOo9XvKagZTOK7w7PJzTXFcfxWwir25Y/SchAgvf6MXah/cdDMxkY3CwzKllWQ?= =?us-ascii?q?ppbkPzOTyOsNqHOW4PF8VeKujW4ntx9+oiKpxsgylonFnJ4aylfB9Shgxos+ON?= =?us-ascii?q?O2SEl+YdG+EZtQsTmXOJdsTcM6WW5noyI6xaMctZ69YicK1JIqzAPcZfyfa4WE?= =?us-ascii?q?/x3uWemLLTp4mX5pYqyzihms/US61+HwTsq53VdQoiZYnNTBuWoB2hzd58SdV/?= =?us-ascii?q?dw/1mt1DCS3A7J8O5EO1o7la/DJp4kxb4/i4QcvFzYHi/zhEX2lKiWdlg4+uSw?= =?us-ascii?q?6+TofLHmppiEOo9okA7+KKUumtGkAegiLggPX3SU+eS71LH5+032XK5KgeEsnq?= =?us-ascii?q?ncsZDaIdwXpq+/AwBLzoYu8wuzAjip3dgCnXQLMUhJdAyIgoT3IV3CPej0DfKl?= =?us-ascii?q?jFStlDdryerGPrrkApjVNXjMjrPhfbd7605Bxws/1MtQ55VJCrEHPP38RFTxuc?= =?us-ascii?q?fEDh45LwO0w+HnBM971oMFQ22DGKCZMKTMsVOQ/OIgP/GMZJMJuDb6M/Ul5fnu?= =?us-ascii?q?jXkjll8Bfammx50XZWu6HvRhJUWZZGDjgswdEWgUpAo+V/bmiFqYUT5cf3yyRb?= =?us-ascii?q?4z5iknCIK6CofOXoKtgL6b0yinHZ1WfWdGClaNEXf2bIiEVfMMaD+dI8B6jzwE?= =?us-ascii?q?U6ShS5I72RGprg/6xKJtLvDI9S0AqZLjyN916vXLlR4s7jN7EcKd02CRT2FzhW?= =?us-ascii?q?4IRiE5075hrkBnzVeDy6d4ieRCFdNP//NJThs6NZnEwuNnDNDyXATBccqXR1ai?= =?us-ascii?q?Q9WrGis+Qcwrw98JeUp9HM+ijh/b1SqwH7AVj6CLBIAz8q/EwnfxO9xyy2zd2a?= =?us-ascii?q?Y9iFkmR9dAOne9hq5j7QTTAZDGk1mBnaawaascxDLN9HuEzWeWvUFYVhJwXrvB?= =?us-ascii?q?XX8BY0vZs8j55lnCTrK1DrQnKhVOyciHKqRQa93piU5JRPDsOdjEZGKxgWiwDw?= =?us-ascii?q?6SxryQdIrqZ3kd3CLFBUkEkgET+nCGOBM7Bielum7eDTpuGUjpY0z26+l+q3K7?= =?us-ascii?q?TlEqwA2QaU1uyaa18AYPhfOAU/MTwq4EuCA5pjR6HVa929fWBMSapwd6cqVTf8?= =?us-ascii?q?4y4FBd1W3Drwx9JJugL6J8iVECbwR7pUTu1w94Co9Yi8glsGsqzBZuKaKfyF5B?= =?us-ascii?q?eSmY0or2OrLLK2ny5wuia6vO2lHfydqW4akO6O8ip1XkpgGpGVIo82973NlNz3?= =?us-ascii?q?uc+pLKARIRUZ3rUUY38AV6qqrZYiYn5IPU0mBsPbOzsj/Y1NIjHPElxQq4f9dD?= =?us-ascii?q?LKOEExf/HNcHCMi0KewlhUKpYwkeM+9O8a44JcSmd+GJ2KSzJuZvgCqmjXhb4I?= =?us-ascii?q?B6yk+D6zBzSurW0JYe3/GZ3gyHWiznjFi9s8D4h4ZEZS0THmWl0yTkApBeZrFq?= =?us-ascii?q?d4YRFWiuO9G3xsl5h5P1QX5X6UOsCkgJ2M+sdhuedVr90hNM1U4Pu3yohTO4zy?= =?us-ascii?q?BokzEutqefxyLOw/7ldBocJm5GX3JijVHrIYm6itAVRk6oYxIvlBS7+Ubw37Jb?= =?us-ascii?q?q7hnL2nPXUdIeDD7Lm94Xau0qrqNfdRP6IgzvCVJTuu8e0uVSqP4oxcA1CPjBW?= =?us-ascii?q?Rezighdz62opX5gwB6iGWFIXZvsXXWZMBwyg3b5NHHWfFR2T8GSzVihjnMGliw?= =?us-ascii?q?Jd+p8suIl53bqOCxS3qhVoFPcSns1Y6Aqiq76nF2AR24hfC/gMHoEQg90S/92N?= =?us-ascii?q?lnTiHIrBf6YobxzaS6Nvhrfk5yBF/z88B6AJ1xkpMshJEM3ngXnpGV/XsckWfv?= =?us-ascii?q?KNlbwrzxbH4MRT4N3t7U7xPo2FZ7LnKIwYL5V2mSwtB7a9m8fGwWxjo379pWB6?= =?us-ascii?q?eM8LxEgSx1r0KirQLWZfh9mikSyeEy534djeAEoxEtzjiBDbAJB0VYOjbslxuQ?= =?us-ascii?q?5dCksKpXfHqvcaS31EdmntCuEreCohpHVXb6ZJgiGzRw7sNhP1LQynHz7ZvkeN?= =?us-ascii?q?bIZ9IJqhKUiwvAj/RSKJ8pjvoFnzdnOWbjsn090eE7iwBu0o+gvIWcNmVt57y2?= =?us-ascii?q?AgRDNjHvfMMT/SztjbxCkcmI0YCvGY9hGjoVU5fyS/KnDi4Sv+z9NwmSCD08tm?= =?us-ascii?q?ubGb3HEA+B7kdpsmnCE46tN36KJHkV19NiSweBJEZHmgAbQC06noIlFgCt3MHh?= =?us-ascii?q?aF125i0V5lPjthRMy/5oNhnmXmfRvgiobC04SJ+FLBpZ9gtC/VvaMdSC7uJvGC?= =?us-ascii?q?FV5p6hrQyJKmOFfAlICGYJWkKKB1/9Irmu+dnA8++dBuWgNffOZ6uBqfBGXfeS?= =?us-ascii?q?2Z2vypdm/yqLNsiXMHltFfs72lZEXXB8AMnZlSsARDEQlyLXdcGbvA28+ip1rs?= =?us-ascii?q?+h7PvrRBjj5YyVC7tdKd9v4Qy5gb+fN+6MgyZ0MSxY2okCxHPSzbgQxloSiyZu?= =?us-ascii?q?djS2C7sPqSvNQLjXmq9NAB4RczlzO9dQ76IgwglNPtbWit3v1rFmk/E1EE1KVV?= =?us-ascii?q?r9msGufswHOHuyO0/CBEqRM7SGPzLLydntYaygUb1QkPlUtxqotDadCU/sJCyD?= =?us-ascii?q?lyHyWhChMOFMljqbPABQuIG8dBZiE27jQ87nahKhNN97lzo2wac7hnnSL24TLS?= =?us-ascii?q?B8c19Rrr2X9S5Xme5wF2tF7npkNumEhz2Z4/PDKpkIrfRnGD90mPxe4HQ7zbtV?= =?us-ascii?q?8S5FSedplyrStN5uvkqmnvOByzV9TBpOsTFLhISRsUVlI6XZ+YFKWWzY8xIV8W?= =?us-ascii?q?WQFxMKqsNjCt3uv6BQzsbAlLnoJThY7d3U58wcC9LTKMKdP3orKQDpFyLMDAsZ?= =?us-ascii?q?UT6rMnnSiFdckPGd8X2VqIM3pYXyl5UVS79UTlo1GukdCkR/E9wIOI13US88kb?= =?us-ascii?q?6HkM4I4mKzowPeRMpAoJDISOmfAfL3KDmHi7lEYgEHwbL8LYsIMY361FZual5g?= =?us-ascii?q?nITFA0DQR8xCojV9bg8op0VA6GR+Tmo2207/cAOt534SGuCynhEtkAt+Zvoi9D?= =?us-ascii?q?T37lgrIVrKoTc/n1MqmdX5mzyRdiD+LLuoV4FMFyX0r1QxMo/8Qwttaw29g1Zr?= =?us-ascii?q?NDPfSrJSiLtgbnxrhxXauZtUGv5cTLdIYBkOyvGLf/8oy0hTqj27xU9b4uvIEY?= =?us-ascii?q?FimxUxcZGytX1AwR5sbN4uKKPLJapJ1EVfhqWAvi+wzOA+3g8fK1wL8GyMZC4C?= =?us-ascii?q?oFYIOaU+Jyq04uxs7hSPlCZZd2gSVvolv+lq+1gnNOSa1SLg1LBCKluvOOODMq?= =?us-ascii?q?OZoWnAldKIQ18q0EMHiVVF96Bs0cg/a0qUS1wvzLyJGhQNMsrCMx9ab8xT9XjU?= =?us-ascii?q?ZiuOvuPNwY9vM4W6DODoQveEtLwIjUK8AAYpA4MM49waHpay1EHYLMHnLKMKyB?= =?us-ascii?q?g2+AvrI1CFA+hTdxKQjDcLuce/w4Fr3YNFPDESHX19MTmr5rbQvgIlneaMXNIx?= =?us-ascii?q?YnccQosIK2k7WNOklC5DvnRBDT630uQDxAiE8TD8ujzaDCPgYNp7ePeUeRRsBc?= =?us-ascii?q?mq+TU+9qi2jkLX8pXeJmzhKNtiu9/O5vkBqJqdDfNbU6V9uV/Gm4ZEX3yqT3LP?= =?us-ascii?q?EdmtKpj/cYkjd9r0CmqhX1y+jDI0QcHxPMqtLqeWgAHoQ5pUv5eB3Dw5M8+yCC?= =?us-ascii?q?0eEQ9qp+4f/KJ8eREDY50jbBHyswQ+NrCwLxmA3dWrQ2etLzxWT/9FwuihfLNX?= =?us-ascii?q?zjAjbumjxHsuU5E21e+3/lARRJsSlBHR2e6jZ5VCUSj0AnFSYBvApSwimmd7K+?= =?us-ascii?q?ky3PkwwAnTsVYGKTCKdPZlaGtev9EzHVmSO2l5CnIkR1+AiorO+hSs37YT/yRB?= =?us-ascii?q?n9ZU1ulFsGPmsJHGfTyiQrCmp5LOviU8atgmprF+Ppb4Isuarp/emCLQTIXIuA?= =?us-ascii?q?2fTCG6D+ZamsRXIC9AXPZIm3sqNtAdtIVd7koxUsM+J71RB6k2urCldyZrDS4I?= =?us-ascii?q?wS8eTYOA0yQIgv2g1LvCiheQbJMiPQQesJpYmNsdVDV5bzgCpK+5TYrWiXGLSm?= =?us-ascii?q?wKIAcV4gRM4AMAloBwfuD57orHVoVMyztMr/JyTCTLCoFi90HnRWGOnVj4VPKh?= =?us-ascii?q?nvSn3A5I0P3s0tgbWBt+CUdHxOZbjUooJ69pJKYOpILKtSWIdUzitmL31OSmPE?= =?us-ascii?q?VRydHTd1DgFIrFsm78XTcG+XwaQo9PzH/fGI8Xkwp+b6Yrv0tDL5y8ekb5/Dwk?= =?us-ascii?q?3IVpH7+3VcyxwFYlt3kGTT+wE9VdE+FmrE7XWDp9bp+xspXlJpNSTnVT+JCGql?= =?us-ascii?q?dZkURtMzKixpZGLcFC/CIMViBVoTqBpNuyVNFD2chuAp8QJdd/vmzwGL9YNJiU?= =?us-ascii?q?uHI6oLrvxWHF+zokqle12C2zG7OkT+Je52AeGh8mJ36EpUkrEuQh6Xrd/U7Vsl?= =?us-ascii?q?Bs4ehbAqaAjV9rrDZ6BJBOCS5D1Wq5IFRrUHlGr+JaJbzXc8xbXfY/fgKgNAIl?= =?us-ascii?q?FfE4xUyJ4V97kmrjbyx0qARa5zjXXxMoWikNnrfthToep9m8Nj8UV51EcTcsYz?= =?us-ascii?q?rLJg+AhS9XuxNfZF1wVJACHtZJ4bcb0pVI/sDaU0ajNTkFXAB+NgI/yfdfj1BM?= =?us-ascii?q?v1iYeS/HEQqlbvLPshppfciPssKmMPP58xpZhY/9tuA36bkDTWW8mQKxWdDes5?= =?us-ascii?q?P8ttqSu0uWb6f4L/ezbmLdTDXXlhCwgqokD4PW8CfNNgpbN4N6xmAgYZT7Dm7L?= =?us-ascii?q?JxtGLboBJ0VHTaB6dclGoudCas94YqYG57FiCQ+cSxPyHIyvsONGIUzNRTTfKC?= =?us-ascii?q?WB9vKwoZ7J4bzaU+jgadSGx2zbTKJvIpd69T77Fq/v0YBE/kr23uli9l9mSVfc?= =?us-ascii?q?KS+Mt9LhKR0X5Mm5akTtpIUpEi3MDJd2jnXt2llKd9ALTC2y7JQY1JRZ5W7ySe?= =?us-ascii?q?1iyEjzt/ZS971+5okp+L1pzNq0JaPOKfRbrUBnAwKbBgNx9pk3B2h/XW9RaPcL?= =?us-ascii?q?KPjNZaQZkdzuq+fvGqwV8hKV/eJZacHAJ07chMayES2cRgZCnAcarj4WNA2c2O?= =?us-ascii?q?CZm6VsU8aqufD52l4x41i5NhMGw61t5YaA+qqMuuDXagDcwqUaVafxR8P8tLIs?= =?us-ascii?q?t1mV5f0+m74EYnZ1bBG/EOgBSs4dwX/tzaYuzS83EsPDGbfg9ORCV3I/kDLggY?= =?us-ascii?q?pyH04KGvMOALqE4Zhennoim+PHLNEWdbpCmmmXHx6+DrAC0WKr6zeQIGR9hxHO?= =?us-ascii?q?1BfwQX+87FDotiJ4RCrMwM3lkkVLSrm2C0BSXzCqOU9jqj+POhTntMbvs6Qv8E?= =?us-ascii?q?42KnDktM6KlGa5PLNXBMj/KdyHLCk6ul0YkZoxRsa11oADA9q9J9UR/29iYfvC?= =?us-ascii?q?8W+rlDVBo6hfjYrE/s6V4unXHWWnj6CCqbWNxTVYx2M9vV4h6tGvKOvO59yMQ/?= =?us-ascii?q?SnzWoRSTlwuxfZVR6vtrPbt0wUOVCM0ErTmYwLP8tW0mMk2Uz9/+gsXs4z+xtC?= =?us-ascii?q?GYraYPMCvz/zMiPuwVmDe9I3SjWe0zxPE13uEFl4A6Y913jyvMLIiXfQ40cnRp?= =?us-ascii?q?R0d0H8mRN3CJg3Jlw351gK2CoDFhINZgqBALGvH0TlIpMOVVIfZhSfwLi6ZqA3?= =?us-ascii?q?0FVrwry1+O/ccex8BqQKNvZHjQ6ChUNbFYwSsa0fRrJ8ZlBc+bXPpgf4F4joQ/?= =?us-ascii?q?jmlHQ3Nf2vQcBW68MZuGU44ga5WRWg7Y1P77EBiJCHbqREe4TDvNhg70d74j4C?= =?us-ascii?q?bjBNgAJhgBO9S+8cov7s78PGv5qp5eauVbotSP8M9xcuHWR+koH8gFY9rtHLz+?= =?us-ascii?q?1cUJHaiZzj8ABRJH6HoIna3ANmKeUQN4KrfK1t93EGJygCOX0OPcCZa+Qn4yN3?= =?us-ascii?q?NjXc+UBCCNsWZdwEJMrNhRxUikrxVbFc6MXbHEOYC4B0d8wv9Gr41jQ18Zo6Uu?= =?us-ascii?q?b95z67PpTf4E9XP/JDlipgjtTCq/YJwfDKEigY/WGZawRpwiOF05SNDffw8vmL?= =?us-ascii?q?yNHQTVwGBTQ6U4ZaJDqF4gynXfG4lJDmXwKb8MPzh4g+dE2ITHyrgKsFqrpMEf?= =?us-ascii?q?JHiijj0ThRCpv1h+mMv9Sx52VZsFxHEIBu7RzKA6hfMZB7Ng7+lsa1XER8ATH/?= =?us-ascii?q?eM7MfBo0pOWW3vsM4/l5N0bmZ48bJRIEy7Tg5XVJTgtuTKP2sUuYXOIQYttmU/?= =?us-ascii?q?DErnFO5IJ+Kq8PIkKSpJj3oTdJslw2BhEmaKMopDxAakbOhBFVW7rzuLMYiwsc?= =?us-ascii?q?T8R2uUlXFGK0JWIx+jvHVaNOjKWLD/wV6DqTRLQUU0p0KiN+Xw+12JJ2drurg/?= =?us-ascii?q?9HvG1GnidmrfkkyTNmQgWzuTH2q6ILxz0g5KmytC8dtnxdUuWejyDIBE1MzPQO?= =?us-ascii?q?iqcdBWjt6Vi4YHQYd4vy579nJcX8+oU75XQwfwkjdTUcXeu8EyHwk7+IAouXvd?= =?us-ascii?q?JehB6MuN3Obbi3LSgTKrQy1wnuR3180gjChhZn7nEHQjK67N8rPI+9I9oqxjK0?= =?us-ascii?q?GWjHc1YB+r9JsMr0tVMQUOs2aE9uwGZ93ciDXCENQtLAG3othAg+dWpEaI5D6Q?= =?us-ascii?q?MdF6QwhzaIv6pG/gITYDrPEISq4IrQncDO2XYjS9dm3GTWqbOZhpkyyn1qh8t0?= =?us-ascii?q?7jKSuHQVb+HXSNFjAn7v1opE0uz+Y/KtsvwbSIt41ruuTeUOMs65+Wu5wJ9qQF?= =?us-ascii?q?OqxqwCH1qlN+8O3rnbXDmhSW2ZQeSEbXOBnjc4Mk734BmnMEc3aMNUoEMnNevC?= =?us-ascii?q?nJFcnRX7UbxoXiWQuUPbzGs7POIUbwI2ooandBAUQ+MKYuicJPQuwOcgB1cWaH?= =?us-ascii?q?/JByR2AfessVGxhIh7J2lg4ULibOTq9gDpLsCfGgEAEYHAtZ5x5f26SX6dOX96?= =?us-ascii?q?0hJ9IlN49+HBGFQtruVcaYqencDMh9Rn1u4Ib/NtMSw7ut4OlYNv8I2U0MaRcR?= =?us-ascii?q?HN1Zb/PtDVreKeA/3Y1UgqfXtaUrUBawPv+4o6JsI5W6HUHbZBphQTG6w6QJ0n?= =?us-ascii?q?N2fs+6B4Kwx9chLRZLuqmMnluPqLaYFPqn/V8F0wNiHctAMHyvOvUAx7YIqmh3?= =?us-ascii?q?LoIJA/XjhBtcFiCgN6HItTHMMNtw+nDISIl6G7it+x/UR6tvQUsarxDPDFytC5?= =?us-ascii?q?34R3X5hH6k2HJjHRBLNkgk59lOS9nu/A0oXtCcPlYd4EVvJ0Qm3CarDdBYi/Nz?= =?us-ascii?q?SOOt78e05B7r6c37J5UgmLaCD/QaWGqDWuNO947kUj1ox4YO3TwSQv77He39vy?= =?us-ascii?q?fXtbpia4rXOSMptQ9lnKCvLfXx5OTvqF6mllF7UNbYTo7OcOLcAiwN+E7glo4j?= =?us-ascii?q?RC1deKLqmio0LXxEJ0a4jbLEro2iY+X4kGOhK/PlUwgTyRlnOIGnlYL865OeFx?= =?us-ascii?q?kd2VCVrr/EA3lmYzIiZHF3bkSMm5J2cWwYS9aReM+QYNCMwM26azeEglpuipQv?= =?us-ascii?q?VwEotKlP/st7gdl9ttbSbVS4wSOyDWMa8zJTdaE//OuEltZxkIrrw4cpk6aILI?= =?us-ascii?q?I04dNkqEjyTowljsy0rxIuat36aAOipe0nxGyb/emWxWpgK5sOyVtcbUULnYap?= =?us-ascii?q?ztdPTOMSw5WyucSCh0GkGsrwT388EYteaVdD9M6msfZTifXUtK/q0=3D?= X-IPAS-Result: =?us-ascii?q?A2BVBACAF+ZZ/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgwg?= =?us-ascii?q?pA4FSJ48NjkOYO4IAJooRQxQBAQEBAQEBAQEBAWoogjgkgkkCJBkBOAECAwkCB?= =?us-ascii?q?TIRCAMBWhIFiEiBNwEDFQMBrCo6gwkFgQKEYIJvBAiDLoE2UYM7hgmBYoEEhTU?= =?us-ascii?q?FoUuUXpMllyk2IYFZNCElXoJkggxBDxyBaHWKfgEBAQ?= Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 17 Oct 2017 14:45:45 +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 v9HEjbSJ028791; Tue, 17 Oct 2017 10:45:39 -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 v9HEKRCn045466 for ; Tue, 17 Oct 2017 10:20:27 -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 v9HEKQ13016488; Tue, 17 Oct 2017 10:20:26 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A1CRAgAfEeZZf3IVGNZdHAEBBAEBCgEBg?= =?us-ascii?q?zMpgVUnjw2OQ5g5ggQPhTaEbUMUAQIBAQEBAQEBEwEBCxaGKBkBOAEVMncSiE2?= =?us-ascii?q?BNwEDFQMBrBo6gwkFgQKEYIJJASUECIMugTZRgzuGCYFigQSFNQWhS5RekyWXK?= =?us-ascii?q?TaBejQhJV6CZIIMQQ8cgWh1inkBAQE?= X-IPAS-Result: =?us-ascii?q?A1CRAgAfEeZZf3IVGNZdHAEBBAEBCgEBgzMpgVUnjw2OQ5g?= =?us-ascii?q?5ggQPhTaEbUMUAQIBAQEBAQEBEwEBCxaGKBkBOAEVMncSiE2BNwEDFQMBrBo6g?= =?us-ascii?q?wkFgQKEYIJJASUECIMugTZRgzuGCYFigQSFNQWhS5RekyWXKTaBejQhJV6CZII?= =?us-ascii?q?MQQ8cgWh1inkBAQE?= X-IronPort-AV: E=Sophos;i="5.43,391,1503374400"; d="scan'208";a="86234" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 17 Oct 2017 10:20:13 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3Aj/2bDhP/+J0HDKeviG4l6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0I/v7rarrMEGX3/hxlliBBdydt6oczbOK+P+8EUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQpFiCahbb9oMRm7ogrdu8sZjIB/Nqs/1xzFr2dSde?= =?us-ascii?q?9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLY?= =?us-ascii?q?TQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVRnlgz?= =?us-ascii?q?oFOTEk6mHaktF+gqJFrhyvpBJxxJXZbJ2JOPdkYq/QZ88WSXZHU81MVyJBGIS8?= =?us-ascii?q?b44XAuQdPOZXs4n9qEEUrRSjGAKiBvngyj5OhnDoxq0xzuMsERvH3AM8H9IBqm?= =?us-ascii?q?7Uo8jtO6gOSe+1zLPHzTTFb/xIwjfw85PHcgwgofGKQbJ/b9DRyU8xGAPZlFmf?= =?us-ascii?q?tYvlPzaM2+kLrmOV4e1gVee1hG4mrQF8uiSgyd00iobTnY0Vzk7L+T9/wIkrOd?= =?us-ascii?q?21TlNwb928EJZIqS2WKoR7Ttk8T2xnoio21KAKtYSmcCQXx5kr3x3SZv2df4SV?= =?us-ascii?q?7B/uW/ydLDd2iX5/Zb6yhgi+/E69wePmTMa0ykxFri9dn9nMqH8N0xvT59CJRf?= =?us-ascii?q?V//Umv3yuD2gTJ5OxYPEw5lLDXJIA/zb41jZoTvl7PHirsl0X3iK+abEAk+ums?= =?us-ascii?q?6+j/Y7XmoIGTN5Nshw3gL6gjldazDfo3PwQUQWSX5P6w2KD+8UD2WLlKi+c5kq?= =?us-ascii?q?jdsJDUP8Qboau5DhdP0oYi9xm/Dy2p0M4FknYfMF1KYBKHgJLoO1HIPv/4Fuyy?= =?us-ascii?q?jE+wkDdqwfDGIqPuAo/LLnfdjLftZ6py60lZyAYr19BQ+4pUCq0dIPL0QkLxr8?= =?us-ascii?q?HXDgQiPgyow+foFNV91oQEVWKJGa+WKrnesVCP5uIxO+OMfpMauC7hK/g54P7j?= =?us-ascii?q?lWQ5lkEZfamo25sXdX+5E+96I0SZfXXsgtABHX0MvgolVuPmklKCUTlNZyX6Y6?= =?us-ascii?q?Vp/Tw/CYS7Ha/fV4uth/qHxy79EZpIIihAB0yAHGnAaYqJQbEPZTiUL8snlSYL?= =?us-ascii?q?EfClSok8xVS1vxPi46RoI/CS+SACs5/nkt9v6KmbkRA06CwxFMmWznuMU3Axm2?= =?us-ascii?q?QEWjs79L5wrFY7yVqZ16V8xftCGo99/fRMBz07Pp7V1eAyK9nzXA/aNoOTSV2m?= =?us-ascii?q?S8+qNjoGTtswxdIVS0xhGtO+gwrF0jbsCLgQwe/YTKco+77RiiCib/12zGzLgf?= =?us-ascii?q?Es?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CRAgBmEOZZf3IVGNZdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgwgpgVUnjw2OQ5g5ggQPhTaEbUMUAQEBAQEBAQEBAQESAQELFl2?= =?us-ascii?q?COCKCcRkBOAEVMncSiE2BNwEDFQMBrB46gwkFgQKEYIJJASUECIMugTZRgzuGC?= =?us-ascii?q?YFigQSCFwyDEgWhS5RekyWXKTaBejQhJV6CZIIMQQ8cgWh1inkBAQE?= X-IPAS-Result: =?us-ascii?q?A0CRAgBmEOZZf3IVGNZdHAEBBAEBCgEBFwEBBAEBCgEBgwg?= =?us-ascii?q?pgVUnjw2OQ5g5ggQPhTaEbUMUAQEBAQEBAQEBAQESAQELFl2COCKCcRkBOAEVM?= =?us-ascii?q?ncSiE2BNwEDFQMBrB46gwkFgQKEYIJJASUECIMugTZRgzuGCYFigQSCFwyDEgW?= =?us-ascii?q?hS5RekyWXKTaBejQhJV6CZIIMQQ8cgWh1inkBAQE?= X-IronPort-AV: E=Sophos;i="5.43,391,1503360000"; d="scan'208";a="4817539" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from uhil19pa16.eemsg.mail.mil ([214.24.21.114]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 17 Oct 2017 14:20:05 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;81aa5810-5913-4720-99f8-da70ded44161 Authentication-Results: uhil19pa13.eemsg.mail.mil; dkim=permerror (key too small [TEST]) header.i=@btinternet.com X-EEMSG-check-008: 249673403|UHIL19PA13_EEMSG_MP11.csd.disa.mil X-EEMSG-SBRS: 3.5 X-EEMSG-ORIG-IP: 65.20.0.132 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0CkAQDQDeZZh4QAFEFdg2OBfo80pnyCBB2FKIUwFAMBAQEBAQEBEwEBAQgNCQgoL4VkATgBFTJ3EohNgTcBGASsT4MJBYEChGCCbwQIgy6BNot3gQSFNQWhS5RekyWXKTaBejQhJV6FUIF0i24BAQE X-IPAS-Result: A0CkAQDQDeZZh4QAFEFdg2OBfo80pnyCBB2FKIUwFAMBAQEBAQEBEwEBAQgNCQgoL4VkATgBFTJ3EohNgTcBGASsT4MJBYEChGCCbwQIgy6BNot3gQSFNQWhS5RekyWXKTaBejQhJV6FUIF0i24BAQE Received: from rgout0605.bt.lon5.cpcloud.co.uk (HELO rgout06.bt.lon5.cpcloud.co.uk) ([65.20.0.132]) by uhil19pa13.eemsg.mail.mil with ESMTP; 17 Oct 2017 13:58:20 +0000 X-OWM-Source-IP: 86.134.53.162 (GB) X-OWM-Env-Sender: richard_c_haines@btinternet.com X-Junkmail-Premium-Raw: score=8/50, refid=2.7.2:2017.10.17.134816:17:8.317, ip=, rules=__HAS_FROM, __FRAUD_WEBMAIL_FROM, __TO_MALFORMED_2, __TO_NO_NAME, __HAS_CC_HDR, __MULTIPLE_RCPTS_CC_X2, __CC_NAME, __CC_NAME_DIFF_FROM_ACC, __SUBJ_ALPHA_END, __HAS_MSGID, __SANE_MSGID, __HAS_X_MAILER, __FROM_DOMAIN_IN_ANY_CC1, __ANY_URI, __FRAUD_BODY_WEBMAIL, __URI_NO_WWW, __NO_HTML_TAG_RAW, __MIME_TEXT_P1, __MIME_TEXT_ONLY, __URI_NS, HTML_00_01, HTML_00_10, __FRAUD_WEBMAIL, __FROM_DOMAIN_IN_RCPT, __CC_REAL_NAMES, MULTIPLE_RCPTS, __PHISH_SPEAR_STRUCTURE_1, __MIME_TEXT_P, NO_URI_HTTPS Received: from localhost.localdomain (86.134.53.162) by rgout06.bt.lon5.cpcloud.co.uk (9.0.019.13-1) (authenticated as richard_c_haines@btinternet.com) id 59D6DD110124A63C; Tue, 17 Oct 2017 14:58:14 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=btinternet.com; s=btcpcloud; t=1508248704; bh=rwmckQm4j+AQnRangX6JUeYI1y2ySkqax7/ZNusVqLY=; h=From:To:Cc:Subject:Date:Message-Id:X-Mailer; b=oodT7ITiF4RARCH+ZxIzUbNM4NkOjgyA96pjG32otdl18wfqqSDyn/OEjK2GNBmisWnNEEh9jv/0z4aDMVgVKYzLV+Vy2ETaSfqJFP9nuJdTT+2PU3xPD2KmPhx/1GlxnR7AjcM6oU6KGpVkg1jgp7NM5YpX0YI9/5hwsh9uffM= X-EEMSG-check-009: 444-444 From: Richard Haines To: selinux@tycho.nsa.gov, netdev@vger.kernel.org, linux-sctp@vger.kernel.org, linux-security-module@vger.kernel.org Date: Tue, 17 Oct 2017 14:58:06 +0100 Message-Id: <20171017135806.4244-1-richard_c_haines@btinternet.com> X-Mailer: git-send-email 2.13.6 X-Mailman-Approved-At: Tue, 17 Oct 2017 10:36:38 -0400 Subject: [RFC PATCH 2/5] sctp: Add ip option support 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: marcelo.leitner@gmail.com, nhorman@tuxdriver.com, vyasevich@gmail.com, sds@tycho.nsa.gov Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Add ip option support to allow LSM security modules to utilise CIPSO/IPv4 and CALIPSO/IPv6 services. Signed-off-by: Richard Haines --- include/net/sctp/structs.h | 2 ++ net/sctp/chunk.c | 7 ++++--- net/sctp/ipv6.c | 37 ++++++++++++++++++++++++++++++------- net/sctp/output.c | 3 ++- net/sctp/protocol.c | 36 ++++++++++++++++++++++++++++++++++++ net/sctp/socket.c | 5 ++++- 6 files changed, 78 insertions(+), 12 deletions(-) diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 5ab29af..7767577 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -461,6 +461,7 @@ struct sctp_af { void (*ecn_capable)(struct sock *sk); __u16 net_header_len; int sockaddr_len; + int (*ip_options_len)(struct sock *sk); sa_family_t sa_family; struct list_head list; }; @@ -485,6 +486,7 @@ struct sctp_pf { int (*addr_to_user)(struct sctp_sock *sk, union sctp_addr *addr); void (*to_sk_saddr)(union sctp_addr *, struct sock *sk); void (*to_sk_daddr)(union sctp_addr *, struct sock *sk); + void (*copy_ip_options)(struct sock *sk, struct sock *newsk); struct sctp_af *af; }; diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index 1323d41..e49e240 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c @@ -153,7 +153,6 @@ static void sctp_datamsg_assign(struct sctp_datamsg *msg, struct sctp_chunk *chu chunk->msg = msg; } - /* A data chunk can have a maximum payload of (2^16 - 20). Break * down any such message into smaller chunks. Opportunistically, fragment * the chunks down to the current MTU constraints. We may get refragmented @@ -190,7 +189,10 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, */ max_data = asoc->pathmtu - sctp_sk(asoc->base.sk)->pf->af->net_header_len - - sizeof(struct sctphdr) - sizeof(struct sctp_data_chunk); + sizeof(struct sctphdr) - sizeof(struct sctp_data_chunk) - + sctp_sk(asoc->base.sk)->pf->af-> + ip_options_len(asoc->base.sk); + max_data = SCTP_TRUNC4(max_data); /* If the the peer requested that we authenticate DATA chunks @@ -210,7 +212,6 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc, /* Set first_len and then account for possible bundles on first frag */ first_len = max_data; - /* Check to see if we have a pending SACK and try to let it be bundled * with this message. Do this if we don't have any data queued already. * To check that, look at out_qlen and retransmit list. diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index a4b6ffb..49c9011 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c @@ -423,6 +423,33 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist, rcu_read_unlock(); } +/* Copy over any ip options */ +static void sctp_v6_copy_ip_options(struct sock *sk, struct sock *newsk) +{ + struct ipv6_pinfo *newnp, *np = inet6_sk(sk); + struct ipv6_txoptions *opt; + + newnp = inet6_sk(newsk); + + rcu_read_lock(); + opt = rcu_dereference(np->opt); + if (opt) + opt = ipv6_dup_options(newsk, opt); + RCU_INIT_POINTER(newnp->opt, opt); + rcu_read_unlock(); +} + +/* Account for the IP options */ +static int sctp_v6_ip_options_len(struct sock *sk) +{ + struct ipv6_pinfo *inet6 = inet6_sk(sk); + + if (inet6->opt) + return inet6->opt->opt_flen + inet6->opt->opt_nflen; + else + return 0; +} + /* Initialize a sockaddr_storage from in incoming skb. */ static void sctp_v6_from_skb(union sctp_addr *addr, struct sk_buff *skb, int is_saddr) @@ -662,7 +689,6 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk, struct sock *newsk; struct ipv6_pinfo *newnp, *np = inet6_sk(sk); struct sctp6_sock *newsctp6sk; - struct ipv6_txoptions *opt; newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot, kern); if (!newsk) @@ -685,12 +711,7 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk, newnp->ipv6_ac_list = NULL; newnp->ipv6_fl_list = NULL; - rcu_read_lock(); - opt = rcu_dereference(np->opt); - if (opt) - opt = ipv6_dup_options(newsk, opt); - RCU_INIT_POINTER(newnp->opt, opt); - rcu_read_unlock(); + sctp_v6_copy_ip_options(sk, newsk); /* Initialize sk's sport, dport, rcv_saddr and daddr for getsockname() * and getpeername(). @@ -1033,6 +1054,7 @@ static struct sctp_af sctp_af_inet6 = { .ecn_capable = sctp_v6_ecn_capable, .net_header_len = sizeof(struct ipv6hdr), .sockaddr_len = sizeof(struct sockaddr_in6), + .ip_options_len = sctp_v6_ip_options_len, #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ipv6_setsockopt, .compat_getsockopt = compat_ipv6_getsockopt, @@ -1051,6 +1073,7 @@ static struct sctp_pf sctp_pf_inet6 = { .addr_to_user = sctp_v6_addr_to_user, .to_sk_saddr = sctp_v6_to_sk_saddr, .to_sk_daddr = sctp_v6_to_sk_daddr, + .copy_ip_options = sctp_v6_copy_ip_options, .af = &sctp_af_inet6, }; diff --git a/net/sctp/output.c b/net/sctp/output.c index 9d85049..85bcd5b 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c @@ -151,7 +151,8 @@ void sctp_packet_init(struct sctp_packet *packet, INIT_LIST_HEAD(&packet->chunk_list); if (asoc) { struct sctp_sock *sp = sctp_sk(asoc->base.sk); - overhead = sp->pf->af->net_header_len; + overhead = sp->pf->af->net_header_len + + sp->pf->af->ip_options_len(asoc->base.sk); } else { overhead = sizeof(struct ipv6hdr); } diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 989a900..a9e54ac 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c @@ -237,6 +237,38 @@ int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp, return error; } +/* Copy over any ip options */ +static void sctp_v4_copy_ip_options(struct sock *sk, struct sock *newsk) +{ + struct inet_sock *newinet, *inet = inet_sk(sk); + struct ip_options_rcu *inet_opt, *newopt = NULL; + + newinet = inet_sk(newsk); + + rcu_read_lock(); + inet_opt = rcu_dereference(inet->inet_opt); + if (inet_opt) { + newopt = sock_kmalloc(newsk, sizeof(*inet_opt) + + inet_opt->opt.optlen, GFP_ATOMIC); + if (newopt) + memcpy(newopt, inet_opt, sizeof(*inet_opt) + + inet_opt->opt.optlen); + } + RCU_INIT_POINTER(newinet->inet_opt, newopt); + rcu_read_unlock(); +} + +/* Account for the IP options */ +static int sctp_v4_ip_options_len(struct sock *sk) +{ + struct inet_sock *inet = inet_sk(sk); + + if (inet->inet_opt) + return inet->inet_opt->opt.optlen; + else + return 0; +} + /* Initialize a sctp_addr from in incoming skb. */ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb, int is_saddr) @@ -590,6 +622,8 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk, sctp_copy_sock(newsk, sk, asoc); sock_reset_flag(newsk, SOCK_ZAPPED); + sctp_v4_copy_ip_options(sk, newsk); + newinet = inet_sk(newsk); newinet->inet_daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr; @@ -1008,6 +1042,7 @@ static struct sctp_pf sctp_pf_inet = { .addr_to_user = sctp_v4_addr_to_user, .to_sk_saddr = sctp_v4_to_sk_saddr, .to_sk_daddr = sctp_v4_to_sk_daddr, + .copy_ip_options = sctp_v4_copy_ip_options, .af = &sctp_af_inet }; @@ -1092,6 +1127,7 @@ static struct sctp_af sctp_af_inet = { .ecn_capable = sctp_v4_ecn_capable, .net_header_len = sizeof(struct iphdr), .sockaddr_len = sizeof(struct sockaddr_in), + .ip_options_len = sctp_v4_ip_options_len, #ifdef CONFIG_COMPAT .compat_setsockopt = compat_ip_setsockopt, .compat_getsockopt = compat_ip_getsockopt, diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 8d76086..70355a0 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -3124,6 +3124,7 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned if (asoc) { if (val == 0) { val = asoc->pathmtu; + val -= sp->pf->af->ip_options_len(asoc->base.sk); val -= sp->pf->af->net_header_len; val -= sizeof(struct sctphdr) + sizeof(struct sctp_data_chunk); @@ -4917,9 +4918,11 @@ int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp) sctp_copy_sock(sock->sk, sk, asoc); /* Make peeled-off sockets more like 1-1 accepted sockets. - * Set the daddr and initialize id to something more random + * Set the daddr and initialize id to something more random and also + * copy over any ip options. */ sp->pf->to_sk_daddr(&asoc->peer.primary_addr, sk); + sp->pf->copy_ip_options(sk, sock->sk); /* Populate the fields of the newsk from the oldsk and migrate the * asoc to the newsk.