Commit 9edf0f67 authored by Kees Cook's avatar Kees Cook Committed by Greg Kroah-Hartman

staging: lustre: clean up format string usages

This fixes up the usage of snprintf, strncpy, and format strings in the
call to kthread_run to avoid ever accidentally allowing a format string
into the thread name.
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1ea12fef
...@@ -1802,7 +1802,7 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed, ...@@ -1802,7 +1802,7 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
int int
kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name) kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
{ {
struct task_struct *task = kthread_run(fn, arg, name); struct task_struct *task = kthread_run(fn, arg, "%s", name);
if (IS_ERR(task)) if (IS_ERR(task))
return PTR_ERR(task); return PTR_ERR(task);
......
...@@ -1005,7 +1005,7 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) ...@@ -1005,7 +1005,7 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
int int
ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name) ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
{ {
struct task_struct *task = kthread_run(fn, arg, name); struct task_struct *task = kthread_run(fn, arg, "%s", name);
if (IS_ERR(task)) if (IS_ERR(task))
return PTR_ERR(task); return PTR_ERR(task);
......
...@@ -800,9 +800,9 @@ static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp) ...@@ -800,9 +800,9 @@ static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
init_completion(&bltd.bltd_comp); init_completion(&bltd.bltd_comp);
bltd.bltd_num = atomic_read(&blp->blp_num_threads); bltd.bltd_num = atomic_read(&blp->blp_num_threads);
snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1, snprintf(bltd.bltd_name, sizeof(bltd.bltd_name),
"ldlm_bl_%02d", bltd.bltd_num); "ldlm_bl_%02d", bltd.bltd_num);
task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name); task = kthread_run(ldlm_bl_thread_main, &bltd, "%s", bltd.bltd_name);
if (IS_ERR(task)) { if (IS_ERR(task)) {
CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n", CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
atomic_read(&blp->blp_num_threads), PTR_ERR(task)); atomic_read(&blp->blp_num_threads), PTR_ERR(task));
......
...@@ -397,7 +397,7 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab, ...@@ -397,7 +397,7 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
sched->ws_name, sched->ws_nthreads); sched->ws_name, sched->ws_nthreads);
} }
task = kthread_run(cfs_wi_scheduler, sched, name); task = kthread_run(cfs_wi_scheduler, sched, "%s", name);
if (!IS_ERR(task)) { if (!IS_ERR(task)) {
nthrs--; nthrs--;
continue; continue;
......
...@@ -383,8 +383,8 @@ int ptlrpc_start_pinger(void) ...@@ -383,8 +383,8 @@ int ptlrpc_start_pinger(void)
/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we /* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
* just drop the VM and FILES in cfs_daemonize_ctxt() right away. */ * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
rc = PTR_ERR(kthread_run(ptlrpc_pinger_main, rc = PTR_ERR(kthread_run(ptlrpc_pinger_main, &pinger_thread,
&pinger_thread, pinger_thread.t_name)); "%s", pinger_thread.t_name));
if (IS_ERR_VALUE(rc)) { if (IS_ERR_VALUE(rc)) {
CERROR("cannot start thread: %d\n", rc); CERROR("cannot start thread: %d\n", rc);
return rc; return rc;
......
...@@ -615,7 +615,7 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc) ...@@ -615,7 +615,7 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
init_completion(&pc->pc_starting); init_completion(&pc->pc_starting);
init_completion(&pc->pc_finishing); init_completion(&pc->pc_finishing);
spin_lock_init(&pc->pc_lock); spin_lock_init(&pc->pc_lock);
strncpy(pc->pc_name, name, sizeof(pc->pc_name) - 1); strlcpy(pc->pc_name, name, sizeof(pc->pc_name));
pc->pc_set = ptlrpc_prep_set(); pc->pc_set = ptlrpc_prep_set();
if (pc->pc_set == NULL) if (pc->pc_set == NULL)
GOTO(out, rc = -ENOMEM); GOTO(out, rc = -ENOMEM);
...@@ -638,7 +638,7 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc) ...@@ -638,7 +638,7 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
GOTO(out, rc); GOTO(out, rc);
} }
task = kthread_run(ptlrpcd, pc, pc->pc_name); task = kthread_run(ptlrpcd, pc, "%s", pc->pc_name);
if (IS_ERR(task)) if (IS_ERR(task))
GOTO(out, rc = PTR_ERR(task)); GOTO(out, rc = PTR_ERR(task));
...@@ -745,7 +745,7 @@ static int ptlrpcd_init(void) ...@@ -745,7 +745,7 @@ static int ptlrpcd_init(void)
if (ptlrpcds == NULL) if (ptlrpcds == NULL)
GOTO(out, rc = -ENOMEM); GOTO(out, rc = -ENOMEM);
snprintf(name, 15, "ptlrpcd_rcv"); snprintf(name, sizeof(name), "ptlrpcd_rcv");
set_bit(LIOD_RECOVERY, &ptlrpcds->pd_thread_rcv.pc_flags); set_bit(LIOD_RECOVERY, &ptlrpcds->pd_thread_rcv.pc_flags);
rc = ptlrpcd_start(-1, nthreads, name, &ptlrpcds->pd_thread_rcv); rc = ptlrpcd_start(-1, nthreads, name, &ptlrpcds->pd_thread_rcv);
if (rc < 0) if (rc < 0)
...@@ -764,7 +764,7 @@ static int ptlrpcd_init(void) ...@@ -764,7 +764,7 @@ static int ptlrpcd_init(void)
* unnecessary dependency. But how to distribute async RPCs load * unnecessary dependency. But how to distribute async RPCs load
* among all the ptlrpc daemons becomes another trouble. */ * among all the ptlrpc daemons becomes another trouble. */
for (i = 0; i < nthreads; i++) { for (i = 0; i < nthreads; i++) {
snprintf(name, 15, "ptlrpcd_%d", i); snprintf(name, sizeof(name), "ptlrpcd_%d", i);
rc = ptlrpcd_start(i, nthreads, name, &ptlrpcds->pd_threads[i]); rc = ptlrpcd_start(i, nthreads, name, &ptlrpcds->pd_threads[i]);
if (rc < 0) if (rc < 0)
GOTO(out, rc); GOTO(out, rc);
......
...@@ -2718,15 +2718,15 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait) ...@@ -2718,15 +2718,15 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
spin_unlock(&svcpt->scp_lock); spin_unlock(&svcpt->scp_lock);
if (svcpt->scp_cpt >= 0) { if (svcpt->scp_cpt >= 0) {
snprintf(thread->t_name, PTLRPC_THR_NAME_LEN, "%s%02d_%03d", snprintf(thread->t_name, sizeof(thread->t_name), "%s%02d_%03d",
svc->srv_thread_name, svcpt->scp_cpt, thread->t_id); svc->srv_thread_name, svcpt->scp_cpt, thread->t_id);
} else { } else {
snprintf(thread->t_name, PTLRPC_THR_NAME_LEN, "%s_%04d", snprintf(thread->t_name, sizeof(thread->t_name), "%s_%04d",
svc->srv_thread_name, thread->t_id); svc->srv_thread_name, thread->t_id);
} }
CDEBUG(D_RPCTRACE, "starting thread '%s'\n", thread->t_name); CDEBUG(D_RPCTRACE, "starting thread '%s'\n", thread->t_name);
rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name)); rc = PTR_ERR(kthread_run(ptlrpc_main, thread, "%s", thread->t_name));
if (IS_ERR_VALUE(rc)) { if (IS_ERR_VALUE(rc)) {
CERROR("cannot start thread '%s': rc %d\n", CERROR("cannot start thread '%s': rc %d\n",
thread->t_name, rc); thread->t_name, rc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment