public inbox for linux-kbuild@vger.kernel.org
 help / color / mirror / Atom feed
From: Dirk Gouders <dirk@gouders.net>
To: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Martin Walch <walch.martin@web.de>,
	linux-kbuild@vger.kernel.org, Michal Marek <mmarek@suse.cz>,
	Andrew Morton <akpm@linux-foundation.org>,
	Libo Chen <libo.chen@huawei.com>
Subject: Re: Segmentation Fault with 'm' Dependencies
Date: Tue, 19 Nov 2013 21:57:00 +0100	[thread overview]
Message-ID: <gheh6c155v.fsf@lena.gouders.net> (raw)
In-Reply-To: <20131105230619.GC3337@free.fr> (Yann E. MORIN's message of "Wed, 6 Nov 2013 00:06:19 +0100")

"Yann E. MORIN" <yann.morin.1998@free.fr> writes:

> Martin, All,
>
> On 2013-10-28 03:16 +0100, Martin Walch spake thusly:
>> this test case leads to a segmentation fault:
>> 
>> config A
>> 	tristate "A" if m
>> 
>> config MODULES
>> 	boolean "MODULES"
>> 	option modules
>> 
>> As you can see, the MODULES symbol with the option modules is declared after
>> the first occurrence of an 'm' dependency. (Actually you can drop the MODULES
>> section or use a different symbol name. It does not matter.) Internally 'm' gets
>> converted into (symbol_mod && modules_sym), which adds a dependency on a
>> bad symbol, finally leading to dereferencing a null pointer.
>
> Indeed, reproduced here. I'll investigate further (although anyone is
> free to hack it, too! :-p)

Hi Yann, all,

I had a look at the problem, Martin reported and found out that menu_check_dep()
is causing the problem:

...
	case E_SYMBOL:
		/* change 'm' into 'm' && MODULES */
		if (e->left.sym == &symbol_mod)
			return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
		break;
...

It generates an expression that uses modules_sym which is NULL at that
time.

The problem seems to be that since commit 6902dccfda005fa modules_sym is
NULL until an "option modules" is found or the default is set but part
of the code needs a valid pointer at any time.

I played with other possible fixes but got the impression that these
would add even more complicated code and I decided to propose the patch
that I will send in a minute.  That patch basically reverts commit
6902dccfda005fa keeping the changes that (as far as I understood) are
the important part of that commit.  The parser also needs to be
regenerated but that should happen in a separate commit if I remember
corretly.  So, for now and until a review, I left it out.

I would be glad if you could have a look at the patch.

Dirk


>> If you move the declaration of the MODULES symbol to the top, everything
>> works fine.
>> 
>> The crash has been introduced last month with
>> 
>> > 6902dccfda005fa4c42410fa064fdd331ab42479
>> > kconfig: do not special-case 'MODULES' symbol
>> 
>> However, things were probably broken before. The problem has only
>> become visible.
>> 
>> The reason that configuring a Linux kernel does not crash the
>> configuration system is that there is currently no architecture that has a
>> symbol with a dependency on 'm' anywhere before the MODULES symbol.
>
> Regards,
> Yann E. MORIN.

  reply	other threads:[~2013-11-19 20:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-28  2:16 Segmentation Fault with 'm' Dependencies Martin Walch
2013-11-05 23:06 ` Yann E. MORIN
2013-11-19 20:57   ` Dirk Gouders [this message]
2013-11-19 21:08     ` [PATCH] scripts/kconfig: handle cases with 'option modules' defined after reference Dirk Gouders
2013-11-19 21:39     ` Segmentation Fault with 'm' Dependencies Yann E. MORIN

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=gheh6c155v.fsf@lena.gouders.net \
    --to=dirk@gouders.net \
    --cc=akpm@linux-foundation.org \
    --cc=libo.chen@huawei.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=mmarek@suse.cz \
    --cc=walch.martin@web.de \
    --cc=yann.morin.1998@free.fr \
    /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