All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manfred Spraul <manfred@colorfullife.com>
To: Dave Jones <davej@redhat.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	davidlohr.bueso@hp.com
Subject: Re: ipc/sem.c: change perform_atomic_semop parameters
Date: Tue, 10 Jun 2014 19:56:48 +0200	[thread overview]
Message-ID: <539746E0.6020505@colorfullife.com> (raw)
In-Reply-To: <20140610141933.GA16263@redhat.com>

Hi Dave,

On 06/10/2014 04:19 PM, Dave Jones wrote:
> On Fri, Jun 06, 2014 at 11:50:06PM +0000, Linux Kernel wrote:
>   > Gitweb:     http://git.kernel.org/linus/;a=commit;h=d198cd6d6d02d0a335af2deacb60816ebb4719d1
>   > Commit:     d198cd6d6d02d0a335af2deacb60816ebb4719d1
>   > Parent:     2f2ed41dcaec34f2d6f224aa84efcc5a9dd8d5c3
>   > Refname:    refs/heads/next
>   > Author:     Manfred Spraul <manfred@colorfullife.com>
>   > AuthorDate: Fri Jun 6 14:37:49 2014 -0700
>   > Committer:  Linus Torvalds <torvalds@linux-foundation.org>
>   > CommitDate: Fri Jun 6 16:08:15 2014 -0700
>   >
>   >     ipc/sem.c: change perform_atomic_semop parameters
>   >
>   >     Right now, perform_atomic_semop gets the content of sem_queue as
>   >     individual fields.  Changes that, instead pass a pointer to sem_queue.
>   >
>   >     This is a preparation for the next patch: it uses sem_queue to store the
>   >     reason why a task must sleep.
>   >
>   >     Signed-off-by: Manfred Spraul <manfred@colorfullife.com>
>   >     Cc: Davidlohr Bueso <davidlohr.bueso@hp.com>
>   >     Cc: Michael Kerrisk <mtk.manpages@gmail.com>
>   >     Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
>   >     Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
>
> After this patch, coverity started complaining about a potential deref
> after null check. (It may have been a problem before, but the code motion
> causes a new 'event')
>
>      	33. var_compare_op: Comparing un to null implies that un might be null.
> 1878        if (un && un->semid == -1)
> 1879                goto out_unlock_free;
> 1880
> 1881        queue.sops = sops;
> 1882        queue.nsops = nsops;
Correct, un can be NULL.

But only if sem_flg & SEM_UNDO is false for every operation:
from semtimedop():
>>                if (sop->sem_flg & SEM_UNDO)
>>                         undos = 1;
>> [...]
>>         if (undos) {
>>                 /* On success, find_alloc_undo takes the 
>> rcu_read_lock */
>>                 un = find_alloc_undo(ns, semid);
>>                 if (IS_ERR(un)) {
>>                         error = PTR_ERR(un);
>>                         goto out_free;
>>                 }
>>         } else {
>>                 un = NULL;
>>                 rcu_read_lock();
>>         }


>      	34. alias_transfer: Assigning: queue.undo = un.
> 1883        queue.undo = un;
> 1884        queue.pid = task_tgid_vnr(current);
> 1885        queue.alter = alter;
> 1886
Correct.
>      	
> CID 1222114 (#1 of 1): Dereference after null check (FORWARD_NULL)
> 35. var_deref_model: Passing &queue to perform_atomic_semop, which dereferences null queue.undo. [show details]
> 1887        error = perform_atomic_semop(sma, &queue);
Passing &queue to perform_atomic_semop (correct),
which dereferences null queue.undo: Incorrect. queue.undo is only 
dereferenced if sem_flg&SEM_UNDO is true.

Thus: As far as I can see it's a false alarm.

And - even more simply: queue.un=NULL is the common case.

--
     Manfred

      reply	other threads:[~2014-06-10 17:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20140606235006.342B5660FCD@gitolite.kernel.org>
2014-06-10 14:19 ` ipc/sem.c: change perform_atomic_semop parameters Dave Jones
2014-06-10 17:56   ` Manfred Spraul [this message]

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=539746E0.6020505@colorfullife.com \
    --to=manfred@colorfullife.com \
    --cc=davej@redhat.com \
    --cc=davidlohr.bueso@hp.com \
    --cc=linux-kernel@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.