|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 2/2] xen/arm: Add support for booting gzip compressed uImages
Hi Julien,
On 02/02/2023 12:23, Julien Grall wrote:
>
>
> On 02/02/2023 11:12, Michal Orzel wrote:
>> Hi Julien,
>
> Hi Michal,
>
>>
>> On 02/02/2023 12:01, Julien Grall wrote:
>>>
>>>
>>> Hi Michal,
>>>
>>> On 02/02/2023 08:49, Michal Orzel wrote:
>>>> @@ -265,11 +284,14 @@ static __init int kernel_decompress(struct
>>>> bootmodule *mod)
>>>> #define IH_ARCH_ARM 2 /* ARM */
>>>> #define IH_ARCH_ARM64 22 /* ARM64 */
>>>>
>>>> +/* uImage Compression Types */
>>>> +#define IH_COMP_GZIP 1
>>>> +
>>>> /*
>>>> * Check if the image is a uImage and setup kernel_info
>>>> */
>>>> static int __init kernel_uimage_probe(struct kernel_info *info,
>>>> - paddr_t addr, paddr_t size)
>>>> + struct bootmodule *mod)
>>>> {
>>>> struct {
>>>> __be32 magic; /* Image Header Magic Number */
>>>> @@ -287,6 +309,8 @@ static int __init kernel_uimage_probe(struct
>>>> kernel_info *info,
>>>> } uimage;
>>>>
>>>> uint32_t len;
>>>> + paddr_t addr = mod->start;
>>>> + paddr_t size = mod->size;
>>>>
>>>> if ( size < sizeof(uimage) )
>>>> return -EINVAL;
>>>
>>> Shouldn't we return -ENOENT here?
>> Frankly speaking, I do not want to fall through in such a case.
>> If a kernel size is less than 64B, something is wrong, isn't it?
>
> I agree something is likely wrong but this should not be the job of
> kernel_uimage_probe() to enforce this for everyone.
>
> To give a concrete example, let's imagine we decide to re-order the call
> so kernel_uimage_probe() happens *after* an new header A than would
> require 128 bytes (the number is made up).
>
> It would be wrong for A to return -EINVAL because the other protocol may
> require a smaller size. The same goes here even at least for consistency.
>
> So if you really want to enforce a minimum size, then such check should
> be in the caller. Then each probe could return -ENOENT if the size is
> too small.
>
>> I am not sure if Xen would handle a kernel whose size is less than a page.
>
> I don't see any reason why it would not be.
>
>>
>> I do not like the whole falling through in kernel_probe even in case of
>> obvious violations.
>> But this is something not related to this series so I added to my TODO to
>> properly handle
>> the return types from kernel_probe path. If you really think, we should
>> return -ENOENT here,
>> then ok (although I do not like it). Could this be done on commit if you
>> insist on that?
>
> See above for an alternative proposal. Depending on the version we
> settle on I can do it on commit (but this is not going to happen today
> as OSSTEst is still blocked).
Ok, lets stick to your original suggestion with s/-EINVAL/-ENOENT/
and I will come up with something for a future patch as this will require more
changes
to make it generic. I also do not like at all the fact that we are not
informing the user about the error code
when calling panic from construct_{dom0,domU}...
>
> Cheers,
>
> --
> Julien Grall
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |