From: Andrew Morton <akpm@linux-foundation.org>
To: P J P <ppandit@redhat.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] Fix NULL pointer dereference while loading initramfs
Date: Mon, 23 Sep 2013 12:41:10 -0700 [thread overview]
Message-ID: <20130923124110.9b8aebd78c2b602255f1dc1f@linux-foundation.org> (raw)
In-Reply-To: <alpine.LFD.2.03.1309151431180.7830@erqung.pbz>
On Sun, 15 Sep 2013 14:33:53 +0530 (IST) P J P <ppandit@redhat.com> wrote:
> Make menuconfig allows one to choose compression format of an
> initial ramdisk image. But this choice does not result in duly
> compressed initial ramdisk image. Because - $ make install - does
> not pass on the selected compression choice to the dracut(8) tool,
> which creates the initramfs file. dracut(8) generates the image
> with the default compression, ie. gzip(1).
>
> If a user chose any other compression instead of gzip(1), it leads
> to a crash due to NULL pointer dereference in crd_load(), caused by
> a NULL function pointer returned by the 'decompress_method()' routine.
> Because the initramfs image is gzip(1) compressed, whereas the kernel
> knows how decompress the chosen format and not gzip(1).
>
> This patch replaces the crash by an explicit panic() call with an
> appropriate error message. This shall prevent the kernel from
> eventually panicking in: init/do_mounts.c: mount_block_root() with
> -> panic("VFS: Unable to mount root fs on %s", b);
>
> Signed-off-by: P J P <prasad@redhat.com>
>
> diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
> index 6be2879..76faec1 100644
> --- a/init/do_mounts_rd.c
> +++ b/init/do_mounts_rd.c
> @@ -342,6 +342,13 @@ static int __init crd_load(int in_fd, int out_fd, decompress_fn deco)
> int result;
> crd_infd = in_fd;
> crd_outfd = out_fd;
> +
> + if (!deco)
> + {
> + printk(KERN_EMERG "Invalid decompression routine address: %p\n", deco);
> + panic("Could not decompress initial ramdisk image.");
> + }
A few things here.
- the coding style is very unconventional. We'd do it like this:
static int __init crd_load(int in_fd, int out_fd, decompress_fn deco)
{
int result;
crd_infd = in_fd;
crd_outfd = out_fd;
if (!deco) {
pr_emerg("Invalid decompression routine address: %p\n", deco);
panic("Could not decompress initial ramdisk image.");
}
result = deco(NULL, 0, compr_fill, compr_flush, NULL, NULL, error);
if (decompress_error)
result = 1;
return result;
}
- Note the use of the pr_emerg() shorthand, which prevents the
statement from overflowing 80 columns.
- There isn't much point in printing the value of `deco' - we already
know it's NULL. Isn't there some more useful message we can display
which will tell the user what he/she did wrong, and which explains
how to fix it?
- Is anyone working on fixing up Kconfig/dracut(8) so the correct
decompression method is used?
next prev parent reply other threads:[~2013-09-23 19:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-15 9:03 [PATCH 1/2] Fix NULL pointer dereference while loading initramfs P J P
2013-09-23 19:41 ` Andrew Morton [this message]
2013-09-24 1:38 ` Rob Landley
2013-09-24 19:01 ` P J P
2013-09-24 18:45 ` P J P
2013-09-30 21:43 ` P J P
2013-10-05 20:42 ` P J P
2013-10-05 21:28 ` Andrew Morton
2013-10-06 8:09 ` P J P
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=20130923124110.9b8aebd78c2b602255f1dc1f@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ppandit@redhat.com \
/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.