On Fri, Feb 12, 2021 at 04:02:14PM +0000, Min Li wrote: > > > > xilinx_sdfec.c has: > > > > static int xsdfec_dev_open(struct inode *iptr, struct file *fptr) > > { > > return 0; > > } > > > > Which isn't even needed at all, but it is NOT trying to keep people from > > calling open multiple times. > > > > As for why the above logic does not work in your driver, think of what > > happens if someone opens the character device node, and then calls > > dup(2) on it and passes that file descriptor off to another program. Or > > just > > calls it multiple times from different threads in the same program. > > The kernel does not know what is happening here, and so, "do not allow to > > be opened multiple times" does not do anything to keep userspace from > > actually writing to the device node from multiple processes or threads. > > > > So don't even try, it's not worth it. > > > > > I mean if an application failed at opening the device, how can it > > > proceed to talk the device without a file descriptor? > > > > See above for how to do this. > > > > thanks, > > > > greg k-h > > Hi Greg > > Thanks for your insight for this. Now I can see this change doesn't prevent > deliberate hacker from opening the driver multiple times. > > What I had in mind is that it does prevent some unintentional mistake like > some one accidentally opens the application twice. The second > one would fail due to the change here.
Do not add kernel code that does not work for it's intended purpose :) thanks, greg k-h