From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751966AbdEGXJf (ORCPT ); Sun, 7 May 2017 19:09:35 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34758 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751166AbdEGXJe (ORCPT ); Sun, 7 May 2017 19:09:34 -0400 From: Guru Das Srinagesh To: oleg.drokin@intel.com, joe@perches.com, andreas.dilger@intel.com, jsimmons@infradead.org, gregkh@linuxfoundation.org Cc: lustre-devel@lists.lustre.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] staging: lustre: llite: Fix variable length array warning Date: Sun, 7 May 2017 02:23:29 -0700 Message-Id: <1494149009-2121-1-git-send-email-gurooodas@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix sparse warning "warning: Variable length array is used." by using kmalloc_array to allocate the required amount of memory instead and kfree to deallocate memory after use. Signed-off-by: Guru Das Srinagesh --- v2: - Added missing check for NULL return value of kmalloc_array() drivers/staging/lustre/lustre/llite/xattr.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index 6187bff..880eee9 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c @@ -86,13 +86,17 @@ ll_xattr_set_common(const struct xattr_handler *handler, const char *name, const void *value, size_t size, int flags) { - char fullname[strlen(handler->prefix) + strlen(name) + 1]; + int fullname_len = strlen(handler->prefix) + strlen(name) + 1; + char *fullname = kmalloc_array(fullname_len, sizeof(char), GFP_KERNEL); struct ll_sb_info *sbi = ll_i2sbi(inode); struct ptlrpc_request *req = NULL; const char *pv = value; __u64 valid; int rc; + if (fullname == NULL) + return -ENOMEM; + if (flags == XATTR_REPLACE) { ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1); valid = OBD_MD_FLXATTRRM; @@ -153,6 +157,9 @@ ll_xattr_set_common(const struct xattr_handler *handler, } ptlrpc_req_finished(req); + + kfree(fullname); + return 0; } @@ -363,13 +370,17 @@ static int ll_xattr_get_common(const struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, const char *name, void *buffer, size_t size) { - char fullname[strlen(handler->prefix) + strlen(name) + 1]; + int fullname_len = strlen(handler->prefix) + strlen(name) + 1; + char *fullname = kmalloc_array(fullname_len, sizeof(char), GFP_KERNEL); struct ll_sb_info *sbi = ll_i2sbi(inode); #ifdef CONFIG_FS_POSIX_ACL struct ll_inode_info *lli = ll_i2info(inode); #endif int rc; + if (fullname == NULL) + return -ENOMEM; + CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n", PFID(ll_inode2fid(inode)), inode); @@ -411,8 +422,12 @@ static int ll_xattr_get_common(const struct xattr_handler *handler, return -ENODATA; #endif sprintf(fullname, "%s%s\n", handler->prefix, name); - return ll_xattr_list(inode, fullname, handler->flags, buffer, size, - OBD_MD_FLXATTR); + + rc = ll_xattr_list(inode, fullname, handler->flags, buffer, size, + OBD_MD_FLXATTR); + kfree(fullname); + + return rc; } static ssize_t ll_getxattr_lov(struct inode *inode, void *buf, size_t buf_size) -- 2.7.4