Skip to content

Commit 844beed

Browse files
NOVBobLeeNOVBobLee
andauthored
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 <[email protected]>
1 parent d8216ff commit 844beed

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

examples/ioctl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ static struct file_operations fops = {
149149
static int ioctl_init(void)
150150
{
151151
dev_t dev;
152-
int alloc_ret = 0;
153-
int cdev_ret = 0;
152+
int alloc_ret = -1;
153+
int cdev_ret = -1;
154154
alloc_ret = alloc_chrdev_region(&dev, 0, num_of_dev, DRIVER_NAME);
155155

156156
if (alloc_ret)

0 commit comments

Comments
 (0)