[lustre-devel] [PATCH 11/22] lustre: obdclass: fill jobid in a safe way
James Simmons <[email protected]>
| Newsgroups | org.lustre.lists.lustre-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Lei Feng <[email protected]> Ensure jobid_interpret_string() fills jobid in an atomic way. Make sure we use the proper length. The Linux native client got this mostly right. WC-bug-id: https://jira.whamcloud.com/browse/LU-16251 Lustre-commit: 9a0a89520e8b57bd6 ("LU-16251 obdclass: fill jobid in a safe way") Signed-off-by: Lei Feng <[email protected]> Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/48915 Reviewed-by: Andreas Dilger <[email protected]> Reviewed-by: Jian Yu <[email protected]> Reviewed-by: Oleg Drokin <[email protected]> Signed-off-by: James Simmons <[email protected]> --- fs/lustre/obdclass/jobid.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/lustre/obdclass/jobid.c b/fs/lustre/obdclass/jobid.c index da1af51..77ea5b2 100644 --- a/fs/lustre/obdclass/jobid.c +++ b/fs/lustre/obdclass/jobid.c @@ -308,7 +308,8 @@ static int jobid_interpret_string(const char *jobfmt, char *jobid, */ int lustre_get_jobid(char *jobid, size_t joblen) { - char tmp_jobid[LUSTRE_JOBID_SIZE] = ""; + char id[LUSTRE_JOBID_SIZE] = ""; + int len = min_t(int, joblen, LUSTRE_JOBID_SIZE); if (unlikely(joblen < 2)) { if (joblen == 1) @@ -324,14 +325,14 @@ int lustre_get_jobid(char *jobid, size_t joblen) if (strcmp(obd_jobid_var, JOBSTATS_NODELOCAL) == 0 || strnstr(obd_jobid_name, "%j", LUSTRE_JOBID_SIZE)) { int rc2 = jobid_interpret_string(obd_jobid_name, - tmp_jobid, joblen); + id, len); if (!rc2) goto out_cache_jobid; } /* Use process name + fsuid as jobid */ if (strcmp(obd_jobid_var, JOBSTATS_PROCNAME_UID) == 0) { - snprintf(tmp_jobid, LUSTRE_JOBID_SIZE, "%s.%u", + snprintf(id, LUSTRE_JOBID_SIZE, "%s.%u", current->comm, from_kuid(&init_user_ns, current_fsuid())); goto out_cache_jobid; @@ -343,7 +344,7 @@ int lustre_get_jobid(char *jobid, size_t joblen) rcu_read_lock(); jid = jobid_current(); if (jid) - strlcpy(tmp_jobid, jid, sizeof(tmp_jobid)); + strlcpy(id, jid, sizeof(id)); rcu_read_unlock(); goto out_cache_jobid; } @@ -352,8 +353,8 @@ int lustre_get_jobid(char *jobid, size_t joblen) out_cache_jobid: /* Only replace the job ID if it changed. */ - if (strcmp(jobid, tmp_jobid) != 0) - strcpy(jobid, tmp_jobid); + if (strcmp(jobid, id) != 0) + strcpy(jobid, id); return 0; } -- 1.8.3.1 _______________________________________________ lustre-devel mailing list [email protected] http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org