From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933581AbdKAWHs (ORCPT ); Wed, 1 Nov 2017 18:07:48 -0400 Received: from mail-bn3nam01on0043.outbound.protection.outlook.com ([104.47.33.43]:12256 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933504AbdKAVRA (ORCPT ); Wed, 1 Nov 2017 17:17:00 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: bp@alien8.de, Brijesh Singh , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Borislav Petkov , Herbert Xu , Gary Hook , Tom Lendacky , linux-crypto@vger.kernel.org Subject: [Part2 PATCH v7 14/38] crypto: ccp: Implement SEV_FACTORY_RESET ioctl command Date: Wed, 1 Nov 2017 16:15:59 -0500 Message-Id: <20171101211623.71496-15-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171101211623.71496-1-brijesh.singh@amd.com> References: <20171101211623.71496-1-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: DM5PR06CA0064.namprd06.prod.outlook.com (2603:10b6:3:37::26) To DM2PR12MB0155.namprd12.prod.outlook.com (2a01:111:e400:50ce::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b1292578-7d4b-40b4-9d0a-08d5216ddb51 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(4534020)(4602075)(2017052603199);SRVR:DM2PR12MB0155; X-Microsoft-Exchange-Diagnostics: 1;DM2PR12MB0155;3:Zg2oCaGzd728MfpQAW4iAyW4guEGqOMRu5sLk3xftH7IVI8J0jlKgm9100HZR41he5SoSi4jjEhirirRXDwDDFHBUqeLPJMoP0+Q9HwiZa+IS4LQPAuDZ60a2mVJ5wDhe2Nxbju3VkVobg6xW5VkMu5NIbbkRo8GsX2UiSmc/ulx/hmhRFdZ9ZOfhcr2N1I3U5gJXPKV1V6ohaSME33E2zyJ9Lganpz6QTF/ihNwf8Jb8TxJg/0ic2O1kOitarF7;25:AP/I4Icm5qCQeQIBqP8uJQjCfymoig1GAaAJq+dNsYLmyOh+K5Ah53be8UIDG2cRSjaiF99RDCa0z48a0SkUnUL4z0S579GK+qFA7cDDYe+FykL48SAud9cXDTikjM0fkoVuo+tcn7nilJlESe8sD6RfLcmkDRvH3fudCrQu6KdF4JBmk3+bNrC2ZkFQwcXwBxVEpq+Zjzkm78Bb9cMLF2Xw4b9IRy6+uzi6pkK0T6qvfAeHS1ioDNDD8Qih8Tum5OPhhxbBza6BiJLh3kgg8Ak/S8NfiQObPlN1oVU00slLkPQqLDAVa5lhmksl1Z7oQgcUFB/WX1YcOBcZwPHsVw==;31:s9etCIaol2SX+6snev02C6WN9Lk5ogY+M2jVjME3tRgDCfoLjw35FdzIeJ2z4zDc0sp/BNqEHTUkHIIQ1OMimYjERokhjgYqY+eVolxH8g35wgcuI16lwBFLaZTe4DoUSACa/4cwuV20o6jl5wHrVpx/MMLJKKJ4efVN2u9JsHCCCCSop0zNWLdh2ZEfb4hmBQIEfLAFSYObnaWRrki4VtPyDAE3RiWc+T/Z+u+Wmic= X-MS-TrafficTypeDiagnostic: DM2PR12MB0155: X-Microsoft-Exchange-Diagnostics: 1;DM2PR12MB0155;20:fZpq/TqPkBX3PrCzW2isl9Nu4R0ZXayEXpKivtzLGRLPu2n5E/h3/utCrl0OIt6Bi18QcgTDO2bBOpPKz3xJSJZi6OXszYdWigi+YOwwiEv9ezxBqxstbkhYjNvcjNuVhkzqaiFMyElPUKN73NTCWHxHfi1vUtKjlqc7ndaZST8eEUyUMvtABrVie/PNsOTYt00UO/B0LWP84r7DZ6MUWRIWF6K2u+ddoUztRn9GB+ydi37GkU80TLtprUzXRBRhd8dn4YwzFhKw+klZXcpuasPTmhu8zs6Tm3Nzbx+s77W9yogm0m8libkV7J1RDLcsZhAmWVJTwvs7TXES0eI7cJC2fdaTegYoykenbuYIDP5oCOahb6llYTWKGtwJF4QEO1xW9ePl2MlY3CgfG+9IN5rQ4723fkENh3C2DVR6FQ6V8KqtfObJp6ErQq43z284jvX6EPEfY1i2h4wxmOxDJyqG6Qe4xa2DQu/6MKE2HGi5ThxMot4DsoyaqzQfv+rP;4:zQ28IQkjA7EyrSIhwP1sMWADSf+LkjmLmSCat2qEIBh/j+UxnsPv8pRDMpt667+tpCroevQX4ALn0Sx+1X/MBPABtfKafP6u28p2zYAMAhZzGLJx8Z+g90tiIxKzzGu+yGTdF+bsAUaBsPmLYpJy26D7qbX6YcEJbOJWy8+/11Z7gc6XN6bYDdxMlonMgiQa2jLzz7T3ULTYXmR57s91I5dynjz9RYpxuWvo3T+NB0Q9n4II0197mBYGFdsIKsG1gv0MJUErgMzt9matip4vSjgqV3QEFsp1W16FC+4vjO2W20zBThe/N6iaaXq7Hey2qIRWCrsEfFTNRiv4ceYNaQ== X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3231020)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123560025)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM2PR12MB0155;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM2PR12MB0155; X-Forefront-PRVS: 0478C23FE0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(39860400002)(376002)(346002)(189002)(199003)(1076002)(6116002)(97736004)(66066001)(50466002)(3846002)(25786009)(4326008)(54906003)(316002)(8676002)(47776003)(36756003)(23676003)(50986999)(478600001)(81156014)(81166006)(105586002)(53416004)(53936002)(189998001)(106356001)(2906002)(16526018)(2870700001)(76176999)(33646002)(305945005)(7736002)(86362001)(5660300001)(6486002)(101416001)(50226002)(68736007)(8936002)(2950100002)(6666003);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR12MB0155;H:wsp141597wss.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTJQUjEyTUIwMTU1OzIzOjV1MEE2TFVPNm9Sa3I5aVBZNFdhZndjd3dN?= =?utf-8?B?V1d0S29COERTRzNzemhjbFZ1T1VPSGxqU01DY3hzZGVWWWxYbDhLWnhYQWIv?= =?utf-8?B?VVdvN1haN0pKZE5ybE1CT3JiK0FIbXllcVRTcDZFK2kwWTQ3d0UwL2swQ2di?= =?utf-8?B?V0dxcVJxL21iNnJJVkZYaWZOQjZiZzlIZmNVUS9NcWpKQUE1UlRxT3I2Sk1Y?= =?utf-8?B?Ty9GU3ZmUHFDYzFOMTZhNTVxQUM4N3JVUjJ1MFZFS3MyUDFjaDRXSU5NUmt1?= =?utf-8?B?SEYvQW5RSmQySWtNbDdKREpNeGsvNUFjSmI3WjdrUHBYemlvMDhvTTVRZG92?= =?utf-8?B?YWY5VFJ1SHJyaXBLN0EyZDgzT1JyOFFhUmdQNnI5T2RyYTI0NmpycFN4b0xY?= =?utf-8?B?WUVMaEp4UFVzQURqZ2hHUHJ5dGtqQU53MlZDWGgvaFcvWXNuVTNLT253OFAv?= =?utf-8?B?U3ZRamZVNkRlUlZEaG9HTWxpcUtnK1FnUC9mV0J3b2Faa1ZyQ05JTEVtWG9v?= =?utf-8?B?MlRYWHdaaWVhaWtCNC85c0hwR0JzT1V2Z0VQK0wzRTVibjlhdWlQVmk3NVdC?= =?utf-8?B?RGFwUkVtaDhvUjRJN09kZGkvbWdmLzlVZnpxaGtNZXM4bnBtbHhKZGdkWHNz?= =?utf-8?B?UXBDT0NVczdLbUpHZWhVRitFOFBYVUZsTjVlbmEzSVVaRnB6U1BOYUMzSGJk?= =?utf-8?B?MHQ4SG5mZXA5dUxTUzBUWENxM2tsTFQyTnd4WnAybzlLTVJzVFJPL01lMGk4?= =?utf-8?B?d2Y3bis0M3kwQklDTGNLQW1aQ0Q0UGRGdEhQT0ZwRllXTndIbjgyL0VtVkV4?= =?utf-8?B?U1R2eUtFMnVRbmdTb2xUUXN5NmZlcUJTcjlNNzN2ZExucmZPMDhJeUF4YjI3?= =?utf-8?B?UzlKR1JUQ1AxdkRnQUxhbXlPbncrYVlaYXIxM0MvWXlRckhzOW9melh6Nk1s?= =?utf-8?B?NStBZ3ZmdVpNQ01jNGU1eGV3K0U1RlFlY1c2MWs2K0ZHaUdXeUdCTWdBODIy?= =?utf-8?B?THhwV3c5ZGNUS1RjVy9Rald1UHFtODBjYlBkQWhtTHdoZEVDQnJPMFN2SUxy?= =?utf-8?B?blp0c29nRXZwQjdDNlg3c1J2ZkJCcE4wYzZuT0pQQXkrTHl4bWVkYjRSSklB?= =?utf-8?B?aUJsS3hvb3V1N2U3bTVnT3JFK3ZxRHBEQVFpWUZhY0w5dTJpVnFtazBZUDZp?= =?utf-8?B?ZWRFM1ErQnV4QmVaUCtRenc1RDRqb2Roa0NvQ1RQTHIzSWRoaWdFMW42bWhs?= =?utf-8?B?TzVrdzgyL1RCZzZlMUg3OXRqNXNZMTJLWVhMUzRVdlNuNGN4M1VCbE5LZytz?= =?utf-8?B?REZTb05FSUNWWGZCM3BGSVI4VmprYjBMUEtvZ1pucTY4NFRyUkhzNDFPVHRw?= =?utf-8?B?VG45TkZKcTFkcmhuVE1OeGlDeklWVkEvTzdsY2lnTmpuMW9pc2prV3dVbXlw?= =?utf-8?Q?u77WV+MAIT20ykx1bkmZLm7suMz?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR12MB0155;6:tiPtLdyEDtt8d056X/rldPgaGz5aqVz5r2unK5VmEQLUL8TDwgcDJG+yM4oj1Xgju2UGK+WhmBIzrS29w57pr2Q6FcKhQh+htn0d5PO2fUesiJcCUA1Nd//26zaXiZ0WQVJRBoFnOdj4UIFjTRxFruyyuH5a9KjRwnmsVPB5KG6vDFqPalVvB4SuMAGFotPBJF5hl1EnuLzGx/JzpqyMNUkNzx7UbGFp9kwhioC6bRAk00VTq46EB/YYLJBALR9/Bm9lpSlylfAiF7B941rhPkgx0KXazyb4FlxUiw32HlW+Ftw13L7RAAutcMMswwXmcr+hNxTlTdcmrddpRLx+Rb7n2F80Y4LYVl+M6q3WBL4=;5:DsPiXnAfiI9DHQv3CEPj/R0wkSsg9V94bunvWResira3kgXcl31GYD580NJeY6/g5HpONufEeWeQ3aoVWQDUxF9vbrJSHxjJUaHs9zUly9H5eaXCYiHfK21uBwmDtd9tI8hRj/5gVPDF+9rb5qBdEd6DigHnd0ctwDfxgRu+5Pg=;24:GdzXxIiFVMbLGPeBwG6MnmbQoqbwZTOPNXNWNuy5TG4kK2AlaPzO0vtMPR4QY7+Gde7GYqBIsBbRPw8LUrM8kk+SoP+QOby2uPwVspZ8kvE=;7:iss/a5vrsKdgqsmF+IghsvfzArdeJZ4wm9gKhHJSBA0/T6+jHiSzYGtacU+9k/HDNq+YhlzrsEbCaeP952YiUMci+b5LLufqxsC3aIkmUwG/L4ukuWLnoCAZqOsFrRtgrc9+l77+/n8uF4O0ncMqQifVr+KggkPbfx0BkjSkaJWPdhz4xAFydHx3HhBnlXZ6Hg/HtNR3FvcsmeBr2zt+2NLWO5xDtGuKzwQpWgFM5okXcYNBS84ITGxg11cHOZTA SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR12MB0155;20:yFJ5SjMoofbDcNKaNZ8ku6+6nI7DZGXQAeahsX7vSNMVePiXB3tWToIQ2zfLlKwQQ3PCG11aQjPeERb8F2zcoiLFzCneUhkS+t84XybG4nVAUu8icno4ih82yC6Ky3p0Bi1p36yhs4p7y1Oq/QeWV2W6txjTwifhSYmwnCZnWGvz0CpbglQsc++I0uzXaVosGpt779o6HpL4Bp46zJFyf0uGB8SILn3o9QxHtGKbVZP90CA1NlmqpSkZYrdS95Kq X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2017 21:16:45.1097 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b1292578-7d4b-40b4-9d0a-08d5216ddb51 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR12MB0155 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The SEV_FACTORY_RESET command can be used by the platform owner to reset the non-volatile SEV related data. The command is defined in SEV spec section 5.4 Cc: Paolo Bonzini Cc: "Radim Krčmář" Cc: Borislav Petkov Cc: Herbert Xu Cc: Gary Hook Cc: Tom Lendacky Cc: linux-crypto@vger.kernel.org Cc: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Improvements-by: Borislav Petkov Signed-off-by: Brijesh Singh Acked-by: Gary R Hook --- drivers/crypto/ccp/psp-dev.c | 70 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c index c61ca16096ca..a757bd1c34e8 100644 --- a/drivers/crypto/ccp/psp-dev.c +++ b/drivers/crypto/ccp/psp-dev.c @@ -235,9 +235,77 @@ static int sev_platform_shutdown(int *error) return rc; } +static int sev_platform_state(int *state, int *error) +{ + int rc; + + rc = __sev_do_cmd_locked(SEV_CMD_PLATFORM_STATUS, + psp_master->sev_status, error); + if (rc) + return rc; + + *state = psp_master->sev_status->state; + return rc; +} + +static int sev_ioctl_do_reset(struct sev_issue_cmd *argp) +{ + int state, rc; + + rc = sev_platform_state(&state, &argp->error); + if (rc) + return rc; + + if (state == SEV_STATE_WORKING) { + argp->error = SEV_RET_INVALID_PLATFORM_STATE; + return -EBUSY; + } + + if (state == SEV_STATE_INIT) { + rc = __sev_platform_shutdown_locked(&argp->error); + if (rc) + return rc; + } + + return __sev_do_cmd_locked(SEV_CMD_FACTORY_RESET, 0, &argp->error); +} + static long sev_ioctl(struct file *file, unsigned int ioctl, unsigned long arg) { - return -ENOTTY; + void __user *argp = (void __user *)arg; + struct sev_issue_cmd input; + int ret = -EFAULT; + + if (!psp_master) + return -ENODEV; + + if (ioctl != SEV_ISSUE_CMD) + return -EINVAL; + + if (copy_from_user(&input, argp, sizeof(struct sev_issue_cmd))) + return -EFAULT; + + if (input.cmd > SEV_MAX) + return -EINVAL; + + mutex_lock(&sev_cmd_mutex); + + switch (input.cmd) { + + case SEV_FACTORY_RESET: + ret = sev_ioctl_do_reset(&input); + break; + default: + ret = -EINVAL; + goto out; + } + + if (copy_to_user(argp, &input, sizeof(struct sev_issue_cmd))) + ret = -EFAULT; +out: + mutex_unlock(&sev_cmd_mutex); + + return ret; } static const struct file_operations sev_fops = { -- 2.9.5