[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.