aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJia-Ju Bai <baijiaju1990@gmail.com>2019-07-24 05:04:26 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-07-25 07:21:15 -0400
commit7bdd9695970eb8cd5b987e08f99cb8f0c84f30fd (patch)
treebfa33fca2a670b52ce2cff43f73c4474eed44b04
parent092f47c383adbff4d873dcb7f0887954bd407a08 (diff)
char: ppdev: Fix a possible null-pointer dereference in pp_release()
In pp_release(), there is an if statement on line 730 to check whether pp->pdev is NULL: else if ((pp->flags & PP_CLAIMED) && pp->pdev && ...) When pp->pdev is NULL, it is used on line 743: info = &pp->pdev->port->ieee1284; and on line 748: parport_release(pp->pdev); Thus, a possible null-pointer dereference may occur. To fix this bug, pp->pdev is checked on line 740. This bug is found by a static analysis tool STCheck written by us. Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com> Link: https://lore.kernel.org/r/20190724090426.1401-1-baijiaju1990@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/char/ppdev.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
index f0a8adca1eee..c86f18aa8985 100644
--- a/drivers/char/ppdev.c
+++ b/drivers/char/ppdev.c
@@ -737,7 +737,7 @@ static int pp_release(struct inode *inode, struct file *file)
737 "negotiated back to compatibility mode because user-space forgot\n"); 737 "negotiated back to compatibility mode because user-space forgot\n");
738 } 738 }
739 739
740 if (pp->flags & PP_CLAIMED) { 740 if ((pp->flags & PP_CLAIMED) && pp->pdev) {
741 struct ieee1284_info *info; 741 struct ieee1284_info *info;
742 742
743 info = &pp->pdev->port->ieee1284; 743 info = &pp->pdev->port->ieee1284;