From: Ivan Priest Date: Thu, 2 May 2019 16:16:05 +0000 (+0100) Subject: [NEUS7920-477] wlbt: prevent simultaneous gdb monitor clients X-Git-Tag: MMI-QSAS30.62-33-3~861 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=8d05e2586a8f483b93ba48d573b64260cc13fcc9;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git [NEUS7920-477] wlbt: prevent simultaneous gdb monitor clients No more than one gdb client allowed per node at a time. Multiple mmap clients are permitted as they are read only Change-Id: I9e734c776ea13479c9191f6f8eca55ac15b00a3e SCSC-Bug-Id: SSB-52259 Signed-off-by: Ivan Priest --- diff --git a/drivers/misc/samsung/scsc/mx_mmap.c b/drivers/misc/samsung/scsc/mx_mmap.c index 72caddcddc01..10b32f5636c4 100644 --- a/drivers/misc/samsung/scsc/mx_mmap.c +++ b/drivers/misc/samsung/scsc/mx_mmap.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -67,6 +68,8 @@ struct mx_mmap_dev { struct kfifo fifo; /* Associated read_wait queue.*/ wait_queue_head_t read_wait; + /* User count */ + volatile unsigned long lock; }; /** @@ -150,6 +153,11 @@ int mx_gdb_open(struct inode *inode, struct file *filp) SCSC_TAG_INFO(MX_MMAP, "open %p\n", filp); + if (test_and_set_bit_lock(0, &mx_dev->lock)) { + SCSC_TAG_ERR(MX_MMAP, "already open %p\n", filp); + return -EBUSY; + } + filp->private_data = mx_dev; mx_dev->filp = filp; ret = kfifo_alloc(&mx_dev->fifo, GDB_TRANSPORT_BUF_LENGTH, GFP_KERNEL); @@ -276,6 +284,8 @@ int mx_gdb_release(struct inode *inode, struct file *filp) return -EIO; } + clear_bit_unlock(0, &mx_dev->lock); + filp->private_data = NULL; mx_dev->filp = NULL; kfifo_free(&mx_dev->fifo);