From 764a9e6bd6d1a30cb8e105b85a6f61d2ddd005dd Mon Sep 17 00:00:00 2001 From: "zhiwei.yuan" Date: Tue, 22 Oct 2019 16:28:39 +0800 Subject: [PATCH] vdin: change "IS_ERR" invoking to "IS_ERR_OR_NULL" [1/1] PD#SWPL-15522 Problem: kernel panic caused by NULL pointer Solution: check pointer before access members of structure Verify: verified by t962x2_x301 Change-Id: Ia20192bb88d90b06d43c04e6e4e6aa37b2862aa2 Signed-off-by: zhiwei.yuan --- drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c | 44 ++++++++++++------------ drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c | 30 ++++++++-------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c index 64d6c0a..ee87bb5 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c @@ -248,8 +248,8 @@ static void vdin_dump_one_buf_mem(char *path, struct vdin_dev_s *devp, set_fs(KERNEL_DS); filp = filp_open(path, O_RDWR|O_CREAT, 0666); - if (IS_ERR(filp)) { - pr_info("create %s error.\n", path); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s error or filp is NULL.\n", path); return; } if ((devp->cma_config_flag & 0x1) && @@ -345,8 +345,8 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp) mem_size = (loff_t)devp->canvas_active_w * devp->canvas_h; for (i = 0; i < VDIN_CANVAS_MAX_CNT; i++) vfbuf[i] = NULL; - if (IS_ERR(filp)) { - pr_info("create %s error.\n", path); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s error or filp is NULL.\n", path); return; } if ((devp->cma_config_flag & 0x1) && @@ -523,8 +523,8 @@ static void vdin_dump_one_afbce_mem(char *path, struct vdin_dev_s *devp, } strcat(buff, "_1header.bin"); filp = filp_open(buff, O_RDWR|O_CREAT, 0666); - if (IS_ERR(filp)) { - pr_info("create %s header error.\n", buff); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s header error or filp is NULL.\n", buff); return; } @@ -544,8 +544,8 @@ static void vdin_dump_one_afbce_mem(char *path, struct vdin_dev_s *devp, strcpy(buff, path); strcat(buff, "_1table.bin"); filp = filp_open(buff, O_RDWR|O_CREAT, 0666); - if (IS_ERR(filp)) { - pr_info("create %s table error.\n", buff); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s table error or filp is NULL.\n", buff); return; } vdin_dma_flush(devp, buf_table, @@ -564,8 +564,8 @@ static void vdin_dump_one_afbce_mem(char *path, struct vdin_dev_s *devp, strcpy(buff, path); strcat(buff, "_1body.bin"); filp = filp_open(buff, O_RDWR|O_CREAT, 0666); - if (IS_ERR(filp)) { - pr_info("create %s body error.\n", buff); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s body error or filp is NULL.\n", buff); return; } if (highmem_flag == 0) { @@ -622,8 +622,8 @@ static void dump_other_mem(char *path, set_fs(KERNEL_DS); filp = filp_open(path, O_RDWR|O_CREAT, 0666); - if (IS_ERR(filp)) { - pr_info("create %s error.\n", path); + if (IS_ERR_OR_NULL(filp)) { + pr_info("create %s error or filp is NULL.\n", path); return; } buf = phys_to_virt(start); @@ -1078,8 +1078,8 @@ static void vdin_write_afbce_mem(struct vdin_dev_s *devp, char *type, set_fs(KERNEL_DS); pr_info("head bin file path = %s\n", md_path_head); filp = filp_open(md_path_head, O_RDONLY, 0); - if (IS_ERR(filp)) { - pr_info("read %s error.\n", md_path_head); + if (IS_ERR_OR_NULL(filp)) { + pr_info("read %s error or filp is NULL.\n", md_path_head); return; } @@ -1097,8 +1097,8 @@ static void vdin_write_afbce_mem(struct vdin_dev_s *devp, char *type, set_fs(KERNEL_DS); pr_info("body bin file path = %s\n", md_path_body); filp = filp_open(md_path_body, O_RDONLY, 0); - if (IS_ERR(filp)) { - pr_info("read %s error.\n", md_path_body); + if (IS_ERR_OR_NULL(filp)) { + pr_info("read %s error or filp is NULL.\n", md_path_body); return; } @@ -1169,8 +1169,8 @@ static void vdin_write_mem( set_fs(KERNEL_DS); pr_info("bin file path = %s\n", path); filp = filp_open(path, O_RDONLY, 0); - if (IS_ERR(filp)) { - pr_info("read %s error.\n", path); + if (IS_ERR_OR_NULL(filp)) { + pr_info("read %s error or filp is NULL.\n", path); return; } devp->curr_wr_vfe->vf.type = VIDTYPE_VIU_SINGLE_PLANE | @@ -1241,8 +1241,8 @@ static void vdin_write_mem( set_fs(KERNEL_DS); pr_info("md file path = %s\n", md_path); md_flip = filp_open(md_path, O_RDONLY, 0); - if (IS_ERR(md_flip)) { - pr_info("read %s error.\n", md_path); + if (IS_ERR_OR_NULL(md_flip)) { + pr_info("read %s error or md_flip = NULL.\n", md_path); return; } index = devp->curr_wr_vfe->vf.index & 0xff; @@ -1295,8 +1295,8 @@ static void vdin_write_cont_mem(struct vdin_dev_s *devp, char *type, set_fs(KERNEL_DS); pr_info("bin file path = %s\n", path); filp = filp_open(path, O_RDONLY, 0); - if (IS_ERR(filp)) { - pr_info("read %s error.\n", path); + if (IS_ERR_OR_NULL(filp)) { + pr_info("read %s error or filp is NULL.\n", path); return; } for (i = 0; i < field_num; i++) { diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c index 397cd88..9dcead4 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c @@ -824,9 +824,9 @@ int start_tvin_service(int no, struct vdin_parm_s *para) enum tvin_sig_fmt_e fmt; mutex_lock(&devp->fe_lock); - if (IS_ERR(devp)) { - pr_err("[vdin]%s vdin%d has't registered,please register.\n", - __func__, no); + if (IS_ERR_OR_NULL(devp)) { + pr_err("[vdin]%s vdin%d has't registered or devp is NULL\n", + __func__, no); mutex_unlock(&devp->fe_lock); return -1; } @@ -1043,9 +1043,9 @@ static int vdin_ioctl_fe(int no, struct fe_arg_s *parm) { struct vdin_dev_s *devp = vdin_devp[no]; int ret = 0; - if (IS_ERR(devp)) { - pr_err("[vdin]%s vdin%d has't registered,please register.\n", - __func__, no); + if (IS_ERR_OR_NULL(devp)) { + pr_err("[vdin]%s vdin%d has't registered or devp is NULL\n", + __func__, no); return -1; } if (devp->frontend && @@ -2752,10 +2752,12 @@ static long vdin_ioctl(struct file *file, unsigned int cmd, unsigned long arg) pr_info("TVIN_IOC_GET_ALLM_MODE err\n\n"); break; } - pr_info("allm mode-%d,IT=%d,CN=%d\n\n", - devp->prop.latency.allm_mode, - devp->prop.latency.it_content, - devp->prop.latency.cn_type); + + if (vdin_dbg_en) + pr_info("allm mode-%d,IT=%d,CN=%d\n\n", + devp->prop.latency.allm_mode, + devp->prop.latency.it_content, + devp->prop.latency.cn_type); mutex_unlock(&devp->fe_lock); break; case TVIN_IOC_G_VDIN_HIST: @@ -3154,8 +3156,8 @@ static int vdin_drv_probe(struct platform_device *pdev) goto fail_add_cdev; } vdevp->dev = vdin_create_device(&pdev->dev, vdevp->index); - if (IS_ERR(vdevp->dev)) { - pr_err("%s: failed to create device. !!!!!!!!!!\n", __func__); + if (IS_ERR_OR_NULL(vdevp->dev)) { + pr_err("%s: failed to create device. or dev=NULL\n", __func__); ret = PTR_ERR(vdevp->dev); goto fail_create_device; } @@ -3589,9 +3591,9 @@ static int __init vdin_drv_init(void) pr_info("%s: major %d\n", __func__, MAJOR(vdin_devno)); vdin_clsp = class_create(THIS_MODULE, VDIN_CLS_NAME); - if (IS_ERR(vdin_clsp)) { + if (IS_ERR_OR_NULL(vdin_clsp)) { ret = PTR_ERR(vdin_clsp); - pr_err("%s: failed to create class\n", __func__); + pr_err("%s: failed to create class or ret=NULL\n", __func__); goto fail_class_create; } #ifdef DEBUG_SUPPORT -- 2.7.4