All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] btrfs: send: add support for fs-verity
@ 2022-07-28 18:11 Boris Burkov
  2022-07-31 10:35 ` kernel test robot
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Boris Burkov @ 2022-07-28 18:11 UTC (permalink / raw)
  To: linux-fscrypt, linux-btrfs, kernel-team

Preserve the fs-verity status of a btrfs file across send/recv.

There is no facility for installing the Merkle tree contents directly on
the receiving filesystem, so we package up the parameters used to enable
verity found in the verity descriptor. This gives the receive side
enough information to properly enable verity again. Note that this means
that receive will have to re-compute the whole Merkle tree, similar to
how compression worked before encoded_write.

Since the file becomes read-only after verity is enabled, it is
important that verity is added to the send stream after any file writes.
Therefore, when we process a verity item, merely note that it happened,
then actually create the command in the send stream during
'finish_inode_if_needed'.

This also creates V3 of the send stream format, without any format
changes besides adding the new commands and attributes.

Signed-off-by: Boris Burkov <boris@bur.io>

--
Changes in v2:
- Allocate 16K with kvmalloc and keep it around till the end of send
  instead of re-allocating on each file with fs-verity.
- Use unsigned literal for bitshift.
---
 fs/btrfs/send.c              | 99 ++++++++++++++++++++++++++++++++++++
 fs/btrfs/send.h              | 15 ++++--
 fs/verity/fsverity_private.h |  2 -
 include/linux/fsverity.h     |  3 ++
 4 files changed, 114 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index e7671afcee4f..d922b56c3b21 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -15,6 +15,7 @@
 #include <linux/string.h>
 #include <linux/compat.h>
 #include <linux/crc32c.h>
+#include <linux/fsverity.h>
 
 #include "send.h"
 #include "ctree.h"
@@ -127,6 +128,8 @@ struct send_ctx {
 	bool cur_inode_new_gen;
 	bool cur_inode_deleted;
 	bool ignore_cur_inode;
+	bool cur_inode_needs_verity;
+	void *verity_descriptor;
 
 	u64 send_progress;
 
@@ -624,6 +627,7 @@ static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len)
 		return tlv_put(sctx, attr, &__tmp, sizeof(__tmp));	\
 	}
 
+TLV_PUT_DEFINE_INT(8)
 TLV_PUT_DEFINE_INT(32)
 TLV_PUT_DEFINE_INT(64)
 
@@ -4886,6 +4890,79 @@ static int process_all_new_xattrs(struct send_ctx *sctx)
 	return ret;
 }
 
+static int send_verity(struct send_ctx *sctx, struct fs_path *path,
+		       struct fsverity_descriptor *desc)
+{
+	int ret;
+
+	ret = begin_cmd(sctx, BTRFS_SEND_C_ENABLE_VERITY);
+	if (ret < 0)
+		goto out;
+
+	TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path);
+	TLV_PUT_U8(sctx, BTRFS_SEND_A_VERITY_ALGORITHM, desc->hash_algorithm);
+	TLV_PUT_U32(sctx, BTRFS_SEND_A_VERITY_BLOCK_SIZE, 1U << desc->log_blocksize);
+	TLV_PUT(sctx, BTRFS_SEND_A_VERITY_SALT_DATA, desc->salt, desc->salt_size);
+	TLV_PUT(sctx, BTRFS_SEND_A_VERITY_SIG_DATA, desc->signature, desc->sig_size);
+
+	ret = send_cmd(sctx);
+
+tlv_put_failure:
+out:
+	return ret;
+}
+
+static int process_new_verity(struct send_ctx *sctx)
+{
+	int ret = 0;
+	struct btrfs_fs_info *fs_info = sctx->send_root->fs_info;
+	struct inode *inode;
+	struct fs_path *p;
+
+	inode = btrfs_iget(fs_info->sb, sctx->cur_ino, sctx->send_root);
+	if (IS_ERR(inode))
+		return PTR_ERR(inode);
+
+	ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);
+	if (ret < 0)
+		goto iput;
+
+	if (ret > FS_VERITY_MAX_DESCRIPTOR_SIZE) {
+		ret = -EMSGSIZE;
+		goto iput;
+	}
+	if (!sctx->verity_descriptor) {
+		sctx->verity_descriptor = kvmalloc(FS_VERITY_MAX_DESCRIPTOR_SIZE, GFP_KERNEL);
+		if (!sctx->verity_descriptor) {
+			ret = -ENOMEM;
+			goto iput;
+		}
+	}
+
+	ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
+	if (ret < 0)
+		goto iput;
+
+	p = fs_path_alloc();
+	if (!p) {
+		ret = -ENOMEM;
+		goto iput;
+	}
+	ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p);
+	if (ret < 0)
+		goto free_path;
+
+	ret = send_verity(sctx, p, sctx->verity_descriptor);
+	if (ret < 0)
+		goto free_path;
+
+free_path:
+	fs_path_free(p);
+iput:
+	iput(inode);
+	return ret;
+}
+
 static inline u64 max_send_read_size(const struct send_ctx *sctx)
 {
 	return sctx->send_max_size - SZ_16K;
@@ -6377,6 +6454,11 @@ static int finish_inode_if_needed(struct send_ctx *sctx, int at_end)
 		if (ret < 0)
 			goto out;
 	}
+	if (sctx->cur_inode_needs_verity) {
+		ret = process_new_verity(sctx);
+		if (ret < 0)
+			goto out;
+	}
 
 	ret = send_capabilities(sctx);
 	if (ret < 0)
@@ -6785,6 +6867,18 @@ static int changed_extent(struct send_ctx *sctx,
 	return ret;
 }
 
+static int changed_verity(struct send_ctx *sctx,
+			  enum btrfs_compare_tree_result result)
+{
+	int ret = 0;
+
+	if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) {
+		if (result == BTRFS_COMPARE_TREE_NEW)
+			sctx->cur_inode_needs_verity = true;
+	}
+	return ret;
+}
+
 static int dir_changed(struct send_ctx *sctx, u64 dir)
 {
 	u64 orig_gen, new_gen;
@@ -6939,6 +7033,9 @@ static int changed_cb(struct btrfs_path *left_path,
 			ret = changed_xattr(sctx, result);
 		else if (key->type == BTRFS_EXTENT_DATA_KEY)
 			ret = changed_extent(sctx, result);
+		else if (key->type == BTRFS_VERITY_DESC_ITEM_KEY &&
+			 key->offset == 0)
+			ret = changed_verity(sctx, result);
 	}
 
 out:
@@ -8036,6 +8133,8 @@ long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg)
 		kvfree(sctx->clone_roots);
 		kfree(sctx->send_buf_pages);
 		kvfree(sctx->send_buf);
+		if (sctx->verity_descriptor)
+			kvfree(sctx->verity_descriptor);
 
 		name_cache_free(sctx);
 
diff --git a/fs/btrfs/send.h b/fs/btrfs/send.h
index 4bb4e6a638cb..0a4537775e0c 100644
--- a/fs/btrfs/send.h
+++ b/fs/btrfs/send.h
@@ -92,8 +92,11 @@ enum btrfs_send_cmd {
 	BTRFS_SEND_C_ENCODED_WRITE	= 25,
 	BTRFS_SEND_C_MAX_V2		= 25,
 
+	/* Version 3 */
+	BTRFS_SEND_C_ENABLE_VERITY	= 26,
+	BTRFS_SEND_C_MAX_V3		= 26,
 	/* End */
-	BTRFS_SEND_C_MAX		= 25,
+	BTRFS_SEND_C_MAX		= 26,
 };
 
 /* attributes in send stream */
@@ -160,8 +163,14 @@ enum {
 	BTRFS_SEND_A_ENCRYPTION		= 31,
 	BTRFS_SEND_A_MAX_V2		= 31,
 
-	/* End */
-	BTRFS_SEND_A_MAX		= 31,
+	/* Version 3 */
+	BTRFS_SEND_A_VERITY_ALGORITHM	= 32,
+	BTRFS_SEND_A_VERITY_BLOCK_SIZE	= 33,
+	BTRFS_SEND_A_VERITY_SALT_DATA	= 34,
+	BTRFS_SEND_A_VERITY_SIG_DATA	= 35,
+	BTRFS_SEND_A_MAX_V3		= 35,
+
+	__BTRFS_SEND_A_MAX		= 35,
 };
 
 long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg);
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index 629785c95007..dbe1ce5b450a 100644
--- a/fs/verity/fsverity_private.h
+++ b/fs/verity/fsverity_private.h
@@ -70,8 +70,6 @@ struct fsverity_info {
 	const struct inode *inode;
 };
 
-/* Arbitrary limit to bound the kmalloc() size.  Can be changed. */
-#define FS_VERITY_MAX_DESCRIPTOR_SIZE	16384
 
 #define FS_VERITY_MAX_SIGNATURE_SIZE	(FS_VERITY_MAX_DESCRIPTOR_SIZE - \
 					 sizeof(struct fsverity_descriptor))
diff --git a/include/linux/fsverity.h b/include/linux/fsverity.h
index 7af030fa3c36..40f14e5fed9d 100644
--- a/include/linux/fsverity.h
+++ b/include/linux/fsverity.h
@@ -22,6 +22,9 @@
  */
 #define FS_VERITY_MAX_DIGEST_SIZE	SHA512_DIGEST_SIZE
 
+/* Arbitrary limit to bound the kmalloc() size.  Can be changed. */
+#define FS_VERITY_MAX_DESCRIPTOR_SIZE	16384
+
 /* Verity operations for filesystems */
 struct fsverity_operations {
 
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
  2022-07-28 18:11 [PATCH v2] btrfs: send: add support for fs-verity Boris Burkov
@ 2022-07-31 10:35 ` kernel test robot
  2022-08-02 14:42     ` David Sterba
  2022-07-31 14:19 ` kernel test robot
  2022-08-02 14:58 ` David Sterba
  2 siblings, 1 reply; 8+ messages in thread
From: kernel test robot @ 2022-07-31 10:35 UTC (permalink / raw)
  To: Boris Burkov, linux-fscrypt, linux-btrfs, kernel-team; +Cc: kbuild-all

Hi Boris,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on kdave/for-next]
[also build test WARNING on next-20220728]
[cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: i386-randconfig-s002 (https://download.01.org/0day-ci/archive/20220731/202207311836.xrPNTFhA-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
        git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash fs/btrfs/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

sparse warnings: (new ones prefixed by >>)
>> fs/btrfs/send.c:4906:9: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected int len @@     got restricted __le32 [usertype] sig_size @@
   fs/btrfs/send.c:4906:9: sparse:     expected int len
   fs/btrfs/send.c:4906:9: sparse:     got restricted __le32 [usertype] sig_size

vim +4906 fs/btrfs/send.c

  4892	
  4893	static int send_verity(struct send_ctx *sctx, struct fs_path *path,
  4894			       struct fsverity_descriptor *desc)
  4895	{
  4896		int ret;
  4897	
  4898		ret = begin_cmd(sctx, BTRFS_SEND_C_ENABLE_VERITY);
  4899		if (ret < 0)
  4900			goto out;
  4901	
  4902		TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path);
  4903		TLV_PUT_U8(sctx, BTRFS_SEND_A_VERITY_ALGORITHM, desc->hash_algorithm);
  4904		TLV_PUT_U32(sctx, BTRFS_SEND_A_VERITY_BLOCK_SIZE, 1U << desc->log_blocksize);
  4905		TLV_PUT(sctx, BTRFS_SEND_A_VERITY_SALT_DATA, desc->salt, desc->salt_size);
> 4906		TLV_PUT(sctx, BTRFS_SEND_A_VERITY_SIG_DATA, desc->signature, desc->sig_size);
  4907	
  4908		ret = send_cmd(sctx);
  4909	
  4910	tlv_put_failure:
  4911	out:
  4912		return ret;
  4913	}
  4914	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
  2022-07-28 18:11 [PATCH v2] btrfs: send: add support for fs-verity Boris Burkov
  2022-07-31 10:35 ` kernel test robot
@ 2022-07-31 14:19 ` kernel test robot
  2022-08-02 14:35     ` David Sterba
  2022-08-02 14:58 ` David Sterba
  2 siblings, 1 reply; 8+ messages in thread
From: kernel test robot @ 2022-07-31 14:19 UTC (permalink / raw)
  To: Boris Burkov, linux-fscrypt, linux-btrfs, kernel-team; +Cc: kbuild-all

Hi Boris,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on kdave/for-next]
[also build test ERROR on next-20220728]
[cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: arc-randconfig-r025-20220731 (https://download.01.org/0day-ci/archive/20220731/202207312226.d2uCDX53-lkp@intel.com/config)
compiler: arceb-elf-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
        git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arc SHELL=/bin/bash fs/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   fs/btrfs/send.c: In function 'process_new_verity':
>> fs/btrfs/send.c:4926:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
    4926 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);
         |                            ^~~~~
         |                            s_op
   fs/btrfs/send.c:4942:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
    4942 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
         |                            ^~~~~
         |                            s_op


vim +4926 fs/btrfs/send.c

  4914	
  4915	static int process_new_verity(struct send_ctx *sctx)
  4916	{
  4917		int ret = 0;
  4918		struct btrfs_fs_info *fs_info = sctx->send_root->fs_info;
  4919		struct inode *inode;
  4920		struct fs_path *p;
  4921	
  4922		inode = btrfs_iget(fs_info->sb, sctx->cur_ino, sctx->send_root);
  4923		if (IS_ERR(inode))
  4924			return PTR_ERR(inode);
  4925	
> 4926		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);
  4927		if (ret < 0)
  4928			goto iput;
  4929	
  4930		if (ret > FS_VERITY_MAX_DESCRIPTOR_SIZE) {
  4931			ret = -EMSGSIZE;
  4932			goto iput;
  4933		}
  4934		if (!sctx->verity_descriptor) {
  4935			sctx->verity_descriptor = kvmalloc(FS_VERITY_MAX_DESCRIPTOR_SIZE, GFP_KERNEL);
  4936			if (!sctx->verity_descriptor) {
  4937				ret = -ENOMEM;
  4938				goto iput;
  4939			}
  4940		}
  4941	
  4942		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
  4943		if (ret < 0)
  4944			goto iput;
  4945	
  4946		p = fs_path_alloc();
  4947		if (!p) {
  4948			ret = -ENOMEM;
  4949			goto iput;
  4950		}
  4951		ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p);
  4952		if (ret < 0)
  4953			goto free_path;
  4954	
  4955		ret = send_verity(sctx, p, sctx->verity_descriptor);
  4956		if (ret < 0)
  4957			goto free_path;
  4958	
  4959	free_path:
  4960		fs_path_free(p);
  4961	iput:
  4962		iput(inode);
  4963		return ret;
  4964	}
  4965	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
  2022-07-31 14:19 ` kernel test robot
@ 2022-08-02 14:35     ` David Sterba
  0 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2022-08-02 14:35 UTC (permalink / raw)
  To: kernel test robot
  Cc: Boris Burkov, linux-fscrypt, linux-btrfs, kernel-team, kbuild-all

On Sun, Jul 31, 2022 at 10:19:28PM +0800, kernel test robot wrote:
> Hi Boris,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on kdave/for-next]
> [also build test ERROR on next-20220728]
> [cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
> config: arc-randconfig-r025-20220731 (https://download.01.org/0day-ci/archive/20220731/202207312226.d2uCDX53-lkp@intel.com/config)
> compiler: arceb-elf-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
>         git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arc SHELL=/bin/bash fs/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    fs/btrfs/send.c: In function 'process_new_verity':
> >> fs/btrfs/send.c:4926:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
>     4926 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);
>          |                            ^~~~~
>          |                            s_op
>    fs/btrfs/send.c:4942:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
>     4942 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
>          |                            ^~~~~
>          |                            s_op
> 
> 
> vim +4926 fs/btrfs/send.c
> 
>   4914	
>   4915	static int process_new_verity(struct send_ctx *sctx)
>   4916	{
>   4917		int ret = 0;
>   4918		struct btrfs_fs_info *fs_info = sctx->send_root->fs_info;
>   4919		struct inode *inode;
>   4920		struct fs_path *p;
>   4921	
>   4922		inode = btrfs_iget(fs_info->sb, sctx->cur_ino, sctx->send_root);
>   4923		if (IS_ERR(inode))
>   4924			return PTR_ERR(inode);
>   4925	
> > 4926		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);

sb::s_vop is under ifdef CONFIG_FS_VERITY so you'll need to ifdef the
verity callbacks.

>   4927		if (ret < 0)
>   4928			goto iput;
>   4929	
>   4930		if (ret > FS_VERITY_MAX_DESCRIPTOR_SIZE) {
>   4931			ret = -EMSGSIZE;
>   4932			goto iput;
>   4933		}
>   4934		if (!sctx->verity_descriptor) {
>   4935			sctx->verity_descriptor = kvmalloc(FS_VERITY_MAX_DESCRIPTOR_SIZE, GFP_KERNEL);
>   4936			if (!sctx->verity_descriptor) {
>   4937				ret = -ENOMEM;
>   4938				goto iput;
>   4939			}
>   4940		}
>   4941	
>   4942		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
>   4943		if (ret < 0)
>   4944			goto iput;
>   4945	
>   4946		p = fs_path_alloc();
>   4947		if (!p) {
>   4948			ret = -ENOMEM;
>   4949			goto iput;
>   4950		}
>   4951		ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p);
>   4952		if (ret < 0)
>   4953			goto free_path;
>   4954	
>   4955		ret = send_verity(sctx, p, sctx->verity_descriptor);
>   4956		if (ret < 0)
>   4957			goto free_path;
>   4958	
>   4959	free_path:
>   4960		fs_path_free(p);
>   4961	iput:
>   4962		iput(inode);
>   4963		return ret;
>   4964	}
>   4965	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
@ 2022-08-02 14:35     ` David Sterba
  0 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2022-08-02 14:35 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 4267 bytes --]

On Sun, Jul 31, 2022 at 10:19:28PM +0800, kernel test robot wrote:
> Hi Boris,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on kdave/for-next]
> [also build test ERROR on next-20220728]
> [cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
> config: arc-randconfig-r025-20220731 (https://download.01.org/0day-ci/archive/20220731/202207312226.d2uCDX53-lkp(a)intel.com/config)
> compiler: arceb-elf-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
>         git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arc SHELL=/bin/bash fs/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    fs/btrfs/send.c: In function 'process_new_verity':
> >> fs/btrfs/send.c:4926:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
>     4926 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);
>          |                            ^~~~~
>          |                            s_op
>    fs/btrfs/send.c:4942:28: error: 'struct super_block' has no member named 's_vop'; did you mean 's_op'?
>     4942 |         ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
>          |                            ^~~~~
>          |                            s_op
> 
> 
> vim +4926 fs/btrfs/send.c
> 
>   4914	
>   4915	static int process_new_verity(struct send_ctx *sctx)
>   4916	{
>   4917		int ret = 0;
>   4918		struct btrfs_fs_info *fs_info = sctx->send_root->fs_info;
>   4919		struct inode *inode;
>   4920		struct fs_path *p;
>   4921	
>   4922		inode = btrfs_iget(fs_info->sb, sctx->cur_ino, sctx->send_root);
>   4923		if (IS_ERR(inode))
>   4924			return PTR_ERR(inode);
>   4925	
> > 4926		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, NULL, 0);

sb::s_vop is under ifdef CONFIG_FS_VERITY so you'll need to ifdef the
verity callbacks.

>   4927		if (ret < 0)
>   4928			goto iput;
>   4929	
>   4930		if (ret > FS_VERITY_MAX_DESCRIPTOR_SIZE) {
>   4931			ret = -EMSGSIZE;
>   4932			goto iput;
>   4933		}
>   4934		if (!sctx->verity_descriptor) {
>   4935			sctx->verity_descriptor = kvmalloc(FS_VERITY_MAX_DESCRIPTOR_SIZE, GFP_KERNEL);
>   4936			if (!sctx->verity_descriptor) {
>   4937				ret = -ENOMEM;
>   4938				goto iput;
>   4939			}
>   4940		}
>   4941	
>   4942		ret = fs_info->sb->s_vop->get_verity_descriptor(inode, sctx->verity_descriptor, ret);
>   4943		if (ret < 0)
>   4944			goto iput;
>   4945	
>   4946		p = fs_path_alloc();
>   4947		if (!p) {
>   4948			ret = -ENOMEM;
>   4949			goto iput;
>   4950		}
>   4951		ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p);
>   4952		if (ret < 0)
>   4953			goto free_path;
>   4954	
>   4955		ret = send_verity(sctx, p, sctx->verity_descriptor);
>   4956		if (ret < 0)
>   4957			goto free_path;
>   4958	
>   4959	free_path:
>   4960		fs_path_free(p);
>   4961	iput:
>   4962		iput(inode);
>   4963		return ret;
>   4964	}
>   4965	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
  2022-07-31 10:35 ` kernel test robot
@ 2022-08-02 14:42     ` David Sterba
  0 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2022-08-02 14:42 UTC (permalink / raw)
  To: kernel test robot
  Cc: Boris Burkov, linux-fscrypt, linux-btrfs, kernel-team, kbuild-all

On Sun, Jul 31, 2022 at 06:35:07PM +0800, kernel test robot wrote:
> Hi Boris,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on kdave/for-next]
> [also build test WARNING on next-20220728]
> [cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
> config: i386-randconfig-s002 (https://download.01.org/0day-ci/archive/20220731/202207311836.xrPNTFhA-lkp@intel.com/config)
> compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.4-39-gce1a6720-dirty
>         # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
>         git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash fs/btrfs/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> sparse warnings: (new ones prefixed by >>)
> >> fs/btrfs/send.c:4906:9: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected int len @@     got restricted __le32 [usertype] sig_size @@
>    fs/btrfs/send.c:4906:9: sparse:     expected int len
>    fs/btrfs/send.c:4906:9: sparse:     got restricted __le32 [usertype] sig_size

The types are compatible, should this use the get_unaligned_le32 or
what's the supposed fix?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
@ 2022-08-02 14:42     ` David Sterba
  0 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2022-08-02 14:42 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 2153 bytes --]

On Sun, Jul 31, 2022 at 06:35:07PM +0800, kernel test robot wrote:
> Hi Boris,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on kdave/for-next]
> [also build test WARNING on next-20220728]
> [cannot apply to fscrypt/fsverity linus/master v5.19-rc8]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
> config: i386-randconfig-s002 (https://download.01.org/0day-ci/archive/20220731/202207311836.xrPNTFhA-lkp(a)intel.com/config)
> compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.4-39-gce1a6720-dirty
>         # https://github.com/intel-lab-lkp/linux/commit/cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Boris-Burkov/btrfs-send-add-support-for-fs-verity/20220729-021228
>         git checkout cd0224725d17f6e9ebabdddeea5bc5743a9250ae
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash fs/btrfs/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> sparse warnings: (new ones prefixed by >>)
> >> fs/btrfs/send.c:4906:9: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected int len @@     got restricted __le32 [usertype] sig_size @@
>    fs/btrfs/send.c:4906:9: sparse:     expected int len
>    fs/btrfs/send.c:4906:9: sparse:     got restricted __le32 [usertype] sig_size

The types are compatible, should this use the get_unaligned_le32 or
what's the supposed fix?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] btrfs: send: add support for fs-verity
  2022-07-28 18:11 [PATCH v2] btrfs: send: add support for fs-verity Boris Burkov
  2022-07-31 10:35 ` kernel test robot
  2022-07-31 14:19 ` kernel test robot
@ 2022-08-02 14:58 ` David Sterba
  2 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2022-08-02 14:58 UTC (permalink / raw)
  To: Boris Burkov; +Cc: linux-fscrypt, linux-btrfs, kernel-team

On Thu, Jul 28, 2022 at 11:11:42AM -0700, Boris Burkov wrote:
> --- a/fs/btrfs/send.h
> +++ b/fs/btrfs/send.h
> @@ -92,8 +92,11 @@ enum btrfs_send_cmd {
>  	BTRFS_SEND_C_ENCODED_WRITE	= 25,
>  	BTRFS_SEND_C_MAX_V2		= 25,
>  
> +	/* Version 3 */
> +	BTRFS_SEND_C_ENABLE_VERITY	= 26,

Regarding the name, same name for ioctl and command is a good idea, for
potential future verity extensions we could add more and having plain
'VERITY' would not be ideal. The other ioctl is 'measure', so I thought
of something like consistency check during the stream, "verify this
file before continuing".

The command names are either imperative or descriptive, so alternative
name could be VERITY_RECORD or VERITY_DESC that matches the data stored,
the BTRFS_VERITY_DESC_ITEM_KEY .

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-08-02 15:03 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-28 18:11 [PATCH v2] btrfs: send: add support for fs-verity Boris Burkov
2022-07-31 10:35 ` kernel test robot
2022-08-02 14:42   ` David Sterba
2022-08-02 14:42     ` David Sterba
2022-07-31 14:19 ` kernel test robot
2022-08-02 14:35   ` David Sterba
2022-08-02 14:35     ` David Sterba
2022-08-02 14:58 ` David Sterba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.