From 80d0f3b9fa85080027bbfb676c90b72fe7ea2076 Mon Sep 17 00:00:00 2001 From: Naveen Kumar S Date: Mon, 15 Jun 2020 17:01:48 +0530 Subject: [PATCH] misc: tegra-cec: update access_ok() parameters Starting K5.9, the access type parameter (read/write) of access_ok() API has been removed. And also, the address parameter has been updated to "void *" type from "unsigned long". Introduced API tegra_access_ok() to abstract the difference in parameters across different kernel versions. bug 200601926 Change-Id: I0d72e03f5e0c56eb935107eaf306bc2d68ed13e3 Signed-off-by: Naveen Kumar S Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2361042 Reviewed-by: Shu Zhong Reviewed-by: automaticguardword Reviewed-by: Arun Swain Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions --- drivers/misc/tegra-cec/tegra_cec.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/misc/tegra-cec/tegra_cec.c b/drivers/misc/tegra-cec/tegra_cec.c index 2111ebad..2ddd86cc 100644 --- a/drivers/misc/tegra-cec/tegra_cec.c +++ b/drivers/misc/tegra-cec/tegra_cec.c @@ -1,7 +1,7 @@ /* * drivers/misc/tegra-cec/tegra_cec.c * - * Copyright (c) 2012-2018, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2012-2020, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -361,6 +361,18 @@ static int tegra_cec_get_rx_snoop(struct tegra_cec *cec, u32 *state) return 0; } +static int tegra_cec_access_ok(u8 access_type, unsigned long arg, size_t size) +{ + int err = 0; + +#if KERNEL_VERSION(5, 4, 0) > LINUX_VERSION_CODE + err = !access_ok(access_type, arg, size); +#else + err = !access_ok((void *)arg, size); +#endif + + return err; +} static long tegra_cec_ioctl(struct file *file, unsigned int cmd, unsigned long arg) @@ -383,7 +395,7 @@ static long tegra_cec_ioctl(struct file *file, unsigned int cmd, tegra_cec_dump_registers(cec); break; case TEGRA_CEC_IOCTL_SET_RX_SNOOP: - err = !access_ok(VERIFY_READ, arg, sizeof(u32)); + err = tegra_cec_access_ok(VERIFY_READ, arg, sizeof(u32)); if (err) return -EFAULT; if (copy_from_user((u32 *) &state, (u32 *) arg, sizeof(u32))) @@ -391,7 +403,7 @@ static long tegra_cec_ioctl(struct file *file, unsigned int cmd, tegra_cec_set_rx_snoop(cec, state); break; case TEGRA_CEC_IOCTL_GET_RX_SNOOP: - err = !access_ok(VERIFY_WRITE, arg, sizeof(u32)); + err = tegra_cec_access_ok(VERIFY_READ, arg, sizeof(u32)); if (err) return -EFAULT; err = tegra_cec_get_rx_snoop(cec, &state); @@ -401,7 +413,7 @@ static long tegra_cec_ioctl(struct file *file, unsigned int cmd, } break; case TEGRA_CEC_IOCTL_GET_POST_RECOVERY: - err = !access_ok(VERIFY_WRITE, arg, sizeof(u32)); + err = tegra_cec_access_ok(VERIFY_READ, arg, sizeof(u32)); if (err) return -EFAULT; if (copy_to_user((bool *) arg, &post_recovery, sizeof(bool)))