5252static DEFINE_IDR (nbd_index_idr );
5353static DEFINE_MUTEX (nbd_index_mutex );
5454static struct workqueue_struct * nbd_del_wq ;
55- static struct cred * nbd_cred ;
5655static int nbd_total_devices = 0 ;
5756
5857struct 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