Re: Software FPU emulation in linux kernel

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

 



There are problems in fp_fsqrt when using the fp_one constant.

fp_one is declared as

static const struct fp_ext fp_one = {
	.exp = 0x3fff,
};

So, despite the comment, this is not normalized (the explicit bit is not set).
This will have the effect that it is changed to zero, when fp_dyadic_check is 
called in the entry of fp_add. So this call does not only have no effect, it 
will also modify the constant.

And even if that is changed, fp_add will also write to it:

https://github.com/torvalds/linux/blob/
848e076317446f9c663771ddec142d7c2eb4cb43/arch/m68k/math-emu/fp_arith.c#L90:

dest->lowmant = src->lowmant = 0;

And 2 lines later, the call to
fp_denormalize(src, diff);

will also modify the src argument.

Wouldn't that crash the kernel, if it tries to write to a write-protected 
section?








[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux