Commit d2818517 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull block fixes from Jens Axboe:

 - Fix dma alignment for PI

 - Fix selinux bogosity with nbd, where sendmsg would get rejected

* tag 'block-6.18-20251023' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux:
  block: require LBA dma_alignment when using PI
  nbd: override creds to kernel when calling sock_{send,recv}msg()
parents 812e7eb2 4c8cf6bd
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -184,6 +184,16 @@ static int blk_validate_integrity_limits(struct queue_limits *lim)
	if (!bi->interval_exp)
		bi->interval_exp = ilog2(lim->logical_block_size);

	/*
	 * The PI generation / validation helpers do not expect intervals to
	 * straddle multiple bio_vecs.  Enforce alignment so that those are
	 * never generated, and that each buffer is aligned as expected.
	 */
	if (bi->csum_type) {
		lim->dma_alignment = max(lim->dma_alignment,
					(1U << bi->interval_exp) - 1);
	}

	return 0;
}

+15 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@
static DEFINE_IDR(nbd_index_idr);
static DEFINE_MUTEX(nbd_index_mutex);
static struct workqueue_struct *nbd_del_wq;
static struct cred *nbd_cred;
static int nbd_total_devices = 0;

struct nbd_sock {
@@ -554,6 +555,7 @@ static int __sock_xmit(struct nbd_device *nbd, struct socket *sock, int send,
	int result;
	struct msghdr msg = {} ;
	unsigned int noreclaim_flag;
	const struct cred *old_cred;

	if (unlikely(!sock)) {
		dev_err_ratelimited(disk_to_dev(nbd->disk),
@@ -562,6 +564,8 @@ static int __sock_xmit(struct nbd_device *nbd, struct socket *sock, int send,
		return -EINVAL;
	}

	old_cred = override_creds(nbd_cred);

	msg.msg_iter = *iter;

	noreclaim_flag = memalloc_noreclaim_save();
@@ -586,6 +590,8 @@ static int __sock_xmit(struct nbd_device *nbd, struct socket *sock, int send,

	memalloc_noreclaim_restore(noreclaim_flag);

	revert_creds(old_cred);

	return result;
}

@@ -2677,7 +2683,15 @@ static int __init nbd_init(void)
		return -ENOMEM;
	}

	nbd_cred = prepare_kernel_cred(&init_task);
	if (!nbd_cred) {
		destroy_workqueue(nbd_del_wq);
		unregister_blkdev(NBD_MAJOR, "nbd");
		return -ENOMEM;
	}

	if (genl_register_family(&nbd_genl_family)) {
		put_cred(nbd_cred);
		destroy_workqueue(nbd_del_wq);
		unregister_blkdev(NBD_MAJOR, "nbd");
		return -EINVAL;
@@ -2732,6 +2746,7 @@ static void __exit nbd_cleanup(void)
	/* Also wait for nbd_dev_remove_work() completes */
	destroy_workqueue(nbd_del_wq);

	put_cred(nbd_cred);
	idr_destroy(&nbd_index_idr);
	unregister_blkdev(NBD_MAJOR, "nbd");
}