All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: AKASHI Takahiro <takahiro.akashi@linaro.org>
Cc: Julien Thierry <julien.thierry@arm.com>,
	catalin.marinas@arm.com, will.deacon@arm.com,
	bauerman@linux.vnet.ibm.com, dhowells@redhat.com,
	vgoyal@redhat.com, herbert@gondor.apana.org.au,
	davem@davemloft.net, akpm@linux-foundation.org,
	mpe@ellerman.id.au, dyoung@redhat.com, bhe@redhat.com,
	arnd@arndb.de, kexec@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 03/10] kexec_file: factor out arch_kexec_kernel_*() from x86, powerpc
Date: Wed, 11 Oct 2017 07:55:20 +0100	[thread overview]
Message-ID: <0E8EA4C7-7229-43C8-A549-753F3DADF11C@linaro.org> (raw)
In-Reply-To: <20171011050734.GE6756@linaro.org>

Hello Takahiro-san,

> On 11 Oct 2017, at 06:07, AKASHI Takahiro <takahiro.akashi@linaro.org> wrote:
> 
> On Tue, Oct 10, 2017 at 12:02:01PM +0100, Julien Thierry wrote:
> 
> [snip]
> 
>>> --- a/kernel/kexec_file.c
>>> +++ b/kernel/kexec_file.c
>>> @@ -26,30 +26,79 @@
>>> #include <linux/vmalloc.h>
>>> #include "kexec_internal.h"
>>> 
>>> +const __weak struct kexec_file_ops * const kexec_file_loaders[] = {NULL};
>>> +
>>> static int kexec_calculate_store_digests(struct kimage *image);
>>> 
>>> +int _kexec_kernel_image_probe(struct kimage *image, void *buf,
>>> +                          unsigned long buf_len)
>>> +{
>>> +     const struct kexec_file_ops *fops;
>>> +     int ret = -ENOEXEC;
>>> +
>>> +     for (fops = kexec_file_loaders[0]; fops && fops->probe; ++fops) {
>> 
>> Hmm, that's not gonna work (and I see that what I said in the previous
>> patch was not 100% correct either).
> 
> Can you elaborate this a bit more?
> 
> I'm sure that, with my code, any member of fops, cannot be changed;
> "const struct kexec_file_ops *fops" means that fops is a pointer to
> "constant sturct kexec_file_ops," while "struct kexec_file_ops *
> const kexec_file_loaders[]" means that kexec_file_loaders is a "constant
> array" of pointers to "constant struct kexec_file_ops."
> 

No, you need 2x const for that, i.e.,

const struct kexec_file_ops * const kexec_file_loaders[]

otherwise, the pointed-to objects may still be modified. 





> Thanks,
> -Takahiro AKASHI
> 
> 
>> 'fops' should be of type 'const struct kexec_file_ops **', and the loop
>> should be:
>> 
>> for (fops = &kexec_file_loaders[0]; *fops && (*fops)->probe; ++fops)
>> 
>> With some additional dereferences in the body of the loop.
>> 
>> Unless you prefer the previous state of the loop (with i and the break
>> inside), but I still think this looks better.
>> 
>> Cheers,
>> 
>> --
>> Julien Thierry
>> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

WARNING: multiple messages have this Message-ID (diff)
From: ard.biesheuvel@linaro.org (Ard Biesheuvel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 03/10] kexec_file: factor out arch_kexec_kernel_*() from x86, powerpc
Date: Wed, 11 Oct 2017 07:55:20 +0100	[thread overview]
Message-ID: <0E8EA4C7-7229-43C8-A549-753F3DADF11C@linaro.org> (raw)
In-Reply-To: <20171011050734.GE6756@linaro.org>

Hello Takahiro-san,

> On 11 Oct 2017, at 06:07, AKASHI Takahiro <takahiro.akashi@linaro.org> wrote:
> 
> On Tue, Oct 10, 2017 at 12:02:01PM +0100, Julien Thierry wrote:
> 
> [snip]
> 
>>> --- a/kernel/kexec_file.c
>>> +++ b/kernel/kexec_file.c
>>> @@ -26,30 +26,79 @@
>>> #include <linux/vmalloc.h>
>>> #include "kexec_internal.h"
>>> 
>>> +const __weak struct kexec_file_ops * const kexec_file_loaders[] = {NULL};
>>> +
>>> static int kexec_calculate_store_digests(struct kimage *image);
>>> 
>>> +int _kexec_kernel_image_probe(struct kimage *image, void *buf,
>>> +                          unsigned long buf_len)
>>> +{
>>> +     const struct kexec_file_ops *fops;
>>> +     int ret = -ENOEXEC;
>>> +
>>> +     for (fops = kexec_file_loaders[0]; fops && fops->probe; ++fops) {
>> 
>> Hmm, that's not gonna work (and I see that what I said in the previous
>> patch was not 100% correct either).
> 
> Can you elaborate this a bit more?
> 
> I'm sure that, with my code, any member of fops, cannot be changed;
> "const struct kexec_file_ops *fops" means that fops is a pointer to
> "constant sturct kexec_file_ops," while "struct kexec_file_ops *
> const kexec_file_loaders[]" means that kexec_file_loaders is a "constant
> array" of pointers to "constant struct kexec_file_ops."
> 

No, you need 2x const for that, i.e.,

const struct kexec_file_ops * const kexec_file_loaders[]

otherwise, the pointed-to objects may still be modified. 





> Thanks,
> -Takahiro AKASHI
> 
> 
>> 'fops' should be of type 'const struct kexec_file_ops **', and the loop
>> should be:
>> 
>> for (fops = &kexec_file_loaders[0]; *fops && (*fops)->probe; ++fops)
>> 
>> With some additional dereferences in the body of the loop.
>> 
>> Unless you prefer the previous state of the loop (with i and the break
>> inside), but I still think this looks better.
>> 
>> Cheers,
>> 
>> --
>> Julien Thierry
>> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

WARNING: multiple messages have this Message-ID (diff)
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: AKASHI Takahiro <takahiro.akashi@linaro.org>
Cc: herbert@gondor.apana.org.au, bhe@redhat.com,
	Julien Thierry <julien.thierry@arm.com>,
	catalin.marinas@arm.com, will.deacon@arm.com,
	linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
	dhowells@redhat.com, arnd@arndb.de,
	linux-arm-kernel@lists.infradead.org, mpe@ellerman.id.au,
	bauerman@linux.vnet.ibm.com, akpm@linux-foundation.org,
	dyoung@redhat.com, davem@davemloft.net, vgoyal@redhat.com
Subject: Re: [PATCH v5 03/10] kexec_file: factor out arch_kexec_kernel_*() from x86, powerpc
Date: Wed, 11 Oct 2017 07:55:20 +0100	[thread overview]
Message-ID: <0E8EA4C7-7229-43C8-A549-753F3DADF11C@linaro.org> (raw)
In-Reply-To: <20171011050734.GE6756@linaro.org>

Hello Takahiro-san,

> On 11 Oct 2017, at 06:07, AKASHI Takahiro <takahiro.akashi@linaro.org> wrote:
> 
> On Tue, Oct 10, 2017 at 12:02:01PM +0100, Julien Thierry wrote:
> 
> [snip]
> 
>>> --- a/kernel/kexec_file.c
>>> +++ b/kernel/kexec_file.c
>>> @@ -26,30 +26,79 @@
>>> #include <linux/vmalloc.h>
>>> #include "kexec_internal.h"
>>> 
>>> +const __weak struct kexec_file_ops * const kexec_file_loaders[] = {NULL};
>>> +
>>> static int kexec_calculate_store_digests(struct kimage *image);
>>> 
>>> +int _kexec_kernel_image_probe(struct kimage *image, void *buf,
>>> +                          unsigned long buf_len)
>>> +{
>>> +     const struct kexec_file_ops *fops;
>>> +     int ret = -ENOEXEC;
>>> +
>>> +     for (fops = kexec_file_loaders[0]; fops && fops->probe; ++fops) {
>> 
>> Hmm, that's not gonna work (and I see that what I said in the previous
>> patch was not 100% correct either).
> 
> Can you elaborate this a bit more?
> 
> I'm sure that, with my code, any member of fops, cannot be changed;
> "const struct kexec_file_ops *fops" means that fops is a pointer to
> "constant sturct kexec_file_ops," while "struct kexec_file_ops *
> const kexec_file_loaders[]" means that kexec_file_loaders is a "constant
> array" of pointers to "constant struct kexec_file_ops."
> 

No, you need 2x const for that, i.e.,

const struct kexec_file_ops * const kexec_file_loaders[]

otherwise, the pointed-to objects may still be modified. 





> Thanks,
> -Takahiro AKASHI
> 
> 
>> 'fops' should be of type 'const struct kexec_file_ops **', and the loop
>> should be:
>> 
>> for (fops = &kexec_file_loaders[0]; *fops && (*fops)->probe; ++fops)
>> 
>> With some additional dereferences in the body of the loop.
>> 
>> Unless you prefer the previous state of the loop (with i and the break
>> inside), but I still think this looks better.
>> 
>> Cheers,
>> 
>> --
>> Julien Thierry
>> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2017-10-11  6:55 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-10  6:36 [PATCH v5 00/10] arm64: kexec: add kexec_file_load() support AKASHI Takahiro
2017-10-10  6:36 ` AKASHI Takahiro
2017-10-10  6:36 ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 01/10] include: pe.h: remove message[] from mz header definition AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 02/10] resource: add walk_system_ram_res_rev() AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 03/10] kexec_file: factor out arch_kexec_kernel_*() from x86, powerpc AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10 11:02   ` Julien Thierry
2017-10-10 11:02     ` Julien Thierry
2017-10-10 11:02     ` Julien Thierry
2017-10-11  5:07     ` AKASHI Takahiro
2017-10-11  5:07       ` AKASHI Takahiro
2017-10-11  5:07       ` AKASHI Takahiro
2017-10-11  6:55       ` Ard Biesheuvel [this message]
2017-10-11  6:55         ` Ard Biesheuvel
2017-10-11  6:55         ` Ard Biesheuvel
2017-10-11  8:24       ` Julien Thierry
2017-10-11  8:24         ` Julien Thierry
2017-10-11  8:24         ` Julien Thierry
2017-10-13  8:47         ` AKASHI Takahiro
2017-10-13  8:47           ` AKASHI Takahiro
2017-10-13  8:47           ` AKASHI Takahiro
2017-10-10 11:06   ` Julien Thierry
2017-10-10 11:06     ` Julien Thierry
2017-10-10 11:06     ` Julien Thierry
2017-10-14 11:37   ` kbuild test robot
2017-10-14 11:37     ` kbuild test robot
2017-10-14 11:37     ` kbuild test robot
2017-10-19  4:36     ` AKASHI Takahiro
2017-10-19  4:36       ` AKASHI Takahiro
2017-10-19  4:36       ` AKASHI Takahiro
2017-10-15  3:10   ` kbuild test robot
2017-10-15  3:10     ` kbuild test robot
2017-10-15  3:10     ` kbuild test robot
2017-10-10  6:36 ` [PATCH v5 04/10] kexec_file: factor out crashdump elf header function from x86 AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 05/10] asm-generic: add kexec_file_load system call to unistd.h AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 06/10] arm64: kexec_file: create purgatory AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 07/10] arm64: kexec_file: load initrd, device-tree and purgatory segments AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 08/10] arm64: kexec_file: set up for crash dump adding elf core header AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 09/10] arm64: enable KEXEC_FILE config AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36 ` [PATCH v5 10/10] arm64: kexec_file: add Image format support AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro
2017-10-10  6:36   ` AKASHI Takahiro

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=0E8EA4C7-7229-43C8-A549-753F3DADF11C@linaro.org \
    --to=ard.biesheuvel@linaro.org \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bauerman@linux.vnet.ibm.com \
    --cc=bhe@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=dyoung@redhat.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=julien.thierry@arm.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=takahiro.akashi@linaro.org \
    --cc=vgoyal@redhat.com \
    --cc=will.deacon@arm.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.