Messages in this thread | | | Date | Thu, 22 May 2008 18:08:53 +0200 | From | Marcin Slusarz <> | Subject | Re: [PATCH 6/6] ERR_PTR: warn when ERR_PTR parameter is not errno value |
| |
On Mon, May 19, 2008 at 02:11:21PM +0200, Johannes Weiner wrote: > Hi, > > Alexey Dobriyan <adobriyan@gmail.com> writes: > > > On Mon, May 19, 2008 at 01:13:20AM +0200, Johannes Weiner wrote: > >> Marcin Slusarz <marcin.slusarz@gmail.com> writes: > >> > >> > Check at runtime whether error argument of ERR_PTR and ERR_OR_0_PTR > >> > is valid. It can catch bugs which possibly lead to oops or panic earlier. > >> > > >> > Currently there are > 600 calls of ERR_PTR with non-constant argument > >> > in Linux kernel sources. > > > >> > --- a/include/linux/err.h > >> > +++ b/include/linux/err.h > >> > @@ -3,6 +3,7 @@ > >> > > >> > #include <linux/compiler.h> > >> > > >> > +#include <asm/bug.h> > >> > #include <asm/errno.h> > >> > > >> > /* > >> > @@ -21,6 +22,7 @@ > >> > > >> > static inline void *__ERR_PTR(long error) > >> > { > >> > + WARN_ON(!IS_ERR_VALUE(error)); > >> > return (void *) error; > >> > } > >> > > >> > @@ -28,6 +30,7 @@ static inline void *__ERR_PTR(long error) > >> > > >> > static inline void *__ERR_OR_0_PTR(long error) > >> > { > >> > + WARN_ON(!IS_ERR_VALUE(error) && error); > >> > return (void *) error; > >> > } > >> > >> How about WARN_ON_ONCE() instead? That would warn once for each erroneous user > >> which should be enough. > > > > And blow up .bss ? > > Well, okay. Perhaps ratelimiting? I really prefer a bigger image size > over a spammed dmesg.
Well, when I add 0 as a valid argument for ERR_PTR, this check won't add too many false positives, so I think simple WARN_ON is safe.
Marcin
| |