Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2406488imu; Thu, 17 Jan 2019 13:39:36 -0800 (PST) X-Google-Smtp-Source: ALg8bN6PCxhUXJaIpksRQf2qnfH5qgG6vZnQVgMD4kp7EAPBclh+0Q8P7a60ywNNvTnxW5Yiwtiz X-Received: by 2002:a17:902:8ec8:: with SMTP id x8mr16746828plo.210.1547761176295; Thu, 17 Jan 2019 13:39:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547761176; cv=none; d=google.com; s=arc-20160816; b=Upj+rllcuHflgc0668wlGiXc1lu6c6k6HXNCVCExPxdteGrAiRHgj1ydVLw4oIWfF/ IdJwp4LDylrOvvBJpFFwkrnK8ztZ0aqdRAWEPf2T4kIUQmFKD8RH8IJD7bX0haM17gTO /kRoMrpKl8f6a7a80q3OKbURzVgnY7hzKjlb+EcgpkVRQ90vCknXD0H0RCyjpmk5Oke5 nTWxaBw0NjzUYUfup2ZNFR9X6LD5IemwqHOEX12FMEz8V5ucGIwnyBQ5io65RnfBiyqf gEwBOJY8NrsrYDkLsHSzkZ2UJE1Kn0PJhP0obXwV9TiUba42r0V9JgSbYguxu2/3whAm 5WNw== 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=MEESl4A/2jxb5kfsRaHIZGVeQQPKTw1/FScREofDiGI=; b=a6NpEXYcH0tFJdGvWqG1zoM7G7OYPf9NAznhbrkbQSCJtqcacsqD2AKtl9rxThtNrj F9LsDnIZcxFuh0plEJxzwqN695L3bCDUC9Vy80XlP2K5F0hK8YN0uw3fT772m7gF0d7b aeCGLLUbJr/ZFFORQr0DoI7Qh2MPZGnayBnHlMa7HH0zq3XLUqf6+9stQbqzt6+PUeor rG0/Z3C2hKQUiHTCRnVCse7PWGEd33pqMnCKcRh5Pg9LPGdRKEVBm/LGp7LdeOqBUwcn 1WYqgHP21nfwvGCGavEZ2wOPoyecS3pIQTEwor2KQJqeBcRfHue9ocOUQuyiDWYgpF3j iQBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fjfi.cvut.cz header.s=20151024 header.b=EoZAQGqM; 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 b14si2956705plk.333.2019.01.17.13.39.20; Thu, 17 Jan 2019 13:39:36 -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=EoZAQGqM; 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 S1729479AbfAQVeh (ORCPT + 99 others); Thu, 17 Jan 2019 16:34:37 -0500 Received: from mailgw1.fjfi.cvut.cz ([147.32.9.3]:35436 "EHLO mailgw1.fjfi.cvut.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726809AbfAQVdY (ORCPT ); Thu, 17 Jan 2019 16:33:24 -0500 Received: from localhost (localhost [127.0.0.1]) by mailgw1.fjfi.cvut.cz (Postfix) with ESMTP id 25EF6A3997; Thu, 17 Jan 2019 22:33:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fjfi.cvut.cz; s=20151024; t=1547760802; i=@fjfi.cvut.cz; bh=MEESl4A/2jxb5kfsRaHIZGVeQQPKTw1/FScREofDiGI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=EoZAQGqMWEcLACunHAxElDBGM+Wf3mv+xTyyL9laek06xjoE1fWdeSpWL7y6MT3hS hHz/ufyFiE2wwjQo8BGdsk7PZncI8rYZiYo0VgVN0Gd65p0qW+8li+IB1kBBUckgPv f5Zg+6dYlsrojp5sExotj54oCFAey++KT4fAmRnE= 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 rlIvsLJf5IhN; Thu, 17 Jan 2019 22:33:15 +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 9E709A3964; Thu, 17 Jan 2019 22:33:10 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 mailgw1.fjfi.cvut.cz 9E709A3964 Received: by linux.fjfi.cvut.cz (Postfix, from userid 1001) id 7FDFE6004F; Thu, 17 Jan 2019 22:33:10 +0100 (CET) From: David Kozub To: Jens Axboe , Jonathan Derrick , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Jonas Rabenstein Subject: [PATCH v2 09/16] block: sed-opal: split generation of bytestring header and content Date: Thu, 17 Jan 2019 22:31:49 +0100 Message-Id: <1547760716-7304-10-git-send-email-zub@linux.fjfi.cvut.cz> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1547760716-7304-1-git-send-email-zub@linux.fjfi.cvut.cz> References: <1547760716-7304-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 --- block/sed-opal.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/block/sed-opal.c b/block/sed-opal.c index 4225f23b2165..db966bbc5a05 100644 --- a/block/sed-opal.c +++ b/block/sed-opal.c @@ -586,14 +586,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; + char *start; if (len & ~SHORT_ATOM_LEN_MASK) { header_len = 2; @@ -602,17 +599,27 @@ 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) add_short_atom_header(cmd, true, false, len); else add_medium_atom_header(cmd, true, false, len); - - memcpy(&cmd->cmd[cmd->pos], bytestring, len); + start = &cmd->cmd[cmd->pos]; cmd->pos += len; + return start; +} +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); } static int build_locking_range(u8 *buffer, size_t length, u8 lr) -- 2.20.1