Message ID | alpine.DEB.1.10.0901051523370.25066@gandalf.stny.rr.com |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
On Mon, 2009-01-05 at 15:30 -0500, Steven Rostedt wrote: > + hdr = vmalloc(len); > + if (hdr == NULL) A bit pedantic but, if (!hdr) perhaps? Cheers, Harvey -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tuesday 06 January 2009 07:00:25 Steven Rostedt wrote: > This is sloppy initialization because it initializes, not only in an > if condition, but also as the second part of a complex conditional. > > This patch makes the code a bit easier to read. ... > /* Suck in entire file: we'll want most of it. */ > /* vmalloc barfs on "unusual" numbers. Check here */ > - if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL) > + if (len > 64 * 1024 * 1024) > + return ERR_PTR(-ENOMEM); > + hdr = vmalloc(len); > + if (hdr == NULL) > return ERR_PTR(-ENOMEM); > if (copy_from_user(hdr, umod, len) != 0) { > err = -EFAULT; This line is not accidental nor casually written: the two statements are deliberately entwined. It is a succint complaint against the vagaries of vmalloc. So this patch is a messup, not a cleanup. But it's really upset me because it is lazy and timid: and too much kernel code is becoming mired in such scars. Instead of "how do I kill this warning and get it in the merge window" you should be thinking "how do I make the kernel better", and "I wonder if vmalloc still has this problem"... And I so look forward to the warm fuzzies I get when applying a real cleanup patch. Thanks, Rusty. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 6 Jan 2009, Rusty Russell wrote: > On Tuesday 06 January 2009 07:00:25 Steven Rostedt wrote: > > This is sloppy initialization because it initializes, not only in an > > if condition, but also as the second part of a complex conditional. > > > > This patch makes the code a bit easier to read. > ... > > /* Suck in entire file: we'll want most of it. */ > > /* vmalloc barfs on "unusual" numbers. Check here */ > > - if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL) > > + if (len > 64 * 1024 * 1024) > > + return ERR_PTR(-ENOMEM); > > + hdr = vmalloc(len); > > + if (hdr == NULL) > > return ERR_PTR(-ENOMEM); > > if (copy_from_user(hdr, umod, len) != 0) { > > err = -EFAULT; > > This line is not accidental nor casually written: the two statements > are deliberately entwined. It is a succint complaint against the > vagaries of vmalloc. > > So this patch is a messup, not a cleanup. It is not that much of a messup. I did not realize that the code was a political protest against the horrors of vmalloc ;-) > > But it's really upset me because it is lazy and timid: and too much > kernel code is becoming mired in such scars. Instead of "how do I kill > this warning and get it in the merge window" you should be thinking "how > do I make the kernel better", and "I wonder if vmalloc still has this > problem"... > > And I so look forward to the warm fuzzies I get when applying a real > cleanup patch. Well, I'm not about to go solve the vmalloc issues (not today anyway). But I'll go and see if I can get the branch tracer macro to work on all versions of gcc. Thanks, -- Steve -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/kernel/module.c b/kernel/module.c index 9712c52..112d6cd 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -1864,7 +1864,10 @@ static noinline struct module *load_module(void __user *umod, /* Suck in entire file: we'll want most of it. */ /* vmalloc barfs on "unusual" numbers. Check here */ - if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL) + if (len > 64 * 1024 * 1024) + return ERR_PTR(-ENOMEM); + hdr = vmalloc(len); + if (hdr == NULL) return ERR_PTR(-ENOMEM); if (copy_from_user(hdr, umod, len) != 0) { err = -EFAULT;