X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ffld%2Flproc_fld.c;h=e8230ceddaea81e125dd23e5330ef1ea5e497889;hb=7a814e94e065551ab79e2ba75df9626e4940efc5;hp=b231c16dfe92d99c5623c451436f105b2332da08;hpb=26b8238659974959780cd49de92595b4b0bdf89f;p=fs%2Flustre-release.git diff --git a/lustre/fld/lproc_fld.c b/lustre/fld/lproc_fld.c index b231c16..e8230ce 100644 --- a/lustre/fld/lproc_fld.c +++ b/lustre/fld/lproc_fld.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,7 +23,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, 2014, Intel Corporation. + * Copyright (c) 2012, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -87,22 +83,29 @@ static ssize_t fld_proc_hash_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct lu_client_fld *fld = ((struct seq_file *)file->private_data)->private; - struct lu_fld_hash *hash = NULL; - int i; - ENTRY; + struct lu_client_fld *fld; + struct lu_fld_hash *hash = NULL; + char fh_name[8]; + int i; - LASSERT(fld != NULL); + if (count > sizeof(fh_name)) + return -ENAMETOOLONG; - for (i = 0; fld_hash[i].fh_name != NULL; i++) { - if (count != strlen(fld_hash[i].fh_name)) - continue; + if (copy_from_user(fh_name, buffer, count) != 0) + return -EFAULT; - if (!strncmp(fld_hash[i].fh_name, buffer, count)) { - hash = &fld_hash[i]; - break; - } - } + fld = ((struct seq_file *)file->private_data)->private; + LASSERT(fld != NULL); + + for (i = 0; fld_hash[i].fh_name != NULL; i++) { + if (count != strlen(fld_hash[i].fh_name)) + continue; + + if (!strncmp(fld_hash[i].fh_name, fh_name, count)) { + hash = &fld_hash[i]; + break; + } + } if (hash != NULL) { spin_lock(&fld->lcf_lock); @@ -113,7 +116,7 @@ fld_proc_hash_seq_write(struct file *file, const char __user *buffer, fld->lcf_name, hash->fh_name); } - RETURN(count); + return count; } static ssize_t @@ -256,7 +259,7 @@ static int fldb_seq_show(struct seq_file *p, void *v) fld->lsf_name, rc); } else if (fld_rec->lsr_start != 0) { range_be_to_cpu(fld_rec, fld_rec); - rc = seq_printf(p, DRANGE"\n", PRANGE(fld_rec)); + seq_printf(p, DRANGE"\n", PRANGE(fld_rec)); } return rc;