Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2530185pxb; Thu, 11 Feb 2021 15:09:05 -0800 (PST) X-Google-Smtp-Source: ABdhPJzHwtNu+u3Mt+huUnam6h5LYOxSZXwEbT610Zo5w+JNXDqpxfRYj0tQ3JKXNKyw21B8RU5Q X-Received: by 2002:a50:a086:: with SMTP id 6mr480821edo.70.1613084945153; Thu, 11 Feb 2021 15:09:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613084945; cv=none; d=google.com; s=arc-20160816; b=ZyisD3+uEER84ytsneQyWhsuk/TfGmmIakyAAbmuLFnyhnagQIT0CoNKPRGg7QG2QF HKXmyiVhGBEcIoOCyjKwy4KNR01n/O5uAkMvEgEdBvOQ4iTcqraXhXjqc9N1Mv0/ZOY0 LGGRAEmEPfzGDgIm3/3viQ12Q5zUqGrout5Bo/Ta4htMcf2a7INFY97mAJx6cA78LRCV Ic9tPxBG+iDmRZjFwxBDZJlcQAUk8nY/EGtcD5zM4nCspbvxIq+1m0rC6TtkMNBQV1wZ 7NrJEBHo7I43/LTylkAs0HeGX+rgzLeudkLpm/HTtt2aR2bsNk2zlIwc5IbT5euwPY5K bz1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=kOSQ9FxtB4hoNibVdtOMKqdtoCrNekc3FYoJgj8jmsE=; b=qYrUYTC5ZcRTK750EuAyDbqAdyBdfhUsMPLfdPCh08CLlg9UOZien8wR9lfMgahZH+ 9XYC1bV070tc1udFH6/emDLosKfpNIGWTXe7+DQ4ghCztwSXQ4x8w/Sgt19wNOi/RAvK TEx+MDQPDndpc6kFjpaQHnf3rv0jIJZ2lpwdNWarSnd0+5lmS+fA7hA3I/7Iur2ESu6s vVyiEjZ1MoTgTJVVfLmUtFuCoDK2/9TFEfeA1OQsOWPa8vczKENjXmcLmpypJ5xGLQuS hw1taoA6urXvYP5dedCN/oL/sHkuzOep7lft2q2/4ZU3wCbqfWBHTR+n+tHg+xjYkqii A2PA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GEEsKnoJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gf2si5282151ejb.154.2021.02.11.15.08.40; Thu, 11 Feb 2021 15:09:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GEEsKnoJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229997AbhBKXGg (ORCPT + 99 others); Thu, 11 Feb 2021 18:06:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:20667 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229478AbhBKXGe (ORCPT ); Thu, 11 Feb 2021 18:06:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1613084706; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=kOSQ9FxtB4hoNibVdtOMKqdtoCrNekc3FYoJgj8jmsE=; b=GEEsKnoJAgANdFfrSEWxZI6yTxGs0rUMkD/DgJACdMCM2VpPx6J1j/lHdr6+SD0bR7YMP3 tugTmAlcUWEnPhbX93uiNL+rBxwHOmgR97tda8BxBW77iDh7Ho+Z+iM280fbc4MhqlkFso zXRg0oVksNxcOWol57/atH2GsfBNinM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-250--H5t_W4vOXmH-GAEJ4tpWQ-1; Thu, 11 Feb 2021 18:05:04 -0500 X-MC-Unique: -H5t_W4vOXmH-GAEJ4tpWQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 451096D4E0; Thu, 11 Feb 2021 23:05:03 +0000 (UTC) Received: from localhost (unknown [10.18.25.174]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 15F105D9C2; Thu, 11 Feb 2021 23:05:00 +0000 (UTC) Date: Thu, 11 Feb 2021 18:04:59 -0500 From: Mike Snitzer To: Satya Tangirala Cc: Jens Axboe , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, dm-devel@redhat.com, Alasdair Kergon , Eric Biggers Subject: Re: [PATCH v4 0/5] add support for inline encryption to device mapper Message-ID: <20210211230459.GA15187@redhat.com> References: <20210201051019.1174983-1-satyat@google.com> <20210210193327.GA8226@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 11 2021 at 6:01pm -0500, Satya Tangirala wrote: > On Wed, Feb 10, 2021 at 12:59:59PM -0700, Jens Axboe wrote: > > On 2/10/21 12:33 PM, Mike Snitzer wrote: > > > On Mon, Feb 01 2021 at 12:10am -0500, > > > Satya Tangirala wrote: > > > > > >> This patch series adds support for inline encryption to the device mapper. > > >> > > >> Patch 1 introduces the "passthrough" keyslot manager. > > >> > > >> The regular keyslot manager is designed for inline encryption hardware that > > >> have only a small fixed number of keyslots. A DM device itself does not > > >> actually have only a small fixed number of keyslots - it doesn't actually > > >> have any keyslots in the first place, and programming an encryption context > > >> into a DM device doesn't make much semantic sense. It is possible for a DM > > >> device to set up a keyslot manager with some "sufficiently large" number of > > >> keyslots in its request queue, so that upper layers can use the inline > > >> encryption capabilities of the DM device's underlying devices, but the > > >> memory being allocated for the DM device's keyslots is a waste since they > > >> won't actually be used by the DM device. > > >> > > >> The passthrough keyslot manager solves this issue - when the block layer > > >> sees that a request queue has a passthrough keyslot manager, it doesn't > > >> attempt to program any encryption context into the keyslot manager. The > > >> passthrough keyslot manager only allows the device to expose its inline > > >> encryption capabilities, and a way for upper layers to evict keys if > > >> necessary. > > >> > > >> There also exist inline encryption hardware that can handle encryption > > >> contexts directly, and allow users to pass them a data request along with > > >> the encryption context (as opposed to inline encryption hardware that > > >> require users to first program a keyslot with an encryption context, and > > >> then require the users to pass the keyslot index with the data request). > > >> Such devices can also make use of the passthrough keyslot manager. > > >> > > >> Patch 2 introduces some keyslot manager functions useful for the device > > >> mapper. > > >> > > >> Patch 3 introduces the changes for inline encryption support for the device > > >> mapper. A DM device only exposes the intersection of the crypto > > >> capabilities of its underlying devices. This is so that in case a bio with > > >> an encryption context is eventually mapped to an underlying device that > > >> doesn't support that encryption context, the blk-crypto-fallback's cipher > > >> tfms are allocated ahead of time by the call to blk_crypto_start_using_key. > > >> > > >> Each DM target can now also specify the "DM_TARGET_PASSES_CRYPTO" flag in > > >> the target type features to opt-in to supporting passing through the > > >> underlying inline encryption capabilities. This flag is needed because it > > >> doesn't make much semantic sense for certain targets like dm-crypt to > > >> expose the underlying inline encryption capabilities to the upper layers. > > >> Again, the DM exposes inline encryption capabilities of the underlying > > >> devices only if all of them opt-in to passing through inline encryption > > >> support. > > >> > > >> A keyslot manager is created for a table when it is loaded. However, the > > >> mapped device's exposed capabilities *only* updated once the table is > > >> swapped in (until the new table is swapped in, the mapped device continues > > >> to expose the old table's crypto capabilities). > > >> > > >> This patch only allows the keyslot manager's capabilities to *expand* > > >> because of table changes. Any attempt to load a new table that doesn't > > >> support a crypto capability that the old table did is rejected. > > >> > > >> This patch also only exposes the intersection of the underlying device's > > >> capabilities, which has the effect of causing en/decryption of a bio to > > >> fall back to the kernel crypto API (if the fallback is enabled) whenever > > >> any of the underlying devices doesn't support the encryption context of the > > >> bio - it might be possible to make the bio only fall back to the kernel > > >> crypto API if the bio's target underlying device doesn't support the bio's > > >> encryption context, but the use case may be uncommon enough in the first > > >> place not to warrant worrying about it right now. > > >> > > >> Patch 4 makes DM evict a key from all its underlying devices when asked to > > >> evict a key. > > >> > > >> Patch 5 makes some DM targets opt-in to passing through inline encryption > > >> support. It does not (yet) try to enable this option with dm-raid, since > > >> users can "hot add" disks to a raid device, which makes this not completely > > >> straightforward (we'll need to ensure that any "hot added" disks must have > > >> a superset of the inline encryption capabilities of the rest of the disks > > >> in the raid device, due to the way Patch 2 of this series works). > > >> > > >> Changes v3 => v4: > > >> - Allocate the memory for the ksm of the mapped device in > > >> dm_table_complete(), and install the ksm in the md queue in __bind() > > >> (as suggested by Mike). Also drop patch 5 from v3 since it's no longer > > >> needed. > > >> - Some cleanups > > >> > > >> Changes v2 => v3: > > >> - Split up the main DM patch into 4 separate patches > > >> - Removed the priv variable added to struct keyslot manager in v2 > > >> - Use a flag in target type features for opting-in to inline encryption > > >> support, instead of using "may_passthrough_inline_crypto" > > >> - cleanups, improve docs and restructure code > > >> > > >> Changes v1 => v2: > > >> - Introduce private field to struct blk_keyslot_manager > > >> - Allow the DM keyslot manager to expand its crypto capabilities if the > > >> table is changed. > > >> - Make DM reject table changes that would otherwise cause crypto > > >> capabilities to be dropped. > > >> - Allocate the DM device's keyslot manager only when at least one crypto > > >> capability is supported (since a NULL value for q->ksm represents "no > > >> crypto support" anyway). > > >> - Remove the struct blk_keyslot_manager field from struct mapped_device. > > >> This patch now relies on just directly setting up the keyslot manager in > > >> the request queue, since each DM device is tied to only 1 queue. > > >> > > >> Satya Tangirala (5): > > >> block: keyslot-manager: Introduce passthrough keyslot manager > > >> block: keyslot-manager: Introduce functions for device mapper support > > >> dm: add support for passing through inline crypto support > > >> dm: support key eviction from keyslot managers of underlying devices > > >> dm: set DM_TARGET_PASSES_CRYPTO feature for some targets > > >> > > >> block/blk-crypto.c | 1 + > > >> block/keyslot-manager.c | 146 ++++++++++++++++++++++ > > >> drivers/md/dm-core.h | 5 + > > >> drivers/md/dm-flakey.c | 4 +- > > >> drivers/md/dm-linear.c | 5 +- > > >> drivers/md/dm-table.c | 210 ++++++++++++++++++++++++++++++++ > > >> drivers/md/dm.c | 18 ++- > > >> include/linux/device-mapper.h | 11 ++ > > >> include/linux/keyslot-manager.h | 11 ++ > > >> 9 files changed, 407 insertions(+), 4 deletions(-) > > >> > > >> -- > > >> 2.30.0.365.g02bc693789-goog > > >> > > > > > > This set looks good to me now. > > > > > > To avoid DM needing another rebase on block: Jens (and others), would > > > you like to review patches 1 and 2 (and reply with your Reviewed-by) so > > > I could pickup the DM required keyslot-manager changes along with > > > patches 3-5? > > > > You can add my acked-by to 1+2 and queue it up. > > > I resent the series (as v5) while addressing the comments Eric had on > Patch 3 (the changes were only to comments, so no functional > changes). I also added the acked/reviewed-bys. I took care of Eric's comments. And I already staged these changes in linux-next for dm-5.12, see: https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/log/?h=dm-5.12