Re: [PATCH] libfdt: Correct signed/unsigned comparisons

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



On Thu, Sep 17, 2020 at 11:26:44AM +0100, André Przywara wrote:
> On 17/01/2020 09:23, David Gibson wrote:
> 
> Hi,
> 
> > On Thu, Jan 16, 2020 at 08:58:12PM +1300, Simon Glass wrote:
> >> Hi David,
> >>
> >> On Thu, 16 Jan 2020 at 19:50, David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> wrote:
> >>>
> >>> On Sun, Jan 12, 2020 at 11:52:08AM -0700, Simon Glass wrote:
> >>>> These warnings appear when building U-Boot on x86 and some other targets.
> >>>> Correct them by adding casts.
> >>>>
> >>>> Example:
> >>>>
> >>>> scripts/dtc/libfdt/fdt.c: In function ‘fdt_offset_ptr’:
> >>>> scripts/dtc/libfdt/fdt.c:137:18: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int’ [-Wsign-compare]
> >>>>    if ((absoffset < offset)
> >>>>
> >>>> Signed-off-by: Simon Glass <sjg@xxxxxxxxxxxx>
> >>>
> >>> Hmm.  So squashing warnings is certainly a good thing in general.
> >>>
> >>> Unfortunately, I'm really uncomfortable with most of these changes.
> >>> In a number of cases they are outright wrong.  In most of the others,
> >>> the code was already correct.  I dislike adding casts to suppress
> >>> spurious warnings on correct code because that can end up hiding real
> >>> problems which might be introduced by future changes.
> >>>
> >>> Case by case details below.
> >>
> >> Thanks for the review. I agree this is all really horrible,
> >> particularly in light of the fact that it doesn't fix bugs and perhaps
> >> introduces some.
> >>
> >> This was just a quick patch to silence the warnings. If we do make
> >> fixes here we should really make sure that there are test cases to
> >> trigger each check. I suspect we have some but not all.
> > 
> > Yeah, adding some safety test cases for egregiously bad input like
> > negative buffer sizes is probably a good idea.
> > 
> >> What do you think we should do? The warnings are going to be very
> >> annoying for people. I could perhaps split the patch up and work
> >> through things one by one.
> > 
> > Yeah, we want to find some way to remove the warnings, and I think
> > splitting up and working piece by piece will be necessary.
> 
> Has anyone done anything on that front?
> If not, I would take a deep breath and try to tackle this one by one. I
> was grudgingly ignoring this in U-Boot so far, but it popped up in
> Trusted Firmware now as well, so I have a business reason (TM).

> > I think the very first step, is to find definitive info on what
> > exactly the defined behaviour of C is with a signed vs. unsigned
> > comparison.
> > 
> > The help text of -Wsign-compare seems to imply that assuming:
> > 
> > 	signed int a;
> > 	unsigned int b;
> > 
> > then 
> > 	if (a < b) ...
> > 
> > is equivalent to
> > 	if ((unsigned int)a < b) ...
> > 
> > But I thought that this was not the case.  Rather, I thought it was
> > supposed to always evaluate to true if b > INT_MAX.  We need to know
> > which is the case as a starting point.

I since had a brief look at this, and it appears I was wrong about
this behaviour, which makes this whole project rather more urgent.
I'd still appreciate someone looking at the standards to double check,
though.

I'm unlikely to have time to look at this myself, though, so I'd be
very happy if you took this on, and I'll do my absolute best to review
and merge promptly.

Fwiw, the more "bite-size" the patches are, the easier it is for me to
review.  So I'd suggest fixing just a small set of related cases at a
time, with a clear justification for why the new semantics are correct
in the commit message.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux