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

Commit 74a3b060 authored by Larry Finger's avatar Larry Finger Committed by Greg Kroah-Hartman
Browse files

staging: r8712u: Check pointer before use



Routine r8712_usb_read_port() dereferences "precvbuf" before testing it
for NULL.

Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d25f658d
Loading
Loading
Loading
Loading
+34 −38
Original line number Diff line number Diff line
@@ -270,14 +270,13 @@ u32 r8712_usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
	struct usb_device *pusbd = pdvobj->pusbdev;

	if (adapter->bDriverStopped || adapter->bSurpriseRemoved ||
	    adapter->pwrctrlpriv.pnp_bstop_trx)
	    adapter->pwrctrlpriv.pnp_bstop_trx || !precvbuf)
		return _FAIL;
	if (precvbuf->reuse || !precvbuf->pskb) {
		precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue);
		if (precvbuf->pskb != NULL)
			precvbuf->reuse = true;
	}
	if (precvbuf != NULL) {
	r8712_init_recvbuf(adapter, precvbuf);
	/* re-assign for linux based on skb */
	if (!precvbuf->reuse || !precvbuf->pskb) {
@@ -312,9 +311,6 @@ u32 r8712_usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
	err = usb_submit_urb(purb, GFP_ATOMIC);
	if ((err) && (err != (-EPERM)))
		ret = _FAIL;
	} else {
		ret = _FAIL;
	}
	return ret;
}