Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp1148433imj; Thu, 14 Feb 2019 01:59:38 -0800 (PST) X-Google-Smtp-Source: AHgI3IYda3Fi+n/Ydi/3F3k8b4Cw/ZpMo40xVjqS0A2KWbQGx4mfxUa4SQzO170eg/jfcxUBZlRR X-Received: by 2002:a63:8341:: with SMTP id h62mr2987213pge.254.1550138378423; Thu, 14 Feb 2019 01:59:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550138378; cv=none; d=google.com; s=arc-20160816; b=Q3eW+Cu+2qLg/ec1SpW6KeS7fSpoYk8lDQDYYEj13ad41nh98D6MnzjsfRxzIPCoB4 oMEPRIJnRW2pjdjoYEBN96DtvwUuH9ycNcbL28kibUXEbCd0DYCLdkTywr0jwo7E6E/q 6DAmPK7MFoM+cy/T0kaU2B3M3Vsj0TmLkWWz31h5aeWaMCopZxylXO9NKv8rBtzuzgAY XJjDsZ+GXCl35LwgPMpJLQonrbjideyvI0mtk1a8WZKnv6rkxrzdFKdnsJXUvJw7UgA0 qYWiDurJGXfIq41rNtyiuv7zhM0xTVI60c0ga6enxi4GGWDjWvTLNQwvA+eBYPGkzP7G DcIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-filter:dkim-signature; bh=w+nGS7MTJ4UxXj8Mko1lf1wJANbCG7pCEgmQbFP5IDU=; b=sWAM38LL+AmyhFZmWXljXnNWrH7PxkoIyFkEbEWkVd+5lej9ZJM0/OsL4nE4HJSofq nqRvrtJ3wVXzOYHoKFZXgoKtvsQMmtqKOREWcgAST4aqs7bzbjqPjtcOzz6eK4FWLuai O0ZCUwh3DHqMvDwBQdATN5dpFHPd+h6Ty4P+ZtkBLCUgE68k8g+jfUXBHsNCxxIjCKbw tv7GHwgsHqN1E8r2rN8+7RxVkrK1bVtHINtYfvT6lS2Q/jcUk0FI/ugcMcDAGhH4lRq0 fNCKEBnlRgxFp0Kxz/xboX7tnNO3XonWrv4qveoB2joMqVHE5KSK9Go4QFmubBZlC/01 QxLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fjfi.cvut.cz header.s=20151024 header.b=xPpMfqPM; 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 x13si1927701pge.375.2019.02.14.01.59.22; Thu, 14 Feb 2019 01:59:38 -0800 (PST) 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=@fjfi.cvut.cz header.s=20151024 header.b=xPpMfqPM; 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 S2404812AbfBNARJ (ORCPT + 99 others); Wed, 13 Feb 2019 19:17:09 -0500 Received: from mailgw1.fjfi.cvut.cz ([147.32.9.3]:47610 "EHLO mailgw1.fjfi.cvut.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404788AbfBNARI (ORCPT ); Wed, 13 Feb 2019 19:17:08 -0500 Received: from localhost (localhost [127.0.0.1]) by mailgw1.fjfi.cvut.cz (Postfix) with ESMTP id A25D6AA28A; Thu, 14 Feb 2019 01:17:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fjfi.cvut.cz; s=20151024; t=1550103425; i=@fjfi.cvut.cz; bh=w+nGS7MTJ4UxXj8Mko1lf1wJANbCG7pCEgmQbFP5IDU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=xPpMfqPM4WDxHj9cF6NmSiSHdV55KGFoYruDdi95CbOpyxkSXTPXIidj6AzwJULQz LvxPZ7Wu6V8paM7uRGvikN6xASkCEgGJ4wp+d17x6KrC+IxHzXTairmiwW7ktyNdOX k/FC5cXNXgg0D/WczN2+OGmn52RhTqSwp87t9XyI= X-CTU-FNSPE-Virus-Scanned: amavisd-new at fjfi.cvut.cz Received: from mailgw1.fjfi.cvut.cz ([127.0.0.1]) by localhost (mailgw1.fjfi.cvut.cz [127.0.0.1]) (amavisd-new, port 10022) with ESMTP id Xby_PP0EXNIP; Thu, 14 Feb 2019 01:16:58 +0100 (CET) Received: from linux.fjfi.cvut.cz (linux.fjfi.cvut.cz [147.32.5.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mailgw1.fjfi.cvut.cz (Postfix) with ESMTPS id BB473AA274; Thu, 14 Feb 2019 01:16:58 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 mailgw1.fjfi.cvut.cz BB473AA274 Received: by linux.fjfi.cvut.cz (Postfix, from userid 1001) id 9F0B26004E; Thu, 14 Feb 2019 01:16:58 +0100 (CET) From: David Kozub To: Jens Axboe , Jonathan Derrick , Scott Bauer , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Jonas Rabenstein , David Kozub Subject: [PATCH 10/16] block: sed-opal: split generation of bytestring header and content Date: Thu, 14 Feb 2019 01:16:02 +0100 Message-Id: <1550103368-4605-11-git-send-email-zub@linux.fjfi.cvut.cz> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1550103368-4605-1-git-send-email-zub@linux.fjfi.cvut.cz> References: <1550103368-4605-1-git-send-email-zub@linux.fjfi.cvut.cz> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jonas Rabenstein Split the header generation from the (normal) memcpy part if a bytestring is copied into the command buffer. This allows in-place generation of the bytestring content. For example, copy_from_user may be used without an intermediate buffer. Signed-off-by: Jonas Rabenstein Signed-off-by: David Kozub Reviewed-by: Scott Bauer Reviewed-by: Christoph Hellwig Reviewed-by: Jon Derrick --- block/sed-opal.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/block/sed-opal.c b/block/sed-opal.c index 1f246200b574..ad66d1dc725a 100644 --- a/block/sed-opal.c +++ b/block/sed-opal.c @@ -580,15 +580,11 @@ static void add_token_u64(int *err, struct opal_dev *cmd, u64 number) add_token_u8(err, cmd, number >> (len * 8)); } -static void add_token_bytestring(int *err, struct opal_dev *cmd, - const u8 *bytestring, size_t len) +static u8 *add_bytestring_header(int *err, struct opal_dev *cmd, size_t len) { size_t header_len = 1; bool is_short_atom = true; - if (*err) - return; - if (len & ~SHORT_ATOM_LEN_MASK) { header_len = 2; is_short_atom = false; @@ -596,7 +592,7 @@ static void add_token_bytestring(int *err, struct opal_dev *cmd, if (!can_add(err, cmd, header_len + len)) { pr_debug("Error adding bytestring: end of buffer.\n"); - return; + return NULL; } if (is_short_atom) @@ -604,9 +600,19 @@ static void add_token_bytestring(int *err, struct opal_dev *cmd, else add_medium_atom_header(cmd, true, false, len); - memcpy(&cmd->cmd[cmd->pos], bytestring, len); - cmd->pos += len; + return &cmd->cmd[cmd->pos]; +} +static void add_token_bytestring(int *err, struct opal_dev *cmd, + const u8 *bytestring, size_t len) +{ + u8 *start; + + start = add_bytestring_header(err, cmd, len); + if (!start) + return; + memcpy(start, bytestring, len); + cmd->pos += len; } static int build_locking_range(u8 *buffer, size_t length, u8 lr) -- 2.20.1