On Thu, Sep 23 2021 at 14:26, Greg KH wrote:
On Mon, Sep 13, 2021 at 01:01:25PM -0700, Sohil Mehta wrote:
+SYSCALL_DEFINE2(uintr_register_handler, u64 __user *, handler, unsigned int, flags) +{
- int ret;
- if (!uintr_arch_enabled())
return -EOPNOTSUPP;
- if (flags)
return -EINVAL;
- /* TODO: Validate the handler address */
- if (!handler)
return -EFAULT;
Um, that's a pretty big "TODO" here.
How are you going to define what is, and what is not, an allowed "handler"?
The requirement is obviously that this is a valid user space address, but that's so hard to validate that it needs to be done later.
At least the documentation claims that a non user space address should result in a #GP on delivery. Whether that holds in all corner cases (see the spurious handling muck) is a different question and might come back to us later through a channel which we hate with a passion :)
I'm sure the security people would like to get involved here, as well as the auditing people. Have you talked with them about their requirements for this type of stuff?
The handler is strictly a user space address and user space is generally allowed to shoot itself into the foot. If the address is bogus then this will resolve into inaccessible, not-mapped or not exectuable space and the application can keep the pieces.
Whether the hardware handles the resulting exception correctly is a different question, but that can't be prevented by any sanity check on the address at registration time.
Thanks,
tglx