]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/userfaultfd.c
userfaultfd: require UFFDIO_API before other ioctls
[karo-tx-linux.git] / fs / userfaultfd.c
index 5f11678907d5d90427f089a3c0e649c4ee2444d1..af88ef6fffff7e972fcee7a26032424b4318dbb7 100644 (file)
@@ -577,7 +577,6 @@ static ssize_t userfaultfd_read(struct file *file, char __user *buf,
 
        if (ctx->state == UFFD_STATE_WAIT_API)
                return -EINVAL;
-       BUG_ON(ctx->state != UFFD_STATE_RUNNING);
 
        for (;;) {
                if (count < sizeof(msg))
@@ -1115,6 +1114,9 @@ static long userfaultfd_ioctl(struct file *file, unsigned cmd,
        int ret = -EINVAL;
        struct userfaultfd_ctx *ctx = file->private_data;
 
+       if (cmd != UFFDIO_API && ctx->state == UFFD_STATE_WAIT_API)
+               return -EINVAL;
+
        switch(cmd) {
        case UFFDIO_API:
                ret = userfaultfd_api(ctx, arg);