Skip to content

Commit 4601b79

Browse files
committed
nbd: don't copy kernel creds
No need to copy kernel credentials. Link: https://patch.msgid.link/20251103-work-creds-init_cred-v1-6-cb3ec8711a6a@kernel.org Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent b9e3594 commit 4601b79

1 file changed

Lines changed: 21 additions & 33 deletions

File tree

drivers/block/nbd.c

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
static DEFINE_IDR(nbd_index_idr);
5353
static DEFINE_MUTEX(nbd_index_mutex);
5454
static struct workqueue_struct *nbd_del_wq;
55-
static struct cred *nbd_cred;
5655
static int nbd_total_devices = 0;
5756

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

560558
if (unlikely(!sock)) {
561559
dev_err_ratelimited(disk_to_dev(nbd->disk),
@@ -564,33 +562,32 @@ static int __sock_xmit(struct nbd_device *nbd, struct socket *sock, int send,
564562
return -EINVAL;
565563
}
566564

567-
old_cred = override_creds(nbd_cred);
568-
569565
msg.msg_iter = *iter;
570566

571567
noreclaim_flag = memalloc_noreclaim_save();
572-
do {
573-
sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC;
574-
sock->sk->sk_use_task_frag = false;
575-
msg.msg_flags = msg_flags | MSG_NOSIGNAL;
576-
577-
if (send)
578-
result = sock_sendmsg(sock, &msg);
579-
else
580-
result = sock_recvmsg(sock, &msg, msg.msg_flags);
581-
582-
if (result <= 0) {
583-
if (result == 0)
584-
result = -EPIPE; /* short read */
585-
break;
586-
}
587-
if (sent)
588-
*sent += result;
589-
} while (msg_data_left(&msg));
590568

591-
memalloc_noreclaim_restore(noreclaim_flag);
569+
scoped_with_kernel_creds() {
570+
do {
571+
sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC;
572+
sock->sk->sk_use_task_frag = false;
573+
msg.msg_flags = msg_flags | MSG_NOSIGNAL;
592574

593-
revert_creds(old_cred);
575+
if (send)
576+
result = sock_sendmsg(sock, &msg);
577+
else
578+
result = sock_recvmsg(sock, &msg, msg.msg_flags);
579+
580+
if (result <= 0) {
581+
if (result == 0)
582+
result = -EPIPE; /* short read */
583+
break;
584+
}
585+
if (sent)
586+
*sent += result;
587+
} while (msg_data_left(&msg));
588+
}
589+
590+
memalloc_noreclaim_restore(noreclaim_flag);
594591

595592
return result;
596593
}
@@ -2683,15 +2680,7 @@ static int __init nbd_init(void)
26832680
return -ENOMEM;
26842681
}
26852682

2686-
nbd_cred = prepare_kernel_cred(&init_task);
2687-
if (!nbd_cred) {
2688-
destroy_workqueue(nbd_del_wq);
2689-
unregister_blkdev(NBD_MAJOR, "nbd");
2690-
return -ENOMEM;
2691-
}
2692-
26932683
if (genl_register_family(&nbd_genl_family)) {
2694-
put_cred(nbd_cred);
26952684
destroy_workqueue(nbd_del_wq);
26962685
unregister_blkdev(NBD_MAJOR, "nbd");
26972686
return -EINVAL;
@@ -2746,7 +2735,6 @@ static void __exit nbd_cleanup(void)
27462735
/* Also wait for nbd_dev_remove_work() completes */
27472736
destroy_workqueue(nbd_del_wq);
27482737

2749-
put_cred(nbd_cred);
27502738
idr_destroy(&nbd_index_idr);
27512739
unregister_blkdev(NBD_MAJOR, "nbd");
27522740
}

0 commit comments

Comments
 (0)