drivers/tty/serial/sccnxp.c:894 sccnxp_probe() error: we previously assumed 'pdata' could be null (see line 887)
PATCH 42/62 drivers/tty/serial/sccnxp.c:894 sccnxp_probe() error: we previously assumed 'pdata' could be null (see line 887)
Hi Alexander,
FYI, there are new smatch warnings show up in
tree: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-next head: e27a7d7977b07d701ba247e2ddb95466d95c898f commit: ec063899b7b308019afa9f5eb32f0a58a6c6ee53 [42/62] serial: sccnxp: Implement polling mode
New smatch warnings:drivers/tty/serial/sccnxp.c:894 sccnxp_probe() error: we previously assumed 'pdata' could be null (see line 887)
git remote add tty git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
git remote update tty
git checkout ec063899b7b308019afa9f5eb32f0a58a6c6ee53
vim +/pdata +894 drivers/tty/serial/sccnxp.c
1d65c0b1 Alexander Shiyan 2012-08-25 881 default:
1d65c0b1 Alexander Shiyan 2012-08-25 882 dev_err(&pdev->dev, "Unsupported chip type %i\n", chiptype);
1d65c0b1 Alexander Shiyan 2012-08-25 883 ret = -ENOTSUPP;
1d65c0b1 Alexander Shiyan 2012-08-25 884 goto err_out;
1d65c0b1 Alexander Shiyan 2012-08-25 885 }
1d65c0b1 Alexander Shiyan 2012-08-25 886
1d65c0b1 Alexander Shiyan 2012-08-25 @887 if (!pdata) {
1d65c0b1 Alexander Shiyan 2012-08-25 888 dev_warn(&pdev->dev,
1d65c0b1 Alexander Shiyan 2012-08-25 889 "No platform data supplied, using defaults\n");
1d65c0b1 Alexander Shiyan 2012-08-25 890 s->pdata.frequency = s->freq_std;
1d65c0b1 Alexander Shiyan 2012-08-25 891 } else
1d65c0b1 Alexander Shiyan 2012-08-25 892 memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata));
1d65c0b1 Alexander Shiyan 2012-08-25 893
ec063899 Alexander Shiyan 2012-12-03 @894 if (pdata->poll_time_us) {
ec063899 Alexander Shiyan 2012-12-03 895 dev_info(&pdev->dev, "Using poll mode, resolution %u usecs\n",
ec063899 Alexander Shiyan 2012-12-03 896 pdata->poll_time_us);
ec063899 Alexander Shiyan 2012-12-03 897 s->poll = 1;---
0-DAY kernel build testing backend Open Source Technology Center
http://lists.01.org/mailman/listinfo/kbuild Intel Corporation
Quoted 25 lines
Hi Alexander,
FYI, there are new smatch warnings show up in
tree: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-next head: e27a7d7977b07d701ba247e2ddb95466d95c898f commit: ec063899b7b308019afa9f5eb32f0a58a6c6ee53 [42/62] serial: sccnxp: Implement polling modeNew smatch warnings:
drivers/tty/serial/sccnxp.c:894sccnxp_probe()error: we previously assumed 'pdata' could be null (see line 887)git remote add tty
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
git remote update tty
git checkoutec063899b7b308019afa9f5eb32f0a58a6c6ee53
vim +/pdata +894drivers/tty/serial/sccnxp.c1d65c0b1 Alexander Shiyan 2012-08-25 881 default: 1d65c0b1 Alexander Shiyan 2012-08-25 882 dev_err(&pdev->dev, "Unsupported chip type %i\n", chiptype); 1d65c0b1 Alexander Shiyan 2012-08-25 883 ret = -ENOTSUPP; 1d65c0b1 Alexander Shiyan 2012-08-25 884 goto err_out; 1d65c0b1 Alexander Shiyan 2012-08-25 885 } 1d65c0b1 Alexander Shiyan 2012-08-25 886 1d65c0b1 Alexander Shiyan 2012-08-25 @887 if (!pdata) { 1d65c0b1 Alexander Shiyan 2012-08-25 888 dev_warn(&pdev->dev, 1d65c0b1 Alexander Shiyan 2012-08-25 889 "No platform data supplied, using defaults\n");
Quoted 8 lines
1d65c0b1 Alexander Shiyan 2012-08-25 890 s->pdata.frequency = s->freq_std;
1d65c0b1 Alexander Shiyan 2012-08-25 891 } else
1d65c0b1 Alexander Shiyan 2012-08-25 892 memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata));
1d65c0b1 Alexander Shiyan 2012-08-25 893
ec063899 Alexander Shiyan 2012-12-03 @894 if (pdata->poll_time_us) {
ec063899 Alexander Shiyan 2012-12-03 895 dev_info(&pdev->dev, "Using poll mode, resolution %u usecs\n",
ec063899 Alexander Shiyan 2012-12-03 896 pdata->poll_time_us);
ec063899 Alexander Shiyan 2012-12-03 897 s->poll = 1;I agree. In this case (line 894), there should be:
if (s->pdata.poll_time_us) {
dev_info(&pdev->dev, "Using poll mode, resolution %u usecs\n",
s->pdata.poll_time_us);...
Today, post the fix. Thank you.
---
PATCH 1/1 serial: sccnxp: Fix possible crash if no platform data supplied
In reply to Dan CarpenterThis patch fix possible kernel crash if no platform data supplied. We should not use platform data in this case, instead we will use default values from private driver structure.
--- drivers/tty/serial/sccnxp.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/tty/serial/sccnxp.c +2 -2
@@ -897,9 +897,9 @@ static int sccnxp_probe(struct platform_device *pdev) }else memcpy (&s->pdata, pdata,sizeof (struct sccnxp_pdata )); -if (pdata->poll_time_us) { +if (s->pdata.poll_time_us) {dev_info (&pdev->dev,"Using poll mode, resolution %u usecs\n" , - pdata->poll_time_us); + s->pdata.poll_time_us); s->poll =1 ; }
Signature · 1 line
1.7.8.6