From: Thomas Gleixner <tglx@linutronix.de>
To: Tejun Heo <tj@kernel.org>
Cc: akpm@linux-foundation.org, Sasha Levin <sasha.levin@oracle.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] posix-timer: don't call idr_find() w/ negative ID
Date: Wed, 20 Feb 2013 22:38:36 +0100 (CET) [thread overview]
Message-ID: <alpine.LFD.2.02.1302202208470.22263@ionos> (raw)
In-Reply-To: <20130220210116.GD3570@htj.dyndns.org>
On Wed, 20 Feb 2013, Tejun Heo wrote:
> Recent idr updates make idr_find() trigger WARN_ON_ONCE() before
> returning NULL when a negative ID is specified. Apparently,
> posix-timer::__lock_timer() was depending on idr_find() returning NULL
> on negative ID, thus triggering the new WARN_ON_ONCE(). Make
> __lock_timer() first check whether @timer_id is negative and return
> NULL without invoking idr_find() if so.
I can grumpily accept the patch below as a quick hack fix, which can
go to stable as well, but not with such a patently misleading
changelog.
The changelog wants to document, that this is not a proper fix at all
and just a quick hack which can be nonintrusively applied to stable.
> Note that the previous code was theoretically broken. idr_find()
> masked off the sign bit before performing lookup and if the matching
> IDs were in use, it would have returned pointer for the incorrect
> entry.
Brilliant code that. What's the purpose of having the idr id as an
"int" and then masking off the sign bit instead of simply refusing
negative id values in the idr code itself or simply making the id
"unsigned int" ?
Just look at the various f*ckedup users of MAX_IDR_MASK. Example:
drivers/pps/pps.c:
err = idr_get_new(&pps_idr, pps, &pps->id);
mutex_unlock(&pps_idr_lock);
if (err < 0)
return err;
pps->id &= MAX_IDR_MASK;
Why the heck is that necessary? Either we get an error code and we
don't care about pps->id or idr_get_new() sets pps->id to a valid idr
id. If the idr code really returns a _valid_ id with the sign bit set,
then the idr code is broken beyond repair and needs to be fixed
instead of propagating that insanity all over the users.
Thanks,
tglx
next prev parent reply other threads:[~2013-02-20 21:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-20 18:44 [PATCH] idr: prevent NULL deref on lookups before insertions Sasha Levin
2013-02-20 18:45 ` Tejun Heo
2013-02-20 19:23 ` Sasha Levin
2013-02-20 21:01 ` [PATCH] posix-timer: don't call idr_find() w/ negative ID Tejun Heo
2013-02-20 21:23 ` Andrew Morton
2013-02-20 21:37 ` Tejun Heo
2013-02-20 22:05 ` Andrew Morton
2013-02-20 22:08 ` Tejun Heo
2013-02-20 22:40 ` [PATCH] posix-timer: don't call idr_find() w/ out-of-range ID Tejun Heo
2013-02-20 23:01 ` Thomas Gleixner
2013-02-20 23:07 ` Tejun Heo
2013-02-20 23:11 ` Thomas Gleixner
2013-02-20 23:24 ` [PATCH UPDATED] " Tejun Heo
2013-02-20 23:35 ` [PATCH] idr: explain WARN_ON_ONCE() on negative IDs " Tejun Heo
2013-02-21 9:10 ` Thomas Gleixner
2013-02-21 16:38 ` [tip:timers/urgent] posix-timer: Don't call idr_find() with " tip-bot for Tejun Heo
2013-02-20 22:10 ` [PATCH] posix-timer: don't call idr_find() w/ negative ID Sasha Levin
2013-02-20 22:12 ` Tejun Heo
2013-02-20 22:15 ` Sasha Levin
2013-02-20 22:20 ` Tejun Heo
2013-02-20 23:09 ` Thomas Gleixner
2013-02-20 21:32 ` Sasha Levin
2013-02-20 21:38 ` Thomas Gleixner [this message]
2013-02-20 21:43 ` Tejun Heo
2013-02-20 21:47 ` Thomas Gleixner
2013-02-20 21:50 ` Tejun Heo
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=alpine.LFD.2.02.1302202208470.22263@ionos \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sasha.levin@oracle.com \
--cc=tj@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome