lkml.org 
[lkml]   [2024]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 14/31] ntsync: Introduce NTSYNC_IOC_MUTEX_READ.
    Date
    This corresponds to the NT syscall NtQueryMutant().

    This returns the recursion count, owner, and abandoned state of the mutex.

    Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
    ---
    drivers/misc/ntsync.c | 23 +++++++++++++++++++++++
    include/uapi/linux/ntsync.h | 1 +
    2 files changed, 24 insertions(+)

    diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
    index 0daaeeeba051..b07510035c1f 100644
    --- a/drivers/misc/ntsync.c
    +++ b/drivers/misc/ntsync.c
    @@ -547,6 +547,27 @@ static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp)
    return 0;
    }

    +static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp)
    +{
    + struct ntsync_mutex_args __user *user_args = argp;
    + struct ntsync_mutex_args args;
    + int ret;
    +
    + if (mutex->type != NTSYNC_TYPE_MUTEX)
    + return -EINVAL;
    +
    + args.mutex = 0;
    + spin_lock(&mutex->lock);
    + args.count = mutex->u.mutex.count;
    + args.owner = mutex->u.mutex.owner;
    + ret = mutex->u.mutex.ownerdead ? -EOWNERDEAD : 0;
    + spin_unlock(&mutex->lock);
    +
    + if (copy_to_user(user_args, &args, sizeof(args)))
    + return -EFAULT;
    + return ret;
    +}
    +
    static int ntsync_obj_release(struct inode *inode, struct file *file)
    {
    struct ntsync_obj *obj = file->private_data;
    @@ -572,6 +593,8 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd,
    return ntsync_mutex_unlock(obj, argp);
    case NTSYNC_IOC_MUTEX_KILL:
    return ntsync_mutex_kill(obj, argp);
    + case NTSYNC_IOC_MUTEX_READ:
    + return ntsync_mutex_read(obj, argp);
    case NTSYNC_IOC_EVENT_SET:
    return ntsync_event_set(obj, argp, false);
    case NTSYNC_IOC_EVENT_RESET:
    diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
    index 42f51dc4e57e..25f3296cfabf 100644
    --- a/include/uapi/linux/ntsync.h
    +++ b/include/uapi/linux/ntsync.h
    @@ -52,5 +52,6 @@ struct ntsync_wait_args {
    #define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
    #define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
    #define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
    +#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)

    #endif
    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 15:11    [W:5.460 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site