diff options
author | Kees Cook <keescook@chromium.org> | 2013-07-03 18:04:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 19:07:41 -0400 |
commit | f170168b9a0b61ea1e647b082b38f605f1d3de3e (patch) | |
tree | 4381c129ee9af108e368e6c8255df53cbe233257 | |
parent | d8537548c924db3c44afde7646b6e220c7beb79d (diff) |
drivers: avoid parsing names as kthread_run() format strings
Calling kthread_run with a single name parameter causes it to be handled
as a format string. Many callers are passing potentially dynamic string
content, so use "%s" in those cases to avoid any potential accidents.
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/block/aoe/aoecmd.c | 2 | ||||
-rw-r--r-- | drivers/block/mtip32xx/mtip32xx.c | 3 | ||||
-rw-r--r-- | drivers/block/xen-blkback/xenbus.c | 2 | ||||
-rw-r--r-- | drivers/hwmon/adt7470.c | 2 | ||||
-rw-r--r-- | drivers/media/i2c/tvaudio.c | 3 | ||||
-rw-r--r-- | drivers/media/pci/ivtv/ivtv-driver.c | 2 | ||||
-rw-r--r-- | drivers/media/platform/vivi.c | 3 | ||||
-rw-r--r-- | drivers/mtd/ubi/build.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/airo.c | 3 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 3 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commsup.c | 3 | ||||
-rw-r--r-- | drivers/spi/spi.c | 2 | ||||
-rw-r--r-- | drivers/staging/rtl8712/os_intfs.c | 2 | ||||
-rw-r--r-- | drivers/usb/atm/usbatm.c | 5 | ||||
-rw-r--r-- | fs/lockd/svc.c | 2 | ||||
-rw-r--r-- | fs/nfs/callback.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4state.c | 2 | ||||
-rw-r--r-- | kernel/rcutree.c | 2 | ||||
-rw-r--r-- | net/sunrpc/svc.c | 2 |
19 files changed, 28 insertions, 22 deletions
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c index fc803ecbbce4..b75c7db16559 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c | |||
@@ -1340,7 +1340,7 @@ aoe_ktstart(struct ktstate *k) | |||
1340 | struct task_struct *task; | 1340 | struct task_struct *task; |
1341 | 1341 | ||
1342 | init_completion(&k->rendez); | 1342 | init_completion(&k->rendez); |
1343 | task = kthread_run(kthread, k, k->name); | 1343 | task = kthread_run(kthread, k, "%s", k->name); |
1344 | if (task == NULL || IS_ERR(task)) | 1344 | if (task == NULL || IS_ERR(task)) |
1345 | return -ENOMEM; | 1345 | return -ENOMEM; |
1346 | k->task = task; | 1346 | k->task = task; |
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c index 20dd52a2f92f..952dbfe22126 100644 --- a/drivers/block/mtip32xx/mtip32xx.c +++ b/drivers/block/mtip32xx/mtip32xx.c | |||
@@ -4087,7 +4087,8 @@ skip_create_disk: | |||
4087 | start_service_thread: | 4087 | start_service_thread: |
4088 | sprintf(thd_name, "mtip_svc_thd_%02d", index); | 4088 | sprintf(thd_name, "mtip_svc_thd_%02d", index); |
4089 | dd->mtip_svc_handler = kthread_create_on_node(mtip_service_thread, | 4089 | dd->mtip_svc_handler = kthread_create_on_node(mtip_service_thread, |
4090 | dd, dd->numa_node, thd_name); | 4090 | dd, dd->numa_node, "%s", |
4091 | thd_name); | ||
4091 | 4092 | ||
4092 | if (IS_ERR(dd->mtip_svc_handler)) { | 4093 | if (IS_ERR(dd->mtip_svc_handler)) { |
4093 | dev_err(&dd->pdev->dev, "service thread failed to start\n"); | 4094 | dev_err(&dd->pdev->dev, "service thread failed to start\n"); |
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index 8bfd1bcf95ec..04608a6502d7 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c | |||
@@ -93,7 +93,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif) | |||
93 | } | 93 | } |
94 | invalidate_inode_pages2(blkif->vbd.bdev->bd_inode->i_mapping); | 94 | invalidate_inode_pages2(blkif->vbd.bdev->bd_inode->i_mapping); |
95 | 95 | ||
96 | blkif->xenblkd = kthread_run(xen_blkif_schedule, blkif, name); | 96 | blkif->xenblkd = kthread_run(xen_blkif_schedule, blkif, "%s", name); |
97 | if (IS_ERR(blkif->xenblkd)) { | 97 | if (IS_ERR(blkif->xenblkd)) { |
98 | err = PTR_ERR(blkif->xenblkd); | 98 | err = PTR_ERR(blkif->xenblkd); |
99 | blkif->xenblkd = NULL; | 99 | blkif->xenblkd = NULL; |
diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index b83bf4bb95eb..0f34bca9f5e5 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c | |||
@@ -1285,7 +1285,7 @@ static int adt7470_probe(struct i2c_client *client, | |||
1285 | } | 1285 | } |
1286 | 1286 | ||
1287 | init_completion(&data->auto_update_stop); | 1287 | init_completion(&data->auto_update_stop); |
1288 | data->auto_update = kthread_run(adt7470_update_thread, client, | 1288 | data->auto_update = kthread_run(adt7470_update_thread, client, "%s", |
1289 | dev_name(data->hwmon_dev)); | 1289 | dev_name(data->hwmon_dev)); |
1290 | if (IS_ERR(data->auto_update)) { | 1290 | if (IS_ERR(data->auto_update)) { |
1291 | err = PTR_ERR(data->auto_update); | 1291 | err = PTR_ERR(data->auto_update); |
diff --git a/drivers/media/i2c/tvaudio.c b/drivers/media/i2c/tvaudio.c index b72a59d3216a..e0634c8b7e0b 100644 --- a/drivers/media/i2c/tvaudio.c +++ b/drivers/media/i2c/tvaudio.c | |||
@@ -2020,7 +2020,8 @@ static int tvaudio_probe(struct i2c_client *client, const struct i2c_device_id * | |||
2020 | /* start async thread */ | 2020 | /* start async thread */ |
2021 | chip->wt.function = chip_thread_wake; | 2021 | chip->wt.function = chip_thread_wake; |
2022 | chip->wt.data = (unsigned long)chip; | 2022 | chip->wt.data = (unsigned long)chip; |
2023 | chip->thread = kthread_run(chip_thread, chip, client->name); | 2023 | chip->thread = kthread_run(chip_thread, chip, "%s", |
2024 | client->name); | ||
2024 | if (IS_ERR(chip->thread)) { | 2025 | if (IS_ERR(chip->thread)) { |
2025 | v4l2_warn(sd, "failed to create kthread\n"); | 2026 | v4l2_warn(sd, "failed to create kthread\n"); |
2026 | chip->thread = NULL; | 2027 | chip->thread = NULL; |
diff --git a/drivers/media/pci/ivtv/ivtv-driver.c b/drivers/media/pci/ivtv/ivtv-driver.c index 07b8460953b6..b809bc868a9f 100644 --- a/drivers/media/pci/ivtv/ivtv-driver.c +++ b/drivers/media/pci/ivtv/ivtv-driver.c | |||
@@ -753,7 +753,7 @@ static int ivtv_init_struct1(struct ivtv *itv) | |||
753 | 753 | ||
754 | init_kthread_worker(&itv->irq_worker); | 754 | init_kthread_worker(&itv->irq_worker); |
755 | itv->irq_worker_task = kthread_run(kthread_worker_fn, &itv->irq_worker, | 755 | itv->irq_worker_task = kthread_run(kthread_worker_fn, &itv->irq_worker, |
756 | itv->v4l2_dev.name); | 756 | "%s", itv->v4l2_dev.name); |
757 | if (IS_ERR(itv->irq_worker_task)) { | 757 | if (IS_ERR(itv->irq_worker_task)) { |
758 | IVTV_ERR("Could not create ivtv task\n"); | 758 | IVTV_ERR("Could not create ivtv task\n"); |
759 | return -1; | 759 | return -1; |
diff --git a/drivers/media/platform/vivi.c b/drivers/media/platform/vivi.c index 85bc314382d3..1d3f11965196 100644 --- a/drivers/media/platform/vivi.c +++ b/drivers/media/platform/vivi.c | |||
@@ -768,7 +768,8 @@ static int vivi_start_generating(struct vivi_dev *dev) | |||
768 | 768 | ||
769 | dma_q->frame = 0; | 769 | dma_q->frame = 0; |
770 | dma_q->ini_jiffies = jiffies; | 770 | dma_q->ini_jiffies = jiffies; |
771 | dma_q->kthread = kthread_run(vivi_thread, dev, dev->v4l2_dev.name); | 771 | dma_q->kthread = kthread_run(vivi_thread, dev, "%s", |
772 | dev->v4l2_dev.name); | ||
772 | 773 | ||
773 | if (IS_ERR(dma_q->kthread)) { | 774 | if (IS_ERR(dma_q->kthread)) { |
774 | v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n"); | 775 | v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n"); |
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index a56133585e92..0aaece9107c7 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c | |||
@@ -1005,7 +1005,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, | |||
1005 | if (err) | 1005 | if (err) |
1006 | goto out_uif; | 1006 | goto out_uif; |
1007 | 1007 | ||
1008 | ubi->bgt_thread = kthread_create(ubi_thread, ubi, ubi->bgt_name); | 1008 | ubi->bgt_thread = kthread_create(ubi_thread, ubi, "%s", ubi->bgt_name); |
1009 | if (IS_ERR(ubi->bgt_thread)) { | 1009 | if (IS_ERR(ubi->bgt_thread)) { |
1010 | err = PTR_ERR(ubi->bgt_thread); | 1010 | err = PTR_ERR(ubi->bgt_thread); |
1011 | ubi_err("cannot spawn \"%s\", error %d", ubi->bgt_name, | 1011 | ubi_err("cannot spawn \"%s\", error %d", ubi->bgt_name, |
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 6125adb520a3..d0adbaf86186 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
@@ -1893,7 +1893,8 @@ static int airo_open(struct net_device *dev) { | |||
1893 | 1893 | ||
1894 | if (ai->wifidev != dev) { | 1894 | if (ai->wifidev != dev) { |
1895 | clear_bit(JOB_DIE, &ai->jobs); | 1895 | clear_bit(JOB_DIE, &ai->jobs); |
1896 | ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name); | 1896 | ai->airo_thread_task = kthread_run(airo_thread, dev, "%s", |
1897 | dev->name); | ||
1897 | if (IS_ERR(ai->airo_thread_task)) | 1898 | if (IS_ERR(ai->airo_thread_task)) |
1898 | return (int)PTR_ERR(ai->airo_thread_task); | 1899 | return (int)PTR_ERR(ai->airo_thread_task); |
1899 | 1900 | ||
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index 1ef041bc60c8..d85ac1a9d2c0 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
@@ -318,7 +318,8 @@ return_fib: | |||
318 | kthread_stop(dev->thread); | 318 | kthread_stop(dev->thread); |
319 | ssleep(1); | 319 | ssleep(1); |
320 | dev->aif_thread = 0; | 320 | dev->aif_thread = 0; |
321 | dev->thread = kthread_run(aac_command_thread, dev, dev->name); | 321 | dev->thread = kthread_run(aac_command_thread, dev, |
322 | "%s", dev->name); | ||
322 | ssleep(1); | 323 | ssleep(1); |
323 | } | 324 | } |
324 | if (f.wait) { | 325 | if (f.wait) { |
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 1be0776a80c4..cab190af6345 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c | |||
@@ -1336,7 +1336,8 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced) | |||
1336 | if ((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32)))) | 1336 | if ((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32)))) |
1337 | goto out; | 1337 | goto out; |
1338 | if (jafo) { | 1338 | if (jafo) { |
1339 | aac->thread = kthread_run(aac_command_thread, aac, aac->name); | 1339 | aac->thread = kthread_run(aac_command_thread, aac, "%s", |
1340 | aac->name); | ||
1340 | if (IS_ERR(aac->thread)) { | 1341 | if (IS_ERR(aac->thread)) { |
1341 | retval = PTR_ERR(aac->thread); | 1342 | retval = PTR_ERR(aac->thread); |
1342 | goto out; | 1343 | goto out; |
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 32b7bb111eb6..085db8b2f2bc 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -601,7 +601,7 @@ static int spi_init_queue(struct spi_master *master) | |||
601 | 601 | ||
602 | init_kthread_worker(&master->kworker); | 602 | init_kthread_worker(&master->kworker); |
603 | master->kworker_task = kthread_run(kthread_worker_fn, | 603 | master->kworker_task = kthread_run(kthread_worker_fn, |
604 | &master->kworker, | 604 | &master->kworker, "%s", |
605 | dev_name(&master->dev)); | 605 | dev_name(&master->dev)); |
606 | if (IS_ERR(master->kworker_task)) { | 606 | if (IS_ERR(master->kworker_task)) { |
607 | dev_err(&master->dev, "failed to create message pump task\n"); | 607 | dev_err(&master->dev, "failed to create message pump task\n"); |
diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c index b65bf5e177a8..6e81ba0eaf1e 100644 --- a/drivers/staging/rtl8712/os_intfs.c +++ b/drivers/staging/rtl8712/os_intfs.c | |||
@@ -238,7 +238,7 @@ struct net_device *r8712_init_netdev(void) | |||
238 | 238 | ||
239 | static u32 start_drv_threads(struct _adapter *padapter) | 239 | static u32 start_drv_threads(struct _adapter *padapter) |
240 | { | 240 | { |
241 | padapter->cmdThread = kthread_run(r8712_cmd_thread, padapter, | 241 | padapter->cmdThread = kthread_run(r8712_cmd_thread, padapter, "%s", |
242 | padapter->pnetdev->name); | 242 | padapter->pnetdev->name); |
243 | if (IS_ERR(padapter->cmdThread) < 0) | 243 | if (IS_ERR(padapter->cmdThread) < 0) |
244 | return _FAIL; | 244 | return _FAIL; |
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c index d3527dd8b90c..5e0d33a7da58 100644 --- a/drivers/usb/atm/usbatm.c +++ b/drivers/usb/atm/usbatm.c | |||
@@ -1020,7 +1020,7 @@ static int usbatm_heavy_init(struct usbatm_data *instance) | |||
1020 | { | 1020 | { |
1021 | struct task_struct *t; | 1021 | struct task_struct *t; |
1022 | 1022 | ||
1023 | t = kthread_create(usbatm_do_heavy_init, instance, | 1023 | t = kthread_create(usbatm_do_heavy_init, instance, "%s", |
1024 | instance->driver->driver_name); | 1024 | instance->driver->driver_name); |
1025 | if (IS_ERR(t)) { | 1025 | if (IS_ERR(t)) { |
1026 | usb_err(instance, "%s: failed to create kernel_thread (%ld)!\n", | 1026 | usb_err(instance, "%s: failed to create kernel_thread (%ld)!\n", |
@@ -1076,7 +1076,8 @@ int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id, | |||
1076 | /* public fields */ | 1076 | /* public fields */ |
1077 | 1077 | ||
1078 | instance->driver = driver; | 1078 | instance->driver = driver; |
1079 | snprintf(instance->driver_name, sizeof(instance->driver_name), driver->driver_name); | 1079 | strlcpy(instance->driver_name, driver->driver_name, |
1080 | sizeof(instance->driver_name)); | ||
1080 | 1081 | ||
1081 | instance->usb_dev = usb_dev; | 1082 | instance->usb_dev = usb_dev; |
1082 | instance->usb_intf = intf; | 1083 | instance->usb_intf = intf; |
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index a2aa97d45670..10d6c41aecad 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c | |||
@@ -305,7 +305,7 @@ static int lockd_start_svc(struct svc_serv *serv) | |||
305 | svc_sock_update_bufs(serv); | 305 | svc_sock_update_bufs(serv); |
306 | serv->sv_maxconn = nlm_max_connections; | 306 | serv->sv_maxconn = nlm_max_connections; |
307 | 307 | ||
308 | nlmsvc_task = kthread_run(lockd, nlmsvc_rqst, serv->sv_name); | 308 | nlmsvc_task = kthread_run(lockd, nlmsvc_rqst, "%s", serv->sv_name); |
309 | if (IS_ERR(nlmsvc_task)) { | 309 | if (IS_ERR(nlmsvc_task)) { |
310 | error = PTR_ERR(nlmsvc_task); | 310 | error = PTR_ERR(nlmsvc_task); |
311 | printk(KERN_WARNING | 311 | printk(KERN_WARNING |
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index cff089a412c7..da6a43d19aa3 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -211,7 +211,6 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt, | |||
211 | struct svc_rqst *rqstp; | 211 | struct svc_rqst *rqstp; |
212 | int (*callback_svc)(void *vrqstp); | 212 | int (*callback_svc)(void *vrqstp); |
213 | struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion]; | 213 | struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion]; |
214 | char svc_name[12]; | ||
215 | int ret; | 214 | int ret; |
216 | 215 | ||
217 | nfs_callback_bc_serv(minorversion, xprt, serv); | 216 | nfs_callback_bc_serv(minorversion, xprt, serv); |
@@ -235,10 +234,10 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt, | |||
235 | 234 | ||
236 | svc_sock_update_bufs(serv); | 235 | svc_sock_update_bufs(serv); |
237 | 236 | ||
238 | sprintf(svc_name, "nfsv4.%u-svc", minorversion); | ||
239 | cb_info->serv = serv; | 237 | cb_info->serv = serv; |
240 | cb_info->rqst = rqstp; | 238 | cb_info->rqst = rqstp; |
241 | cb_info->task = kthread_run(callback_svc, cb_info->rqst, svc_name); | 239 | cb_info->task = kthread_run(callback_svc, cb_info->rqst, |
240 | "nfsv4.%u-svc", minorversion); | ||
242 | if (IS_ERR(cb_info->task)) { | 241 | if (IS_ERR(cb_info->task)) { |
243 | ret = PTR_ERR(cb_info->task); | 242 | ret = PTR_ERR(cb_info->task); |
244 | svc_exit_thread(cb_info->rqst); | 243 | svc_exit_thread(cb_info->rqst); |
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index ff10b4aa534c..55418811a55a 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -1194,7 +1194,7 @@ void nfs4_schedule_state_manager(struct nfs_client *clp) | |||
1194 | snprintf(buf, sizeof(buf), "%s-manager", | 1194 | snprintf(buf, sizeof(buf), "%s-manager", |
1195 | rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR)); | 1195 | rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR)); |
1196 | rcu_read_unlock(); | 1196 | rcu_read_unlock(); |
1197 | task = kthread_run(nfs4_run_state_manager, clp, buf); | 1197 | task = kthread_run(nfs4_run_state_manager, clp, "%s", buf); |
1198 | if (IS_ERR(task)) { | 1198 | if (IS_ERR(task)) { |
1199 | printk(KERN_ERR "%s: kthread_run: %ld\n", | 1199 | printk(KERN_ERR "%s: kthread_run: %ld\n", |
1200 | __func__, PTR_ERR(task)); | 1200 | __func__, PTR_ERR(task)); |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index cf3adc6fe001..e08abb9461ac 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -3026,7 +3026,7 @@ static int __init rcu_spawn_gp_kthread(void) | |||
3026 | struct task_struct *t; | 3026 | struct task_struct *t; |
3027 | 3027 | ||
3028 | for_each_rcu_flavor(rsp) { | 3028 | for_each_rcu_flavor(rsp) { |
3029 | t = kthread_run(rcu_gp_kthread, rsp, rsp->name); | 3029 | t = kthread_run(rcu_gp_kthread, rsp, "%s", rsp->name); |
3030 | BUG_ON(IS_ERR(t)); | 3030 | BUG_ON(IS_ERR(t)); |
3031 | rnp = rcu_get_root(rsp); | 3031 | rnp = rcu_get_root(rsp); |
3032 | raw_spin_lock_irqsave(&rnp->lock, flags); | 3032 | raw_spin_lock_irqsave(&rnp->lock, flags); |
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 89a588b4478b..b974571126fe 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -740,7 +740,7 @@ svc_set_num_threads(struct svc_serv *serv, struct svc_pool *pool, int nrservs) | |||
740 | 740 | ||
741 | __module_get(serv->sv_module); | 741 | __module_get(serv->sv_module); |
742 | task = kthread_create_on_node(serv->sv_function, rqstp, | 742 | task = kthread_create_on_node(serv->sv_function, rqstp, |
743 | node, serv->sv_name); | 743 | node, "%s", serv->sv_name); |
744 | if (IS_ERR(task)) { | 744 | if (IS_ERR(task)) { |
745 | error = PTR_ERR(task); | 745 | error = PTR_ERR(task); |
746 | module_put(serv->sv_module); | 746 | module_put(serv->sv_module); |