]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
char: ppdev: Fix a possible null-pointer dereference in pp_release()
authorJia-Ju Bai <baijiaju1990@gmail.com>
Wed, 24 Jul 2019 09:04:26 +0000 (17:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jul 2019 11:21:15 +0000 (13:21 +0200)
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>
drivers/char/ppdev.c

index f0a8adca1eeea9259c48147824e76123a7f86993..c86f18aa8985c9f89ef0c13ce08840c47db3d02e 100644 (file)
@@ -737,7 +737,7 @@ static int pp_release(struct inode *inode, struct file *file)
                        "negotiated back to compatibility mode because user-space forgot\n");
        }
 
-       if (pp->flags & PP_CLAIMED) {
+       if ((pp->flags & PP_CLAIMED) && pp->pdev) {
                struct ieee1284_info *info;
 
                info = &pp->pdev->port->ieee1284;