Skip to contentSkip to conversation

drivers/tty/serial/sccnxp.c:894 sccnxp_probe() error: we previously assumed 'pdata' could be null (see line 887)

PATCH In review Dan Carpenter 2 participants 3 messages Jan 17, 2013 TTY layer and serial drivers

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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 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");
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.

---

#2 lore raw

PATCH 1/1 serial: sccnxp: Fix possible crash if no platform data supplied

In reply to Dan Carpenter

This 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
index 0c86a0b..3fd83e3 100644
@@ -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