From 844beed5d728898e7ce0995882ac944c14f20236 Mon Sep 17 00:00:00 2001 From: Bob Lee Date: Mon, 21 Feb 2022 00:58:47 +0800 Subject: [PATCH] Fix a logic error in examples/ioctl.c (#137) Change the "alloc_ret" and "cdev_ret" initial values to non-zero. According to the source code, "alloc_chrdev_region" and "cdev_add" return zero on success, and negative code on failure. So, if the "alloc_chrdev_region" failed, the if condition becomes true, then we will jump to the label "error" by goto, checking each return value whether is a success state from both functions mentioned above and dealing with it properly for exiting the process. However, it checks the success state by comparing the return value with zero (means success), and we got "cdev_ret == 0" is true from the initial value zero, while we didn't execute "cdev_add" yet. Hence, there was a logic error when the initial value is zero. Co-authored-by: NOVBobLee --- examples/ioctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/ioctl.c b/examples/ioctl.c index c9956df..5172732 100644 --- a/examples/ioctl.c +++ b/examples/ioctl.c @@ -149,8 +149,8 @@ static struct file_operations fops = { static int ioctl_init(void) { dev_t dev; - int alloc_ret = 0; - int cdev_ret = 0; + int alloc_ret = -1; + int cdev_ret = -1; alloc_ret = alloc_chrdev_region(&dev, 0, num_of_dev, DRIVER_NAME); if (alloc_ret)