What is the point of using the linux macro access_ok()
If __lddk_copy_from_user()
simply calls copy_from_user()
, then the access_ok()
checks are redundant, because copy_from_user()
performs these checks itself.
The access_ok()
checks ensure that the userspace application isn't asking the kernel to read from or write to kernel addresses (they're an integrity/security check). Just because a pointer was supplied by userspace doesn't mean that it's definitely a userspace pointer - in many cases "kernel pointer" simply means that it's pointing within a particular region of the virtual address space.
Additionally, calling access_ok()
with VERIFY_WRITE
implies VERIFY_READ
, so if you check the former you do not need to also check the latter.
As of this commit in 2019,
access_ok()
no long has the type
argument, so the VERIFY_WRITE
versus VERIFY_READ
point is moot.