Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac0a3667 authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by Greg Kroah-Hartman
Browse files

staging: r8188eu: Add _enter_critical_mutex() error handling



_enter_critical_mutex() is a simple call to mutex_lock_interruptible(),
but there is no error handling code for it.

The patch removes wrapper _enter_critical_mutex() and
adds error handling for mutex_lock_interruptible().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d566e690
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -271,7 +271,8 @@ static s32 dump_mgntframe_and_wait_ack(struct adapter *padapter,
	if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
		return -1;

	_enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
	if (mutex_lock_interruptible(&pxmitpriv->ack_tx_mutex))
		return _FAIL;
	pxmitpriv->ack_tx = true;

	pmgntframe->ack_report = 1;
+0 −9
Original line number Diff line number Diff line
@@ -67,15 +67,6 @@ static inline struct list_head *get_list_head(struct __queue *queue)
	return &(queue->queue);
}

static inline int _enter_critical_mutex(struct mutex *pmutex,
					unsigned long *pirqL)
{
	int ret;

	ret = mutex_lock_interruptible(pmutex);
	return ret;
}

static inline int rtw_netif_queue_stopped(struct net_device *pnetdev)
{
	return  netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) &&
+2 −1
Original line number Diff line number Diff line
@@ -1058,7 +1058,8 @@ static int netdev_open(struct net_device *pnetdev)
	int ret;
	struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);

	_enter_critical_mutex(&padapter->hw_init_mutex, NULL);
	if (mutex_lock_interruptible(&padapter->hw_init_mutex))
		return -ERESTARTSYS;
	ret = _netdev_open(pnetdev);
	mutex_unlock(&padapter->hw_init_mutex);
	return ret;
+4 −1
Original line number Diff line number Diff line
@@ -249,7 +249,10 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i
		goto exit;
	}

	_enter_critical_mutex(&dvobjpriv->usb_vendor_req_mutex, NULL);
	if (mutex_lock_interruptible(&dvobjpriv->usb_vendor_req_mutex)) {
		status = -ERESTARTSYS;
		goto exit;
	}

	/*  Acquire IO memory for vendorreq */
	pIo_buf = dvobjpriv->usb_vendor_req_buf;