From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752388AbdGQVNc (ORCPT ); Mon, 17 Jul 2017 17:13:32 -0400 Received: from mail-bn3nam01on0058.outbound.protection.outlook.com ([104.47.33.58]:39086 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752355AbdGQVNV (ORCPT ); Mon, 17 Jul 2017 17:13:21 -0400 Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=amd.com; From: Tom Lendacky To: x86@kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, kvm@vger.kernel.org, kasan-dev@googlegroups.com Cc: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Arnd Bergmann , Jonathan Corbet , Matt Fleming , Konrad Rzeszutek Wilk , Andrey Ryabinin , Ingo Molnar , Borislav Petkov , Andy Lutomirski , "H. Peter Anvin" , Paolo Bonzini , Alexander Potapenko , Thomas Gleixner , Dmitry Vyukov , Rik van Riel , Larry Woodman , Dave Young , Toshimitsu Kani , "Michael S. Tsirkin" , Brijesh Singh Subject: [PATCH v10 36/38] x86/boot: Add early cmdline parsing for options with arguments Date: Mon, 17 Jul 2017 16:10:33 -0500 Message-Id: <36b5f97492a9745dce27682305f990fc20e5cf8a.1500319216.git.thomas.lendacky@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR03CA0008.namprd03.prod.outlook.com (10.168.230.146) To MWHPR12MB1151.namprd12.prod.outlook.com (10.169.204.15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 896e695d-1329-4391-e9f4-08d4cd58a290 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:MWHPR12MB1151; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;3:D7CWjo70MR0B3Bu9BMavV2ym9G63YcuskE9KaFXjZPp+rXVM6VegWYku3c6oAb2bcaHBB33BIROG9TqUmrDn6ACXvNH+4G2WSTn11oNt9aWh8+gxfCa/8wPelZL76zDhF+kDcU6qmAIgcxQwjWct3TPNnnImbbxVsGf6EnGeiZWiaOl3DmG+08xztETnpeRJ3z0jJYvhyefa7YRwmHqHRTA4nMP/XaTIjkWSFgQu9PyTwHcSIhPjziqYDX6rTQ3Pj1dUbxJKOtYpYh8QtjHCxwZtgikjg87ZwR6NUYguZgANy4J+bZ3Mriowh0R/OwouLveWEpSzeWhyxzVa94cpy+VzBLsB09Vr/gkWkWBkIcgqJZyL5waOzdcFBgqV/3IaeJwp/x3M2qV/S1V2gRlOs1xMVEOKhp2R0wUT79Dq+4Mv1cidAElHZB6MqsiVvF9cBRZi4UVT0joyz/oDrFCwtS2COMt3qNun5h2ySQjGodPIhDhzt+DUGzGFwPKI06aUgL+lNieSQnEt9iucFajXr5738eqeB7CWBBrEnk+/+ruererglKQ8a4Irj6/DmHlki+0cXFfOWIB1w7+k+R32XAHsK42Et+9Cp23qoF2GMzQMrCczSPm69V/45woUrX5TZrNpG8gJFNg040S3dbGRproEGElJZX20QgbQkOl4PhuzpZbujhFckKt/KXDZviXA+PzcPa+FPQPtnQvfLuMzIgfr252roKvUawGVeOyotDHXwjy1uKYgVXzf9x2gv+tCsncQZ6y49a8yZjETs5YrnQ== X-MS-TrafficTypeDiagnostic: MWHPR12MB1151: X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;25:PGZMdx4sAcqie8TDplc9OwkeUmCPJN7TEtWenMup5YTA0rWM+aB8FRXmGfTNvG0aKNVsMJBJFJlw+bya6EAJG3wAWL3nSGlALIPhi1g6XQ2brcxv1SxAQMiMGblGnOGQRFsqb1zOx9f1Lu9AZHb+MO7WNIkpUAyNyof+BxmvZkRTjD0pU9P3eEDn73/8nntWJNhCZRWMMRPiZmXARqUw8KY0mQopOwoTtSr/DudtZPQqe7AZR61ado3Ft5UXJLiVrASag6uTjEXDLmqTMi+13UGOXlQuHj1A4DxQI6ijXZbPtdO/7MBEcfDxbT9nHorZySRic+AK1RIAE+rjIfb74q3QIqKMjqtEUoXkxul0Kn00H4q/wl9IpZCO3heSZx9KOkerogmcI7t/HQqDC0e3Hc/Os5sZoWYzJB4fA1l3/Q7YHxRvmg7Fz24kebpnwznzTwlYVGzgPULY8sxFWocB/0c2i8usOzvwnPtmiU7S22mWZDnRj+5abzxs0x7rZ/Kj6RxzDAM8t1g5r8KogrREQRBxY4IeNbfT9xqkwFNI4E0XAVLHwEblvQSkNpq5T0Qh6FS528mufZ4bcdUggrFKmmpxurpM5BJkfLMys0dXmK5WP53EC31DsjNMSrjpY/2Aau7cw7tgZMTi1hgFC5f7IKfGutV46Xl12/v+vr8mFsWrCiHm5u0qlYsFpxJymITdxXLftqQDxshIumnjQrE2M6c94PWCJ2Z0IUXGTa+exZRackYliR0wZT+lag1S6NnFBOpdk9J4wVLvje36O94FqEwG46MLLsogBcTDJhjWEXYFqHEVAYkzZpqaDcMIhiXEY0eqIParZ+268DffKunCdmy3X65p/onSeUclFnfBpPTa0t3DUzKrleNw/h4fF4751iNSJWQPyjMcbnw0/AA7QK7jyAOmapSwwfSak614zTw= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;31:hXPns6jsNRjb+x0qFIir2F483PMnOWl5iQuqIquX+02Jshexf/tiW2A9wbfe232vbY5K0xTZ4iS+FeH/sGoEI2i3qCY6Cb3k57mKukVyBa04qu40rWs4dulxgcIbpM6MwlbUdMUGAwL3Rag72Mb+7yRQ43ug2u6dAVkV3kyahjvJQ0qo1A0tCoDbiZeNin5FWVJ+8Bs2045hY9onQrJ8bMSsa0p1ioEZoPpWj0gxGiP4kCTlKxnAeEfCTyBtlLC045FdKWJhO3MJBA0blI4iSHgAToEFFjp9hAnCnTaFsILC1fZCazQOOjxgePEdkbktzvKfRDn2ZXY90KsHq2KsUshjBTG+x0+izfNFAuTXb0ARsBvJVUsU05qELW5Lkh9t3GX1UtgLh/xcHd31jw8mYQzKd5MG7OZXJgDSvBLu7NX5fTLpuuZUYllk0jMINc2bFy3CZob+jW/1Q7vaUYzEDjzq5GVhKQGhszfGgDQjVPlj2DbsXLsshF3xdZJsC/F8Of379hNfTcVzw30rb2MB/N1rJWM2n5kwruifV0/+O5kfF5lmMRiHjWSmnP3T1HQow2xp3MfAp24CCEQI23IOgPZvsMubzXOjjTohr77zEqEjteQBNDtQZg6PDR7PZOrythqv1KFzAgJIrMnse9gXi7+kGeJlIgNIe1lwY0dY/W8= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;20:jzkh9Kg1ycmlkh+7t+JZ+JDnPELNM3DGoqeSCK+zwuz+SqmdobMLh6fahvJ1weNfTwh7bUPvWrbLAK74/Rmnm167oeqOXH3K8QLyFoKtOM2DwEHOSZ6Lk6ieP3BUKtH9k6+u1u6U9MH16uOGIK8wZPAFFp87J6rHMMtiJ53xO4zkWho1xuoGK9HOca/UuhkBU3dIXk0zQNbvDpxr4el23JjQ4Fn1ICkrImepthvX7hTxWVYcy0GoMB1mZYH7kVGVafyuC+98FHIVcIAE4iVi/yz+o3B1sNypn8oDmaetbM39vbwBH2PcSInJ/FkYHcykEzjMrFcmMcgYBa14Gy5JI/BI6RnhiXHKNFTofYWUECMyTXbgxQAwctmJw8xEUiOFfu+RhDKvPWpp5N9OUb65aBp3wYjqugnnWvNfTCdiz0O7NTwOjcnhGkq/6/kbAyUdGC+JjtkF/TmUZHBFVatPQuT94oWUcvUczTsEdo+5uae4/BDbVJycmZSwVUvbiaoH X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123558100)(20161123555025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:MWHPR12MB1151;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:MWHPR12MB1151; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1151;4:dy5Oyc4Lngi1gXK37DVDryEtlxBlkqyK+dSdsIuKXu?= =?us-ascii?Q?JXdPe7vGOCbA23YdG3YG2x6oA+dWZG2T25ehN78QJEYVjoWRux84rZuUK2ZS?= =?us-ascii?Q?ZiAZOd8KElHEfn3Uk6KrHEJ69jdI7eXEQx2EuHDLsqr6FTUWehck0pzX1rd1?= =?us-ascii?Q?vsitYQY9EBEi8ArFLZQ9/CDq9dtsp0QfrVEvGvkDE6TFRAygd2zX3b1eov9f?= =?us-ascii?Q?8JO0Jm0vk6yDgugWIGtzUs7hhewHnrfOK9Gb7tsVbtFvxWq2sU/WUR7SFsL0?= =?us-ascii?Q?8I4V3RjrQabZRkBYfDDja+5NVt79jCwYPifVWmDHza91LrF/oalQXIOmNp7w?= =?us-ascii?Q?GENWlBIOcgg/Cm5tTfmJBBQn6UXcZda2h2pdK5Egr76pgbfytcNACAXwKg/i?= =?us-ascii?Q?0OKHk0Fy7npXkavrBTj+O23MP3xT0Ko49wE6I1+X5Q4hAJ65U2StlJhnmZoK?= =?us-ascii?Q?l9tPtHF66djRjJimJhJZGeJcmb1DxB/emrwBmMgTcmyZZlygckqCiXAQ7dyQ?= =?us-ascii?Q?LxAIaPodJ6AzCJ+JpOOcBwYT8pIudvx1rA1I+VeDZjqbtEcPEYAReBWFGAke?= =?us-ascii?Q?6tYJgVGr5Hf7PxzLR1CFBopq+pzn3avjtrnoB/t4huKA+2xvWw8+pR31TfXd?= =?us-ascii?Q?Wb7FkaVkYxhZkqXCI8xftUJ9PL30GhMjg5pot0hzhueieZLvqKdCZUsGLMqk?= =?us-ascii?Q?MtmhE678l9DYyTebYyZRoduV3uczapqqhArGpNobn6fPad5NeUFIuvYk4RUX?= =?us-ascii?Q?uwCTDIeIZv2dcYNQemyZ5V4jSXMufc4toP5mNs0Od1KPLmp8kEKjjFnOQGRf?= =?us-ascii?Q?EvOpvmYqiC4UJBkiY0Pef0VLaYjH6AtGVr74s70kmJNa1tVotB8V8BJOwO4K?= =?us-ascii?Q?Pm4ydSDRjitGTrRxMDPODV21YmrRY+GO9dKLCkhBu85nOLdv0AKYVMKTmDWF?= =?us-ascii?Q?JX5x4WKVzVOca1ZY3A0QAzK7K0hI7UUA7oWyVyiQD7QjIDbJUE3Cne9EtZT7?= =?us-ascii?Q?9ye8vUzbWHHufxKquRBaxubk40E9taT0dMB2zQBxbxTC5McQzbOZOzm9SZtp?= =?us-ascii?Q?GUfgq5CngPUNbK/R4VGP8kRtMgf4QvaWXltg1gLGQP9c+oRbvhRfWzc8l7gE?= =?us-ascii?Q?y95bA/n1XfdcHGJVCih/o3TSIgYfkL+8N2U4f6abm+BKd0PUowPxXI54d3/h?= =?us-ascii?Q?ICjv0rtXhN3eTvcmJ/2lTiLeGqvS6Wb4HVr9szu09DLMIcVaP9gKzNsT69Cr?= =?us-ascii?Q?DkWADguL5RGPvt9DxAaU7CbynO4D6jQfMdpaei?= X-Forefront-PRVS: 0371762FE7 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(39410400002)(39850400002)(39840400002)(39860400002)(39400400002)(39450400003)(25786009)(6506006)(33646002)(54906002)(7416002)(76176999)(478600001)(8676002)(50986999)(6486002)(47776003)(5660300001)(189998001)(42186005)(38730400002)(305945005)(72206003)(53416004)(66066001)(50466002)(48376002)(110136004)(118296001)(2950100002)(81166006)(5003940100001)(3846002)(6666003)(36756003)(53936002)(7350300001)(6512007)(2906002)(7736002)(6116002)(86362001)(4326008)(50226002);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR12MB1151;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1151;23:xO2qjdmcAUuoN9tySX+Pi3sGfCChyTp8Ixk4a1OsS?= =?us-ascii?Q?UBB9MDIg4JJptfxyqtTsxpdYf1ngeNyA2WlbTcDtuoaByTLRhmJlE0XUTuEq?= =?us-ascii?Q?DiZ6uQ1QWMndvMwodwkJ1cgZ4WTJibkdwBzeddmwuPw3UQ8Z6UJft/Pj3TLy?= =?us-ascii?Q?I7O92HBftvbUX7Kue7aKEo3/+JtSizE1sylwrBFWkHvfBp8u9Ver2KSf1uwr?= =?us-ascii?Q?Or43paABAuWy9ZHZS+ShBUiZDXSJgemBon0cK1i7PKTTWa2N7BIO6wx8KQxi?= =?us-ascii?Q?AmUXovzpjUW8NLtgblRTuvjIkZWs1MRn584nwtJq5lTQYD4pVsFtn7fqhVVm?= =?us-ascii?Q?V/xXbbRZDKLyyDEtrw7bp6pQlyNm6/hAgWO3mYKTQI9WlmLfmOz9udTnAl7e?= =?us-ascii?Q?IVVUeaVPE2D1TKe3RLyoDglWNDnE+YZJnfdrPzBYiCTTNjUDxoIEYkZSeyiE?= =?us-ascii?Q?N2SJN7pL/k4sfRz8IFlcNYxDJGaOK09AAnUHL7C8ZTql62MtDPDVx0busq8B?= =?us-ascii?Q?Mhhim4uRcR9pvlsrAQqN0o7YQed3+s6o9aEu/ETjMnlQnhgHVh63h8WJLf/Q?= =?us-ascii?Q?7NcrrlHIbfk1nwExIQz0oBS9PumILTde7kkzQBTHTV0Rd3suJ/4Bpkfh95OB?= =?us-ascii?Q?OIAOVfRrgXKZwRl4yI3gzlMkSMg3rvp5sMSkzrFW2ghz3lUcaDbiwhSdxzYZ?= =?us-ascii?Q?t17l94cul2ld0vNrjlPoQPwGaChgk2rF8B6zwBWAsIY2XYRMXuAJZP5TMEKj?= =?us-ascii?Q?9a6AoBb40iX1jS8nmLN9J5/tHsP+OoY7o5LJWveUOXo8GQ8HDzw+LcalcS7+?= =?us-ascii?Q?ykYAol0aeNHV8l8BkyGqDyB8/Z8pCepRqIv78jSDnahZhjOONASEpueFMx5n?= =?us-ascii?Q?jWbPv9KLsLnfNd6YHfb4laGaFuiOAOsk5mkAlRyJWG/Md2JAfbjqYvIc+oli?= =?us-ascii?Q?XWccOd+k2c59BhB4BftDPh1b00rUyewJ1BcJvL7+ZGf7v3ttJ0A+nSYQW/lq?= =?us-ascii?Q?INHx0y/oLmVFqhcULytDfqOHaN0iEV01Tl3mNULmGJ7a+qqSeArogqwIbwUw?= =?us-ascii?Q?Ylmbtk4T6luse4FV+zEjDK+Zj8ZU2dSWJOJMsP8McL/P6A/eIEvunRpkWOQn?= =?us-ascii?Q?tVxTuvO8feHlOtilkoGG/CzDRyAZ/hvqQNRVmheQKVgt4C7gfOJYmZRCKyUU?= =?us-ascii?Q?vIg1tXaKbXe1qg=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1151;6:H/b8YrBcvWASFv+1KqHWjyZIurv2gVavPDEMpIF51F?= =?us-ascii?Q?d/eZiLeCrhnBXxcMRUOkh9cLfTkcC/WQj/l3z61j82j63sxdgr33tmGd+8jP?= =?us-ascii?Q?wlbEsxDBc0Gzs6LEsxYexIJIUlpOFS9JN7cNcJWchcI4LmldXpYjK2I0uODi?= =?us-ascii?Q?cg9HKsaY0kCYN1hTgGs+YBsm8FnDRnff1TwpFGVbCxi/rrUOYSg451JbILwB?= =?us-ascii?Q?q8nf7yslw99kV4rxrrYvEzKU+0Pwi2cOwh+GPxg2kTQzyUIMtrmJe0FpLZlj?= =?us-ascii?Q?wFcsEZj3AvBUlmn6HwOrettBUHyvvmhOse36saZu9ttpvrRO9so3Mfd8u+Vt?= =?us-ascii?Q?IC7ImGwSf2tVGj8w2m5s3r4HDHbzpjn70bAYZ5Tdx+YK5Kgzu7BIkmtpKZ8t?= =?us-ascii?Q?tXjetrgskd6jnANyKuRWblM0V1dPmzibNUyl4lnUpsgVa+UXd1M1femUMX+h?= =?us-ascii?Q?mcNLrrQ2lzHV5BAYy+vOA4Wv8Cow6uYTOvCskdkPxHfjFmQBtLxWuR4Z3/FY?= =?us-ascii?Q?R9oxUNQ3oWcFMTVZ3kjloyGSxF/mvfJlC4hHEXcIJ+GGVBWd6RqZEU639bQq?= =?us-ascii?Q?1yNUUZH4oPjemVagnsMA7r/IjLMIVTYPh6o6i2Y1zsZD8Vf7VkVNu08B8lX8?= =?us-ascii?Q?XH3BCQPy8FtOYoi/LY8jSHTbgR1xnMyNv/ns3FSXWil0/WyZBnj7cGzXlgPg?= =?us-ascii?Q?wb5PHxgHFB5Rshj4mljhiAhrxD0tnC7LVa6WNx+RgQuj+g6mTkymIt8IzPAT?= =?us-ascii?Q?QIR26Wu0CVf2gcynsvt9CAlmvkEftIeAqkAKwu+R8aqvL4yO6nEEK+3P4gAi?= =?us-ascii?Q?G5/hKGWWOO8IJWqLneIUOxySQ4ZwqxhZCcKwh20KHPFKzTDI8durkuCTEnLL?= =?us-ascii?Q?8BKVtYnFcE0zYw/xM6B5C16UagmC1ImkKXzr4UpZTCXQTCDZD6NO3blFICUG?= =?us-ascii?Q?QhRiRfIeGxtAvKSLh9GOxGGeIhqE1LsFJonOwhOvdWSh8a1y4voY4Td9IDOJ?= =?us-ascii?Q?K3Uwt/ut65O5JGHKiPClrr?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;5:gekw96sJGCzCBvmTpGAOV7OMWZjskBTDemNgPk+Zh9hJyUty5Z9jKQKRiC5g+TM2VniWWIPQ7Zv613OVPg6RPEL4cXKiCXYeOdNeSmHgPqAnBKS9+le5YTrj8PVLESgumw0eUQiXmmTsKF8+3/a8S3nYE/IwbDGxWYgnWQalywkhdXQdEjAB1yOWd8rtNUUMqmvj8i1TeVB4eKeKAEJM6+lULmi8HXpFFg9sbvP+9iFLcMjZ5F6eDFmaaYVRfkkgkihfMm9E4Njk2PkzZCIbEbTcCfimxeImzy2x2lTXzmJ77zPxVj5/CQ932nCGO88yqyalDSG1M00iRKp3goEeENqpNMpbfF41q2jY+jDNOrJewCp1Xew2aAOgHDc8AmKEhxdrQXifdAZJ7XVuBh07DvJSNDSiGuTTWS6mMhBj50MSmt/62OerrLIDEACe65qqh1EGR0Gf+2ynzBJ2Scj9N06Kxs2x/P4wombRugZiuGPo042YdW1fT5L7vdi+SywI;24:4n0lN7pY4NUafZVG47x/2KAEaTVOzjBGrOW1oP5HmCa9HqRsmPVm6KhbFZSOfv+hfUXgKwwftaiAYghsUhkgvSvBkUK+Fo+Wh9dfy86KtLU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;7:cGs8T9IFOGwEfXYaHLK2t9To51I0TOhksPu+lMLRDqAAUVc2KdXuuNTZd78OMkXL1FEbOK/Ea0S03mpW1RtyTn/RZWRePMZaPDeJIYyL7kjxxMtA6pX0SGSr5NplljkVF8MDADhenlDY5OMab7FcV6G+5CuA+DgfJBzuDcx7nAbYno7e7XOZ59v2UtiTx2zvlZn67pqrlDRVpN2L6WbtYmk8KvbPNPGBAqrQ3r9s99WN/5ElBb/by1Fn1aS7vhryMd1YQrNuOrQAG3JVUv/U55jFDXfrt270/MP3P3tJYN5MjEzDWFMtiKj9ZXj8FJTqS4BkuKu7qlosywzlZK534PU7NEWqU3/ykw+nZSLzS5RXStv6ppo8XlwMNpSzd1TMOAq/r3bO6RwnNoyV8EhhSNvb/lctTrjdAQrocGjj7uj5UjaKrM5KvQGk7SPdCOCXafdq8IV6Kr9ieJVjEmokXzsSTHz2s4ZUaN3JekXx6im0gdmHSiB21hTrMyxjH5bF8bWac9BPTxB4Q+eQ9l0mVZEVJMGjKMhmQhYQZhvf3uADC7uu3c14yRjSYBDl07qn/c2toPqpx4b4J5lDUH1EN6L+YRZDp24OVVGcxkzQ2mcZSheAcTJNBWsPsCWoEI68VWi3Dr382KhxgPUyhBmsXq1Kp9maBWp/1NZz5Luqm93qqa6MLaSC8AizH7cgO/kfPkUZWrVkGVc47xptM2dYCH0+z+8K7NLjfGni6oDU2Q9S2b5U9lRrw88E8S9GO/ur8TZnI6jFfWHyhXZSnKQEyDQBW3VhxYK6XHevix0DR88= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1151;20:qFrgnk3NWpUnhZC6d6EZSHoSvHdo1FnC4nH4WUhDO5lN+2kp216N28VBvyomMf6EEHELaD59vNAZsgFcHctLenEaqadarWK1/qMw/QdU3/dR0FF7K6I1Y2aCnko4uMVAKH4oZkt8UMUARicGNdHcRVaL2rfml1cG6P0FR1QD2+QOsgkvVDbWXCksmQKSBuo3vEg1Sx8w+7Sr8MY22KJ0/2t7Kds0IqvYk3EmQSozPUAQrFmvRkjj65Zb1eF90po3 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jul 2017 21:13:09.9775 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1151 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a cmdline_find_option() function to look for cmdline options that take arguments. The argument is returned in a supplied buffer and the argument length (regardless of whether it fits in the supplied buffer) is returned, with -1 indicating not found. Signed-off-by: Tom Lendacky --- arch/x86/include/asm/cmdline.h | 2 + arch/x86/lib/cmdline.c | 105 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/arch/x86/include/asm/cmdline.h b/arch/x86/include/asm/cmdline.h index e01f7f7..84ae170 100644 --- a/arch/x86/include/asm/cmdline.h +++ b/arch/x86/include/asm/cmdline.h @@ -2,5 +2,7 @@ #define _ASM_X86_CMDLINE_H int cmdline_find_option_bool(const char *cmdline_ptr, const char *option); +int cmdline_find_option(const char *cmdline_ptr, const char *option, + char *buffer, int bufsize); #endif /* _ASM_X86_CMDLINE_H */ diff --git a/arch/x86/lib/cmdline.c b/arch/x86/lib/cmdline.c index 5cc78bf..3261abb 100644 --- a/arch/x86/lib/cmdline.c +++ b/arch/x86/lib/cmdline.c @@ -104,7 +104,112 @@ static inline int myisspace(u8 c) return 0; /* Buffer overrun */ } +/* + * Find a non-boolean option (i.e. option=argument). In accordance with + * standard Linux practice, if this option is repeated, this returns the + * last instance on the command line. + * + * @cmdline: the cmdline string + * @max_cmdline_size: the maximum size of cmdline + * @option: option string to look for + * @buffer: memory buffer to return the option argument + * @bufsize: size of the supplied memory buffer + * + * Returns the length of the argument (regardless of if it was + * truncated to fit in the buffer), or -1 on not found. + */ +static int +__cmdline_find_option(const char *cmdline, int max_cmdline_size, + const char *option, char *buffer, int bufsize) +{ + char c; + int pos = 0, len = -1; + const char *opptr = NULL; + char *bufptr = buffer; + enum { + st_wordstart = 0, /* Start of word/after whitespace */ + st_wordcmp, /* Comparing this word */ + st_wordskip, /* Miscompare, skip */ + st_bufcpy, /* Copying this to buffer */ + } state = st_wordstart; + + if (!cmdline) + return -1; /* No command line */ + + /* + * This 'pos' check ensures we do not overrun + * a non-NULL-terminated 'cmdline' + */ + while (pos++ < max_cmdline_size) { + c = *(char *)cmdline++; + if (!c) + break; + + switch (state) { + case st_wordstart: + if (myisspace(c)) + break; + + state = st_wordcmp; + opptr = option; + /* fall through */ + + case st_wordcmp: + if ((c == '=') && !*opptr) { + /* + * We matched all the way to the end of the + * option we were looking for, prepare to + * copy the argument. + */ + len = 0; + bufptr = buffer; + state = st_bufcpy; + break; + } else if (c == *opptr++) { + /* + * We are currently matching, so continue + * to the next character on the cmdline. + */ + break; + } + state = st_wordskip; + /* fall through */ + + case st_wordskip: + if (myisspace(c)) + state = st_wordstart; + break; + + case st_bufcpy: + if (myisspace(c)) { + state = st_wordstart; + } else { + /* + * Increment len, but don't overrun the + * supplied buffer and leave room for the + * NULL terminator. + */ + if (++len < bufsize) + *bufptr++ = c; + } + break; + } + } + + if (bufsize) + *bufptr = '\0'; + + return len; +} + int cmdline_find_option_bool(const char *cmdline, const char *option) { return __cmdline_find_option_bool(cmdline, COMMAND_LINE_SIZE, option); } + +int cmdline_find_option(const char *cmdline, const char *option, char *buffer, + int bufsize) +{ + return __cmdline_find_option(cmdline, COMMAND_LINE_SIZE, option, + buffer, bufsize); +} -- 1.9.1