tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Concerns in kern/subr_kobj.c



In article <Pine.NEB.4.64.1704180636420.367%speedy.whooppee.com@localhost>,
Paul Goyette  <paul%whooppee.com@localhost> wrote:
>-=-=-=-=-=-
>
>On Mon, 17 Apr 2017, Christos Zoulas wrote:
>
>> In article <Pine.NEB.4.64.1704171932080.13026%speedy.whooppee.com@localhost>,
>> Paul Goyette  <paul%whooppee.com@localhost> wrote:
>>> -=-=-=-=-=-
>>>
>>> On Mon, 17 Apr 2017, Paul Goyette wrote:
>>>
>>>> While perusing the code, I noticed some possible issues:
>>>>
>>>> 1. In kobj_unload() the calls to kobj_machdep() for data and rodata
>>>>   sections are conditional on the appropriate ko->ko_xxx_address being
>>>>   non-zero, yet the corresponding call for the text section is
>>>>   unconditional.
>>>>
>>>>   But, from code just a little bit further down, there is a check
>>>>   for the ko->ko_text_address being 0 before calling uvm_km_free()
>>>>   on the text section.
>>>>
>>>>   It seems to me that both calls should be conditional, or both
>>>>   should be unconditional.
>>>>
>>>> 2. In kobj_affix(), the calls to kobj_machdep() for data and rodata
>>>>   sections discard any possible error value from previous sections.
>>>>   So, if kobj_machdep() fails for the text section, but succeeds for
>>>>   the data or rodata sections, the rest of the code is unaware of
>>>>   any error having occurred.
>>>>
>>>>   In particular, the trailing call to kobj_unload() would not happen;
>>>>   instead the code would simply proceed to update the VM protection
>>>>   bits for the text and rodata sections.
>>>
>>> I'm proposing the attached diffs to address these issues.  Does anyone
>>> see any reason why these should not be committed?
>>
>> How about if (error == 0 && kobj->ko_foo_address) to avoid the extra
>> level of indentation?
>
>Yeah, looks better that way.  Revised diffs attached.

>+	if (error == 0 ko->ko_rodata_address != 0) {

&&

christos



Home | Main Index | Thread Index | Old Index