linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org, Drew Fustini <drew@beagleboard.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
	Tony Lindgren <tony@atomide.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Pantelis Antoniou <pantelis.antoniou@konsulko.com>,
	Jason Kridner <jkridner@beagleboard.org>,
	Robert Nelson <robertcnelson@beagleboard.org>
Cc: lkp@intel.com, kbuild-all@lists.01.org
Subject: Re: [PATCH v2 2/2] pinctrl: pinmux: Add pinmux-select debugfs file
Date: Wed, 10 Feb 2021 21:20:44 +0300	[thread overview]
Message-ID: <20210210182044.GY2696@kadam> (raw)
In-Reply-To: <20210210074946.155417-3-drew@beagleboard.org>

[-- Attachment #1: Type: text/plain, Size: 7322 bytes --]

Hi Drew,

url:    https://github.com/0day-ci/linux/commits/Drew-Fustini/pinctrl-pinmux-Add-pinmux-select-debugfs-file/20210210-160108
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel
config: i386-randconfig-m021-20210209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/pinctrl/pinmux.c:762 pinmux_select() error: uninitialized symbol 'gname'.

vim +/gname +762 drivers/pinctrl/pinmux.c

99b2f99aa41aa7 Drew Fustini  2021-02-09  678  static ssize_t pinmux_select(struct file *file, const char __user *user_buf,
99b2f99aa41aa7 Drew Fustini  2021-02-09  679  				   size_t len, loff_t *ppos)
99b2f99aa41aa7 Drew Fustini  2021-02-09  680  {
99b2f99aa41aa7 Drew Fustini  2021-02-09  681  	struct seq_file *sfile = file->private_data;
99b2f99aa41aa7 Drew Fustini  2021-02-09  682  	struct pinctrl_dev *pctldev = sfile->private;
99b2f99aa41aa7 Drew Fustini  2021-02-09  683  	const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
99b2f99aa41aa7 Drew Fustini  2021-02-09  684  	const char *const *groups;
99b2f99aa41aa7 Drew Fustini  2021-02-09  685  	char *buf, *fname, *gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  686  	unsigned int num_groups;
99b2f99aa41aa7 Drew Fustini  2021-02-09  687  	int fsel, gsel, ret;
99b2f99aa41aa7 Drew Fustini  2021-02-09  688  
99b2f99aa41aa7 Drew Fustini  2021-02-09  689  	if (len > (PINMUX_MAX_NAME * 2)) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  690  		dev_err(pctldev->dev, "write too big for buffer");
99b2f99aa41aa7 Drew Fustini  2021-02-09  691  		return -EINVAL;
99b2f99aa41aa7 Drew Fustini  2021-02-09  692  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  693  
99b2f99aa41aa7 Drew Fustini  2021-02-09  694  	buf = devm_kzalloc(pctldev->dev, PINMUX_MAX_NAME * 2, GFP_KERNEL);
99b2f99aa41aa7 Drew Fustini  2021-02-09  695  	if (!buf)
99b2f99aa41aa7 Drew Fustini  2021-02-09  696  		return -ENOMEM;
99b2f99aa41aa7 Drew Fustini  2021-02-09  697  
99b2f99aa41aa7 Drew Fustini  2021-02-09  698  	fname = devm_kzalloc(pctldev->dev, PINMUX_MAX_NAME, GFP_KERNEL);
99b2f99aa41aa7 Drew Fustini  2021-02-09  699  	if (!fname) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  700  		ret = -ENOMEM;
99b2f99aa41aa7 Drew Fustini  2021-02-09  701  		goto free_buf;

The gotos are out of order.  They should be in mirror/reverse order of
the allocations:

free_gmane:
	devm_kfree(pctldev->dev, gname);
free_fname:
	devm_kfree(pctldev->dev, fname);
free_buf:
	devm_kfree(pctldev->dev, buf);

But also why do we need to use devm_kfree() at all?  I thought the whole
point of devm_ functions was that they are garbage collected
automatically for you.  Can we not just delete all error handling and
return -ENOMEM here?

99b2f99aa41aa7 Drew Fustini  2021-02-09  702  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  703  
99b2f99aa41aa7 Drew Fustini  2021-02-09  704  	gname = devm_kzalloc(pctldev->dev, PINMUX_MAX_NAME, GFP_KERNEL);
99b2f99aa41aa7 Drew Fustini  2021-02-09  705  	if (!buf) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  706  		ret = -ENOMEM;
99b2f99aa41aa7 Drew Fustini  2021-02-09  707  		goto free_fname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  708  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  709  
99b2f99aa41aa7 Drew Fustini  2021-02-09  710  	ret = strncpy_from_user(buf, user_buf, PINMUX_MAX_NAME * 2);
99b2f99aa41aa7 Drew Fustini  2021-02-09  711  	if (ret < 0) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  712  		dev_err(pctldev->dev, "failed to copy buffer from userspace");
99b2f99aa41aa7 Drew Fustini  2021-02-09  713  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  714  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  715  	buf[len-1] = '\0';
99b2f99aa41aa7 Drew Fustini  2021-02-09  716  
99b2f99aa41aa7 Drew Fustini  2021-02-09  717  	ret = sscanf(buf, "%s %s", fname, gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  718  	if (ret != 2) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  719  		dev_err(pctldev->dev, "expected format: <function-name> <group-name>");
99b2f99aa41aa7 Drew Fustini  2021-02-09  720  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  721  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  722  
99b2f99aa41aa7 Drew Fustini  2021-02-09  723  	fsel = pinmux_func_name_to_selector(pctldev, fname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  724  	if (fsel < 0) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  725  		dev_err(pctldev->dev, "invalid function %s in map table\n", fname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  726  		ret = -EINVAL;
99b2f99aa41aa7 Drew Fustini  2021-02-09  727  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  728  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  729  
99b2f99aa41aa7 Drew Fustini  2021-02-09  730  	ret = pmxops->get_function_groups(pctldev, fsel, &groups, &num_groups);
99b2f99aa41aa7 Drew Fustini  2021-02-09  731  	if (ret) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  732  		dev_err(pctldev->dev, "no groups for function %d (%s)", fsel, fname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  733  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  734  
99b2f99aa41aa7 Drew Fustini  2021-02-09  735  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  736  
99b2f99aa41aa7 Drew Fustini  2021-02-09  737  	ret = match_string(groups, num_groups, gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  738  	if (ret < 0) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  739  		dev_err(pctldev->dev, "invalid group %s", gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  740  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  741  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  742  
99b2f99aa41aa7 Drew Fustini  2021-02-09  743  	ret = pinctrl_get_group_selector(pctldev, gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  744  	if (ret < 0) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  745  		dev_err(pctldev->dev, "failed to get group selectorL %s", gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  746  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  747  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  748  	gsel = ret;
99b2f99aa41aa7 Drew Fustini  2021-02-09  749  
99b2f99aa41aa7 Drew Fustini  2021-02-09  750  	ret = pmxops->set_mux(pctldev, fsel, gsel);
99b2f99aa41aa7 Drew Fustini  2021-02-09  751  	if (ret) {
99b2f99aa41aa7 Drew Fustini  2021-02-09  752  		dev_err(pctldev->dev, "set_mux() failed: %d", ret);
99b2f99aa41aa7 Drew Fustini  2021-02-09  753  		goto free_gname;
99b2f99aa41aa7 Drew Fustini  2021-02-09  754  	}
99b2f99aa41aa7 Drew Fustini  2021-02-09  755  
99b2f99aa41aa7 Drew Fustini  2021-02-09  756  	return len;
99b2f99aa41aa7 Drew Fustini  2021-02-09  757  free_buf:
99b2f99aa41aa7 Drew Fustini  2021-02-09  758  	devm_kfree(pctldev->dev, buf);
99b2f99aa41aa7 Drew Fustini  2021-02-09  759  free_fname:
99b2f99aa41aa7 Drew Fustini  2021-02-09  760  	devm_kfree(pctldev->dev, fname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  761  free_gname:
99b2f99aa41aa7 Drew Fustini  2021-02-09 @762  	devm_kfree(pctldev->dev, gname);
99b2f99aa41aa7 Drew Fustini  2021-02-09  763  	return ret;
99b2f99aa41aa7 Drew Fustini  2021-02-09  764  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37152 bytes --]

  parent reply	other threads:[~2021-02-10 18:25 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-10  7:49 [PATCH v2 0/2] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
2021-02-10  7:49 ` [PATCH v2 1/2] pinctrl: use to octal permissions for debugfs files Drew Fustini
2021-02-10  8:30   ` Joe Perches
2021-02-10 10:18     ` Andy Shevchenko
2021-02-10 12:36       ` Joe Perches
2021-02-10 21:21         ` Drew Fustini
2021-02-10 23:12           ` Joe Perches
2021-02-10  8:31   ` Geert Uytterhoeven
2021-02-10 10:14     ` Andy Shevchenko
2021-02-10 10:16   ` Andy Shevchenko
2021-02-10  7:49 ` [PATCH v2 2/2] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
2021-02-10  8:35   ` Geert Uytterhoeven
2021-02-10  9:56   ` Andy Shevchenko
2021-02-10 17:31     ` Drew Fustini
2021-02-10 18:20   ` Dan Carpenter [this message]
2021-02-10 18:39     ` Geert Uytterhoeven
2021-02-10 19:05       ` Dan Carpenter
2021-02-10 19:14         ` Drew Fustini
2021-02-10 19:04     ` Drew Fustini
2021-02-10 20:33       ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210210182044.GY2696@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=drew@beagleboard.org \
    --cc=geert@linux-m68k.org \
    --cc=jkridner@beagleboard.org \
    --cc=kbuild-all@lists.01.org \
    --cc=kbuild@lists.01.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=pantelis.antoniou@konsulko.com \
    --cc=robertcnelson@beagleboard.org \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).