diff options
Diffstat (limited to 'drivers/usb/mon/mon_bin.c')
| -rw-r--r-- | drivers/usb/mon/mon_bin.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c index f6ae753ab99b..f932f40302df 100644 --- a/drivers/usb/mon/mon_bin.c +++ b/drivers/usb/mon/mon_bin.c @@ -1004,7 +1004,9 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg  		break;  	case MON_IOCQ_RING_SIZE: +		mutex_lock(&rp->fetch_lock);  		ret = rp->b_size; +		mutex_unlock(&rp->fetch_lock);  		break;  	case MON_IOCT_RING_SIZE: @@ -1231,12 +1233,16 @@ static int mon_bin_vma_fault(struct vm_fault *vmf)  	unsigned long offset, chunk_idx;  	struct page *pageptr; +	mutex_lock(&rp->fetch_lock);  	offset = vmf->pgoff << PAGE_SHIFT; -	if (offset >= rp->b_size) +	if (offset >= rp->b_size) { +		mutex_unlock(&rp->fetch_lock);  		return VM_FAULT_SIGBUS; +	}  	chunk_idx = offset / CHUNK_SIZE;  	pageptr = rp->b_vec[chunk_idx].pg;  	get_page(pageptr); +	mutex_unlock(&rp->fetch_lock);  	vmf->page = pageptr;  	return 0;  }  | 
