All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kernel-janitors@vger.kernel.org
Subject: re: irda: Remove BKL instances from af_irda.c
Date: Wed, 09 Mar 2016 09:19:10 +0000	[thread overview]
Message-ID: <20160309091910.GA6821@mwanda> (raw)

Hello Samuel Ortiz,

This is a semi-automatic email about new static checker warnings.

The patch 5b40964eadea: "irda: Remove BKL instances from af_irda.c"
from Oct 11, 2010, leads to the following Smatch complaint:

net/irda/af_irda.c:930 irda_accept()
	 error: we previously assumed 'sk' could be null (see line 848)

net/irda/af_irda.c
   847	
   848		if ((sk = sock->sk) = NULL)
   849			goto out;

sk is NULL here.  Oh how I love goto out.

   850	
   851		err = -EOPNOTSUPP;
   852		if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) &&
   853		    (sk->sk_type != SOCK_DGRAM))
   854			goto out;
   855	
   856		err = -EINVAL;
   857		if (sk->sk_state != TCP_LISTEN)
   858			goto out;
   859	
   860		/*
   861		 *	The read queue this time is holding sockets ready to use
   862		 *	hooked into the SABM we saved
   863		 */
   864	
   865		/*
   866		 * We can perform the accept only if there is incoming data
   867		 * on the listening socket.
   868		 * So, we will block the caller until we receive any data.
   869		 * If the caller was waiting on select() or poll() before
   870		 * calling us, the data is waiting for us ;-)
   871		 * Jean II
   872		 */
   873		while (1) {
   874			skb = skb_dequeue(&sk->sk_receive_queue);
   875			if (skb)
   876				break;
   877	
   878			/* Non blocking operation */
   879			err = -EWOULDBLOCK;
   880			if (flags & O_NONBLOCK)
   881				goto out;
   882	
   883			err = wait_event_interruptible(*(sk_sleep(sk)),
   884						skb_peek(&sk->sk_receive_queue));
   885			if (err)
   886				goto out;
   887		}
   888	
   889		newsk = newsock->sk;
   890		err = -EIO;
   891		if (newsk = NULL)
   892			goto out;
   893	
   894		newsk->sk_state = TCP_ESTABLISHED;
   895	
   896		new = irda_sk(newsk);
   897	
   898		/* Now attach up the new socket */
   899		new->tsap = irttp_dup(self->tsap, new);
   900		err = -EPERM; /* value does not seem to make sense. -arnd */
   901		if (!new->tsap) {
   902			pr_debug("%s(), dup failed!\n", __func__);
   903			kfree_skb(skb);
   904			goto out;
   905		}
   906	
   907		new->stsap_sel = new->tsap->stsap_sel;
   908		new->dtsap_sel = new->tsap->dtsap_sel;
   909		new->saddr = irttp_get_saddr(new->tsap);
   910		new->daddr = irttp_get_daddr(new->tsap);
   911	
   912		new->max_sdu_size_tx = self->max_sdu_size_tx;
   913		new->max_sdu_size_rx = self->max_sdu_size_rx;
   914		new->max_data_size   = self->max_data_size;
   915		new->max_header_size = self->max_header_size;
   916	
   917		memcpy(&new->qos_tx, &self->qos_tx, sizeof(struct qos_info));
   918	
   919		/* Clean up the original one to keep it in listen state */
   920		irttp_listen(self->tsap);
   921	
   922		kfree_skb(skb);
   923		sk->sk_ack_backlog--;
   924	
   925		newsock->state = SS_CONNECTED;
   926	
   927		irda_connect_response(new);
   928		err = 0;
   929	out:
   930		release_sock(sk);
                             ^^
Dereferenced inside the function.

   931		return err;
   932	}

regards,
dan carpenter

                 reply	other threads:[~2016-03-09  9:19 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160309091910.GA6821@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=kernel-janitors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.