Received: by 10.223.164.221 with SMTP id h29csp1144084wrb; Fri, 13 Oct 2017 12:35:22 -0700 (PDT) X-Google-Smtp-Source: AOwi7QD20MmUAN/u7VhbnYhXGLW/9cUOTHPxQgu0H6DufAYf6WFT7PWJj3BVHkLFz75ag4Tf4n9C X-Received: by 10.101.65.6 with SMTP id w6mr2146341pgp.365.1507923322295; Fri, 13 Oct 2017 12:35:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507923322; cv=none; d=google.com; s=arc-20160816; b=vKJrlTFpvLiS1HEuYaJbunxkdCLvzBJNagp+Ny05OMlMbhMMOjdv/NwEKzjM+pKVCm llykoC2vsuo7dZw55EJK8rm/8/R47pEGbkZq4JSlcU4ro8fHs34PyZc00s4su964AaGT FCcosV7CXTCUMfqxvkVLcXQqYzMjp8NdHrSfJyoJuuFSG42e3gp/8J1NCw5OtVMDAy3j LTm/6PvHoQB8p6jwZOg/SnSIspORNgaijb+VQujt658iu+F7dF4B9ugzUMFur+fz2JZd 7RRrdb5QOSU7YbjSi0qczKp55EmCmfKSbYiMnq+uQxOtRvC55e6XdQSBuVSac3f9tX1e PLEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature:arc-authentication-results; bh=aFlginnNwzgHh/rv2jcfz5v4qJ/aHs63gpz3LgrEPLk=; b=mVEizmESOuxKvD6lt62l57A2cfP6uBQGfFfLxz/JOJryp/c2/VIWSU27ytF/w3IILO zFVgP64oijQTQKJVnIUapwl+E/ga+Lopu4vxPaI/xNrduEF4kjOMT3FQFXqHhpDDOW1q +3XmqsHYUj0D9sWfRil2TEUi3HuSTf9hC4g8HvuXiNO/W25TcQPI2KB7QlSXN4MwQCu9 BgJsDPTyXpEo32kVzK/hu/QDXc32c40TmnMQyGU3w2s9YLo8muyBPVBE/xz6eFK3mGkx 8PRlz6fL4Kl1HRrkyy2oHGbg17/r2JohZXz5yfieTsv4OmUbSjx4qygMPdSyNML55rgD ByZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@EPAM.onmicrosoft.com header.s=selector1-epam-com header.b=MAHt1F0N; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r84si896963pfa.352.2017.10.13.12.35.08; Fri, 13 Oct 2017 12:35:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@EPAM.onmicrosoft.com header.s=selector1-epam-com header.b=MAHt1F0N; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753584AbdJMTeL (ORCPT + 99 others); Fri, 13 Oct 2017 15:34:11 -0400 Received: from mail-eopbgr00065.outbound.protection.outlook.com ([40.107.0.65]:27008 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752752AbdJMTeI (ORCPT ); Fri, 13 Oct 2017 15:34:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=EPAM.onmicrosoft.com; s=selector1-epam-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=aFlginnNwzgHh/rv2jcfz5v4qJ/aHs63gpz3LgrEPLk=; b=MAHt1F0NWtbXE4wamdFuIrePI7xIaZbpVdMO4Mmxi3XhXXvMG1XFXS3dlUQNH/f5xiXrKhzk6J840jZdT2p5as56z8i0mS0jmjwLsr85ZPzzxEBwYgrrr0vLICb0BX0hUyarE0va5qmRkUQEB97D/cuTwRbfcBVkVVzlDz3gjJo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Volodymyr_Babchuk@epam.com; Received: from EPUAKYIW2556.kyiv.epam.com (85.223.209.52) by HE1PR0301MB2138.eurprd03.prod.outlook.com (2603:10a6:3:21::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Fri, 13 Oct 2017 19:34:03 +0000 Received: by EPUAKYIW2556.kyiv.epam.com (sSMTP sendmail emulation); Fri, 13 Oct 2017 22:33:56 +0300 From: Volodymyr Babchuk To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, tee-dev@lists.linaro.org, Jens Wiklander Cc: Volodymyr Babchuk , volodymyr_babchuk@epam.com Subject: [PATCH v1 08/14] tee: optee: add registered shared parameters handling Date: Fri, 13 Oct 2017 22:32:38 +0300 Message-Id: <1507923164-12796-9-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> References: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [85.223.209.52] X-ClientProxiedBy: VI1PR08CA0129.eurprd08.prod.outlook.com (2603:10a6:800:d4::31) To HE1PR0301MB2138.eurprd03.prod.outlook.com (2603:10a6:3:21::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7c08c731-1d7a-4ee2-a8b8-08d512715d1e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:HE1PR0301MB2138; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0301MB2138;3:XGCYWuSJqULMaA+b1z4to9vP8wbgNMJJwMHQNjWnK6/5jwEi8hnJlqdUPvuBj1oF512Gbm3wX0jgsZx0p1LTl4cNvtsvjA02u0zscRXYD8Us5EWByyteufcbA9HKz0O6mPd1lF4ERKX/Xy3Vyzuvj4T77dQhznRvdmI0S0TIj7KK7xqZIeI0MtP9FBJeIcjE3UqsrvREUzyG6OcAFP4fb1Q46bkhYCXD78OrdRh/367g+4ehQ7GrouEaE8KosiHX;25:GkwEKnIZIAyPLRiKDDG62Tbsk8Q5LINKAlIAJA5HEtrbx8uStG1ePeDZ+Xn7qZlNbWIpe2iml7sUoc7r6UQ1Jr35ixWT6UzUhmWwiLCITFndKUnMkxIet5xnfYwqFX26o7IwZWOVt/Wd4jQQ5mW134z7e1nPmNHswxmI1PylgVQQoUQiDQQ4yWHuUD4QsnkiaT5A4OFlIJ6Db9VFnQMANFgrSby+bTuPrG2dg7TgCkZFeeP0/d5kL3qONE7EYwMryAHFi/8coZn09G5Y1+cme/npaU6mJTrCfk8FdEqqO8ualah2xz2GEQhgsAkmrEQzAKTOrRseuT4tSSEs8MwIQg==;31:583V6BkEtmVA2AQ7IMXIxPSzFfK4hWeFff3lPNzHdSwxIbKAk2Z1JQXnCMxHiaakAsG0ckxRI4tdxNrO2tNmuwYBDo3WVhIzp5tt5HKz9QBU5EX+m53eL4EvrvK5OchAFuXfB0YXB1CYDrnwGwCHIanVwENhcsjpE0uUeQocn7Nu31W0hG4uUkzKKThk/JfLUJXMTiwZ63nwRPSdjN3EnQjebovwCZPpZ+BAiflHdxI= X-MS-TrafficTypeDiagnostic: HE1PR0301MB2138: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0301MB2138;20:zCamCtOoZ1AYLc02bfrpPGmYYPGJRQ9MEA1RHqWldlTnyKvnVVwW2Ux1DY2Py/T8t2ama+jxvgtVw9z/znyFCAwvUjYdiYV3LNiSp3e/01Pegjxs+K+yRMPh1gK7L+bFNTso96fsLSlrPBRxJxyUG9wXUKnTvtIbS8qp6pLUnQkZyFHlP6+eMVrNJ+TOVMxgaAWeV3wb3dexJtqeAJted5pXr7olqg/ehLSt34NFMQeSnoBtNl5IFzMJEigyaXTnEaAWBKnX6ZtpRD/YmnKOwZtge7Yx8vFSzNbBtiTEeiI+/vvlrEH0oas9MoeTkuO8rPJQnhHAxZTX84D3hff3TAe3ARyQyZErXE6JOFJJHMPQfb7xCn1mK3ynBWh4FltoBNDSJXmqOecZbj9Qkblt+Qr5xS36qhcpdJry9BqLRl/0X8lZFmgrLC+i1t4+eDO0IC+HUXSG+i4hagGEqpipEXs0dCsmvfOy0uXw3DmmxhSEYTJwpl+yWp5+tBA3RWNo;4:mMrVeURNBDDg6KxYcFrXtW/4+iNVD2ZsBv+E5yyyxqsMvlpsc1AvY9xGliVOu0/aNcdG9D4Ihxi+1JSap3NDc3EOwH0LLLw9aK+3AlHIMV5tZdRP8XgIHKEO5xznX62J6TY2ed9vKqmlW7HYOskHveh/xUwlhsC3S30RyKtBYJsaIR1uygr7L1BENjEX+T6PfdqkMXj5rFfobE9rF8edX/FPTdB/qMmJeIQAvyaRvNjrvVMeMo8XRGAgB/1xtdMUAcOxrfqNwep/5GIVnk3U/Mj4rMh7BqrUJiEPrDJUpJM= X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); 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)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123558100)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0301MB2138;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0301MB2138; X-Forefront-PRVS: 04599F3534 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(376002)(346002)(189002)(199003)(42186006)(39060400002)(105586002)(16586007)(2950100002)(106356001)(6666003)(53936002)(316002)(107886003)(4326008)(3846002)(6916009)(6116002)(5660300001)(80792005)(81156014)(478600001)(8676002)(8936002)(72206003)(81166006)(33646002)(86362001)(50226002)(122856001)(47776003)(36756003)(97736004)(76176999)(66066001)(5003940100001)(48376002)(50466002)(50986999)(2906002)(101416001)(189998001)(7736002)(305945005)(68736007);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0301MB2138;H:EPUAKYIW2556.kyiv.epam.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Received-SPF: None (protection.outlook.com: epam.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0301MB2138;23:DFfTyvIh9kaTpbAsYmbpXI81sRNkZiEQtFFpqEz?= =?us-ascii?Q?OGY/1ufd7qL6JHpKj42xIQKqoVJpdH2Zx80hWQ7XnLPFQXpw4rkkH8CeNgt9?= =?us-ascii?Q?tRH+ACA1FpI5o+G5y/wPDUycQRupJ09VIguJyuzLMpevYdsULGGiUuBmrkoe?= =?us-ascii?Q?EEiy3jEzROAavlVnTvf+nvSBQKMocJYTpgz7bonKMx16LLwNK3c2365/f+Po?= =?us-ascii?Q?Sokg+IyoNghO+lW47BKdrCWRn8DTMRWBmLW5o64A+rEN1uoWYYWNK+yZXBHJ?= =?us-ascii?Q?fZXxQu7i8ppeTG4PFj5LlrIpmui3eUHyYPyeI5ZoEj/TQ9r0i+ycelhiP+ZA?= =?us-ascii?Q?EuRza0HXQhVEfo/gKk/Co2FOEt9xLamewFv0LGM5Wyc0pDjysWMGpyx2b8Mj?= =?us-ascii?Q?yA5zDdu74iYQze6jO28rVsM36aqB3JBjr14xmBKq+YbQoFyi8XfACtJH6UCx?= =?us-ascii?Q?W9aADUhlzF28zna2csZyQCpRol2p4usSmVyeXPOk40whsD1UsBMUzmTPyWnk?= =?us-ascii?Q?6qKeZiDOGZTmjH1X/n7etFQuNhAEvuwwaJHSoVJF9Tfqdv2/hDmfd2JZS2Dz?= =?us-ascii?Q?JGaHg5r9G3hUCf51PiLgK7GJvyQ77ePpU3hpnR/uYfxPN5fRl1GBGY1VuVhs?= =?us-ascii?Q?YU5iR/i0gVW/2pOjKxUwA3dh8imjFG4LJPirMFCgOIXZ/CE18GvT6Cmmm3DC?= =?us-ascii?Q?9gnOHK9hqslm1uDJ9OOd8zO1/aTxdN5niIEf9YZB13Tb11sN3Z/AoQAHqZP8?= =?us-ascii?Q?tBiHIIlKiMyooOIAa+1zv0bqaSFTDO7VSkXKi/aM2DrnNzc2FQ7/PXz5rqce?= =?us-ascii?Q?pQfRF4Um7H9wgEG1mVj+yx24dN9hOyGT+RfuHzkDlFFEBBtZk3bVY5cmEpdN?= =?us-ascii?Q?uP/CUzUWkTOmGE9vPwARvX1oO4bU5PBYcypm5faSXAvL/G6+UF5x95IFei1o?= =?us-ascii?Q?g93eOSh/Qg7ut+yfJKnzPtWYyymBX/db1qpAWqtkSh38v6sfIRkkrYrvjv4Q?= =?us-ascii?Q?gwSI5uclUtLNvuToXviLIMQ0ewhmfvifqgKnMSgpwBskTYi82hr3YXOy4GCd?= =?us-ascii?Q?2REQJkOWQUKGuyNWddUcAhjOCGXnoXVw634peeH+6J9T4WHpX8w=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0301MB2138;6:HhJBGXG2Y+XgVlkkzN652Mf2G4SFaQcVrTKGwk087nfCH+TUYkiCxY8vX/sWaPeO/v4hNoW/+Tw6951U05PnQ27dPNuST0QRDVjLPRnwOkSSjFRYLok5O9+pUuelk4K8dMSnkQ7v0KXkN+XGI8BLxcYgsP9+Se8AiLj+0WGEHJX4sQ/sV55SCCUWrtaLdKVfYpJ66l3VeB8wo0PLu6fyLAmK5fjGAootCz+WNJTspd7RJDZA0yuh9ve5lmILVivw4e8pzAmQqGP8aLdwHYemFwq0ysxQsT3+cS/cs25W11EDij2Ly9i0NcD0ExSWjIEYqWlHE5qNDUuSkOOZlpw0SA==;5:N8oGeTfouRW8rQ72O7YAfLOMKR+xKPXbxKfqlQ74HRV9mKSEtBjiT5BlXp2Zrp3oTVR4Hyc4ZQExpFTUSfyXqSHV44l++DGepS7NupE2vq7UbU1qZXBJXUx/ttRxYsBYNaUlw/pd0f6eGX11bffBw2p2dRaY9tg5gMQFkhYFzbI=;24:4MOdt451I41r4ZhqJY2dpjcJnHf6Fo12Ez5uyjYhNergKKBh2/AgyOzy94bB4Nvujcb3r7//8PV8rNzydASJTFVxU4OIP2mUyASU9fyw/4c=;7:U2nuPqni+7eZi7eeeqZLmRGLETjnC4jEvxEpsSgJsBcgP2SzcuZXfmiwShbWjiRybPjljY4TXbCvI4tmCytVuel1L66RBHvLi4Jn0TGkNWZu21xrbojF6ZdpBUwABZVZLzFummVmKgZ4d5pV6mx2mKfXYV1JAUjlgj31+mXEj3EZGAHZMwD3GPR8sD1ZANLrHmG/IAKU/z5CIbnO/dfwLP/hmkerOKEGpiG3ggZDtBE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2017 19:34:03.8656 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0301MB2138 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Volodymyr Babchuk Now, when client applications can register own shared buffers in OP-TEE, we need to extend ABI for parameter passing to/from OP-TEE. So, if OP-TEE core detects that parameter belongs to registered shared memory, it will use corresponding parameter attribute. Signed-off-by: Volodymyr Babchuk --- * Removed check on u.memref.size at optee_from_msg_param(), because it caused fail on some tests. According to GlobalPlatform specs, we don't need to check returned SHM size, because in this case TA can indicate desired buffer size. --- drivers/tee/optee/core.c | 78 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 4d448bf..3729ebb 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -97,6 +97,25 @@ int optee_from_msg_param(struct tee_param *params, size_t num_params, return rc; } break; + case OPTEE_MSG_ATTR_TYPE_RMEM_INPUT: + case OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT: + case OPTEE_MSG_ATTR_TYPE_RMEM_INOUT: + p->attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT + + attr - OPTEE_MSG_ATTR_TYPE_RMEM_INPUT; + p->u.memref.size = mp->u.rmem.size; + shm = (struct tee_shm *)(unsigned long) + mp->u.rmem.shm_ref; + + if (!shm) { + p->u.memref.shm_offs = 0; + p->u.memref.shm = NULL; + break; + } + p->u.memref.shm_offs = mp->u.rmem.offs; + p->u.memref.shm = shm; + + break; + default: return -EINVAL; } @@ -104,6 +123,46 @@ int optee_from_msg_param(struct tee_param *params, size_t num_params, return 0; } +static int to_msg_param_tmp_mem(struct optee_msg_param *mp, + const struct tee_param *p) +{ + int rc; + phys_addr_t pa; + + mp->attr = OPTEE_MSG_ATTR_TYPE_TMEM_INPUT + p->attr - + TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT; + + mp->u.tmem.shm_ref = (unsigned long)p->u.memref.shm; + mp->u.tmem.size = p->u.memref.size; + + if (!p->u.memref.shm) { + mp->u.tmem.buf_ptr = 0; + return 0; + } + + rc = tee_shm_get_pa(p->u.memref.shm, p->u.memref.shm_offs, &pa); + if (rc) + return rc; + + mp->u.tmem.buf_ptr = pa; + mp->attr |= OPTEE_MSG_ATTR_CACHE_PREDEFINED << + OPTEE_MSG_ATTR_CACHE_SHIFT; + + return 0; +} + +static int to_msg_param_reg_mem(struct optee_msg_param *mp, + const struct tee_param *p) +{ + mp->attr = OPTEE_MSG_ATTR_TYPE_RMEM_INPUT + p->attr - + TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT; + + mp->u.rmem.shm_ref = (unsigned long)p->u.memref.shm; + mp->u.rmem.size = p->u.memref.size; + mp->u.rmem.offs = p->u.memref.shm_offs; + return 0; +} + /** * optee_to_msg_param() - convert from struct tee_params to OPTEE_MSG parameters * @msg_params: OPTEE_MSG parameters @@ -116,7 +175,6 @@ int optee_to_msg_param(struct optee_msg_param *msg_params, size_t num_params, { int rc; size_t n; - phys_addr_t pa; for (n = 0; n < num_params; n++) { const struct tee_param *p = params + n; @@ -139,22 +197,12 @@ int optee_to_msg_param(struct optee_msg_param *msg_params, size_t num_params, case TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT: case TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT: case TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT: - mp->attr = OPTEE_MSG_ATTR_TYPE_TMEM_INPUT + - p->attr - - TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT; - mp->u.tmem.shm_ref = (unsigned long)p->u.memref.shm; - mp->u.tmem.size = p->u.memref.size; - if (!p->u.memref.shm) { - mp->u.tmem.buf_ptr = 0; - break; - } - rc = tee_shm_get_pa(p->u.memref.shm, - p->u.memref.shm_offs, &pa); + if (tee_shm_is_registered(p->u.memref.shm)) + rc = to_msg_param_reg_mem(mp, p); + else + rc = to_msg_param_tmp_mem(mp, p); if (rc) return rc; - mp->u.tmem.buf_ptr = pa; - mp->attr |= OPTEE_MSG_ATTR_CACHE_PREDEFINED << - OPTEE_MSG_ATTR_CACHE_SHIFT; break; default: return -EINVAL; -- 2.7.4 From 1579807677666738661@xxx Thu Sep 28 18:06:47 +0000 2017 X-GM-THRID: 1579807677666738661 X-Gmail-Labels: Inbox,Category Forums