Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp187069imu; Tue, 8 Jan 2019 17:30:23 -0800 (PST) X-Google-Smtp-Source: ALg8bN6gGGhLDQKfZwUvnlY+KT1HpVsYJKo6kX4rxU5XC1HdajShvqK3bVk+zm3x+levflhF19dd X-Received: by 2002:a62:6cc9:: with SMTP id h192mr3976830pfc.223.1546997423425; Tue, 08 Jan 2019 17:30:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546997423; cv=none; d=google.com; s=arc-20160816; b=ZUg/mhKlRX+6gAoNoaN8qENgW1hUTJB1CFI/x+YMwJhQq/9vbIqJ3Eust/z+S4Yq0D plIRowjA3ioDi5can8bqWQ/orxVOzynsL4949yKQzjOPiSIjAER9Zh9eoYlhB6z+y4/v mEwytiaCepa5dv3/BLU5PrPkTQB/pdCiG2M0Rgfqa8SSn7GkzRBYIo/hGllh7qU7kY2Q xiJQ8WfQa+QGv91PzFZ01F+AsOJiFIwfcTa+l3wts4Kt6hux65JSM8e55e08ag0OcaIs P9RKCjvyhsZYHS48Brs6DPdukvPF0oSF7dVGhzeCqbPxzysJjLGstuNpFd0TfXK7gkPs Oidw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature; bh=q47fy5loRUVHIb1UHgPKU7qjSvOh44KxpjwL74IynKk=; b=cFn8WWRlGIPZPyJEA5zsLLohCgdXYgpmk6WkiY5kydsFDfgs4DNbgaJLaT7HDrw7as 7Qx7QzM75QFZTnX1X9jaymrUvvceS71rLgy1xYoAs3dKXJhv+zSLKmZN6D1GbMj8MbdW 18toYrtY2UVOWp+Ldeo2BLKtI4Gb6fksNyBBSv7VJ7nOU/uK5PKVM0w2uLcPYMa+XEmC NZgAml7YenVrmunQLz/WqK/dhFCF/u5HaFQJyQxgAkxXZDzkF+RvJEdvWwdvCBJiRCIt fNblhjmf90+rkrlkBKjYJ5IG1tkg6eNwFm5YRTKFzfvSSVDAJwDwDMSnOTE/f07sq4sw S3Ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Cvfh3DJP; 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 o10si18368149pls.76.2019.01.08.17.30.08; Tue, 08 Jan 2019 17:30:23 -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=fail header.i=@gmail.com header.s=20161025 header.b=Cvfh3DJP; 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 S1729834AbfAIB2a (ORCPT + 99 others); Tue, 8 Jan 2019 20:28:30 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41087 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729645AbfAIB1p (ORCPT ); Tue, 8 Jan 2019 20:27:45 -0500 Received: by mail-wr1-f65.google.com with SMTP id x10so5984472wrs.8; Tue, 08 Jan 2019 17:27:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q47fy5loRUVHIb1UHgPKU7qjSvOh44KxpjwL74IynKk=; b=Cvfh3DJP6og4ubbL0MrP2lOwA5Ojygy7cKT6XOfRGum6aX5ZGAOFr0GYRASnzh2mVf Kmz2lJthhLXOp4odt+TCFd2+RcwAtxIdc96ZClDspg1BVtzauAeLzluXZ8kRhnJrXjB1 DCZLr9MaTUYBsD9yhtNZ+OXAg2zNiFE5JsR7iHrC0Xwo3ksZIBkGOQFdXuS1vm5/HZkT eb2YcINixiWZDRDMTCBUmkOrKcEhErbs85bMRMo7lg+vwQFf4wAcHYtXOe5BAiY5iw/1 vhu3xlfKpTtCYRa5uWGwt8mAIZQ9vk11dck30Sr0g8gnj5dX6q5rnr/3opd6NfqTJmB3 Ryjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=q47fy5loRUVHIb1UHgPKU7qjSvOh44KxpjwL74IynKk=; b=qhLVl4ZZK7Bv5JwLIsjIZ6UnkPTzThY81QyXNCQFQSLKPDlemCJqAPZOdBscYSnVLp 3R7ifGz2YZFBpw2/OdIVboH+wCPxfjDNZExYbK9ltx2k+6ezjP8IxNf/2NGTmuZJRCla 7eSWqjOw0KEsg0yzTbp/AtkaCaVP7hgTIuG2y5hkYZSY7AC31orxqOQW9egtmUI9Zt2v c4BanmVohaDUwhbZNEHMxzl95WnCTN461wm3Hwazl+vt6NSH57/f174AR8i3QtAcJ35R WC7WkiAzhrPLUsuMN5VYQpFV4ieU52eRgja47fqLVMiXKeHsY3CYY25roGHXAPh9S53+ pJQw== X-Gm-Message-State: AJcUukdnIwIDjxxskeG4I+eHGhGSkwG1fKweU8bOfG+XGICyor0SEC4v 7hCt/rYtTsVAekbVdEIgk8E= X-Received: by 2002:a5d:6889:: with SMTP id h9mr3090108wru.222.1546997264067; Tue, 08 Jan 2019 17:27:44 -0800 (PST) Received: from beren.harmstone.com ([88.97.13.154]) by smtp.gmail.com with ESMTPSA id y34sm156915088wrd.68.2019.01.08.17.27.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Jan 2019 17:27:43 -0800 (PST) From: Mark Harmstone Cc: mark@harmstone.com, Chris Mason , Josef Bacik , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 14/19] btrfs: allow reading compressed encrypted extents Date: Wed, 9 Jan 2019 01:26:56 +0000 Message-Id: <20190109012701.26441-14-mark@harmstone.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190109012701.26441-1-mark@harmstone.com> References: <20190109012701.26441-1-mark@harmstone.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Mark Harmstone --- fs/btrfs/compression.c | 22 ++++++++++++++++++++++ fs/btrfs/compression.h | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index 2955a4ea2fa8..55d7b97a7dc9 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -26,6 +26,7 @@ #include "compression.h" #include "extent_io.h" #include "extent_map.h" +#include "encryption.h" static const char* const btrfs_compress_types[] = { "", "zlib", "lzo", "zstd" }; @@ -139,6 +140,20 @@ static void end_compressed_bio_read(struct bio *bio) if (ret) goto csum_failed; + if (cb->key_number != 0) { + struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); + unsigned int i; + + for (i = 0; i < cb->nr_pages; i++) { + ret = btrfs_decrypt_page(fs_info, + cb->compressed_pages[i], cb->key_number, + cb->iv); + + if (ret) + goto csum_failed; + } + } + /* ok, we're the last bio for this extent, lets start * the decompression. */ @@ -568,6 +583,13 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, em_len = em->len; em_start = em->start; + if (em->encrypt_type == BTRFS_ENCRYPTION_NONE) { + cb->key_number = 0; + } else { + cb->key_number = em->key_number; + memcpy(cb->iv, em->iv, BTRFS_ENCRYPTION_BLOCK_LENGTH); + } + free_extent_map(em); em = NULL; diff --git a/fs/btrfs/compression.h b/fs/btrfs/compression.h index ddda9b80bf20..86a536d8cd5f 100644 --- a/fs/btrfs/compression.h +++ b/fs/btrfs/compression.h @@ -7,6 +7,7 @@ #define BTRFS_COMPRESSION_H #include +#include /* * We want to make sure that amount of RAM required to uncompress an extent is @@ -54,6 +55,12 @@ struct compressed_bio { int errors; int mirror_num; + /* encryption key number */ + u64 key_number; + + /* encryption initialization vector */ + char iv[BTRFS_ENCRYPTION_BLOCK_LENGTH]; + /* for reads, this is the bio we are copying the data into */ struct bio *orig_bio; -- 2.19.2